はじめに
私は Python で Discord Bot を作っていたものですが,Nim にも素晴らしい Discord API ラッパーがあるので使っていこうと思います.実は Discordnim というライブラリもあったのですが,開発が止まってしまっているようなので今回は Dimscord というライブラリを使っていきます.Nim は初心者なので大目に見てください(編集リクエスト歓迎です).
前提知識
- Nim の基本的な文法
著者の環境
- macOS Big Sur v11.5.2
- Nim v1.2.6
- Dimscord v1.3.0
本題
Bot の作成
Discord Developer Portal で右上の New Application をクリックし,Application の名前を入力してください.そして左の方の Bot をクリックし,右の方の Add Bot をクリックしてください.
真ん中の方に TOKEN というのがありますが,これはこれから使うので覚えておいてください.また,これは他の人に知られると乗っ取られてしまうので漏れないようにしましょう.
これで Bot はできたのであなたの Discord のサーバーに追加していきます.左の方にある OAuth2 をクリックし,下の画像を参考に bot というところをクリックしてその下にある URL に飛んで画面の指示に従っていけばサーバーに追加できます.追加できるサーバーがない場合はサーバーを作りましょう.
Dimscord のインストール
$ nimble install dimscord
中身を書く
import dimscord, asyncdispatch, options
let discord = newDiscordClient("<your bot token goes here>")
# on_ready イベントの処理
proc onReady(s: Shard, r: Ready) {.event(discord).} =
echo "Ready as " & $r.user
# message_create イベントの処理
proc messageCreate(s: Shard, m: Message) {.event(discord).} =
if m.author.bot:
return
if m.content == "!ping": # もしメッセージの内容が "!ping" だったら
discard await discord.api.sendMessage(m.channel_id, "Pong!")
# Discord に接続して, Bot を起動する
waitFor discord.startSession()
onReady は基本的に Bot を起動させたときに呼ばれます.messageCreate は Bot が見える範囲でメッセージが送信されたときに呼ばれます.m.author.bot
が true のときは Bot (自分以外のも含む)がそのメッセージを送信したときであるので,無限ループを防止するために return しています.メッセージの内容は m.content
に入っているのでこれを使ってコマンドを作ります.discord.api.sendMessage
はメッセージを返すので discard します.(discard しないでこれを使って色々することもできます.)
起動する
$ nim c -r -d:ssl main.nim
完成!
おわりに
本当に作るだけで終わりにしてしまいましたが,Dimscord に関してなにか書いてほしいものがあったらコメントでお願いします.私が書けるものでありかつ気が向いたら書きます.