[Golang]Discord Botの作り方

GolangでDiscord Botを作ってる日本語の記事が少なかったので、作り方を書こうと思います。

英語の記事やライブラリのサンプルを参考にした。

参考: rootwire.space discordgo/examples

Discordトークンの取得

ここにアクセスして名前やアイコンなどの準備をする。そして、CLIENT_IDとサイドバーにあるSETTINGS>Botを開いてBotのトークンを控える。

https://discordapp.com/oauth2/authorize?client_id=CLIENT_ID&scope=bot&permissions=0

CLIENT_IDのところに先ほど控えておいたCLIENT_IDを入力。そして、追加したいサーバーを認証したらDiscord側の設定の方は大丈夫。

Hello, Worldを返すBotを作成

まずはライブラリをインストールします。

$ go get github.com/bwmarrin/discordgo

それではコードを書いていきます。DISCORD_TOKENは先ほど控えたBotのトークンを使ってください。ターミナルなどで入力するかdirenvなどのツールを使ってください。

package main

import (
  "fmt"
  "os"

  "github.com/bwmarrin/discordgo"
)

func main() {
  d, err := discordgo.New("Bot " + os.Getenv("DISCORD_TOKEN"))
  if err != nil {
    fmt.Println("failed to create discord session", err)
  }

  if err != nil {
    fmt.Println("failed to access account", err)
  }

  d.AddHandler(handleCmd)
  err = d.Open()
  if err != nil {
    fmt.Println("unable to establish connection", err)
  }

  defer d.Close()

  <-make(chan struct{})
}

func handleCmd(s *discordgo.Session, msg *discordgo.MessageCreate) {
  user := msg.Author
  if user.ID == s.State.User.ID || user.Bot {
    return
  }

  content := msg.Content

  if (content == "hello") {
    s.ChannelMessageSend(msg.ChannelID, "World!")
  }

  fmt.Printf("Message: %+v\n", msg.Message)
}

handleCmd()のなかに具体的な処理を書いています。

if (content == "hello") {
  s.ChannelMessageSend(msg.ChannelID, "World!")
}

ここでhelloをdiscordのチャンネルで打つとWorld!が返ってくるよ。コマンドライン上にはメッセージが表示されていることも確認しておいてください。

discordgoを使うと超簡単にDiscord Botが作れてハッピー!