1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

NimAdvent Calendar 2021

Day 3

【Dimscord】Nim で Discord Bot を作る

Last updated at Posted at 2021-12-02

はじめに

私は 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 というのがありますが,これはこれから使うので覚えておいてください.また,これは他の人に知られると乗っ取られてしまうので漏れないようにしましょう.
スクリーンショット 2021-11-07 14.18.52.png

これで Bot はできたのであなたの Discord のサーバーに追加していきます.左の方にある OAuth2 をクリックし,下の画像を参考に bot というところをクリックしてその下にある URL に飛んで画面の指示に従っていけばサーバーに追加できます.追加できるサーバーがない場合はサーバーを作りましょう.
スクリーンショット 2021-11-07 14.21.22.png

Dimscord のインストール

$ nimble install dimscord

中身を書く

main.nim
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

スクリーンショット 2021-11-07 15.08.46.png

完成!

おわりに

本当に作るだけで終わりにしてしまいましたが,Dimscord に関してなにか書いてほしいものがあったらコメントでお願いします.私が書けるものでありかつ気が向いたら書きます.

参考にさせていただいたサイト

krisppurg/dimscord
dimscord

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?