はじめに
皆さんも色々な用途でDiscordを使っていると思います。私も普段仕事で使うこともありますし、オンラインゲーム等で使用してたりします。そんなある日、ふと思いついてしまいました。
「DiscordBot作れたら面白そうじゃね?」
本当にそれだけでした。そのため、筆者が書くコードはマジやべぇレベルで汚いし、効率的でもありません。
実装するまでの備忘録がてらの記事を作成していきたいと思います。
これから始める人は、「あ、こんな雑魚でも作れるもんがあるのか」と思ってください。
ある程度慣れてる人や知識がちゃんとある人は「なんだこの雑魚。もっとまともなもん書けよ」と生暖かい目で見てやってください。
参考になるかはさっぱり微妙ですが、筆者と同じく「とりあえず何か作ってみよう」と思った人の参考になれば幸いです。
そして壁にぶちあたった様子が見られたら助けてやってください。
閑話休題。
最初にやったこと
コードの作り方を調べる! と言えれば恰好よかったのですが、そこまでするのは面倒くさい。なので、ChatGPTとWindows標準のCopilotを利用して少しずつ作ることにしました。
人生は諦めが肝心です。多分言葉としてこれから何度も出てきます。結果として「ほしい機能に近いものが作れたらヨシッ」という感覚で妥協することに決めました。近いもの、というのが大事です。
というわけで作ってみたいもの(機能)を決めました。
主な目的はプレイしているオンラインゲームの鯖での使用。Botを公開配布等は考えておらず、あくまで自分が管理権限を持つ場合に限っての使用です。
1.スケジュールのリマインド機能
「指定した時間」に「指定した内容」を「指定したチャンネル」に送信する機能
2.メッセージリンクの埋め込み表示機能
Discordで発言したメッセージリンクを埋め込みリンクで送信する機能
3.外部SNS等のURLの埋め込み表示機能
具体的にはTwitter(現X)のリンクを貼った時に、画像を全て埋め込みで表示する機能
4.WebサイトのURL登録機能
事前に登録したWebサイトのURLを返してくれる機能
5.メッセージ一括削除機能
指定したユーザーのメッセージの一括削除機能
といったものをつっこんでみたいと思います。他にも随時増えていったら試していこうと思います。
というわけで準備
VSCodeを用意して、Discor.pyとかpycordをインストールしてBotTOKENを用意して…とぶっちゃけ最初に開始する際の準備などはありふれているので割愛します。本来はちゃんと学ぶべきスタートラインだと思います。
筆者は結果だけ得られればいいという最低な動機のもと始めています。真似してはいけません。
まず適当にCodeを突っ込んでみる。
とは言っても、何もないんじゃつっこんでみようもない。hogehogeとかHello,Wolrdとかまず打ってみるべきだとは思いますが、せっかちな筆者には苦痛でした。
しかしこのままだと「とりあえず作ってみよう」という人に向かない記事になってしまうので、頑張ってみます。
とりあえず簡単なコードを教えて、Copilot!
Q.「HELLOWEEN」と返すシンプルなコードを教えて。
A.「HELLOWEEN」というメッセージに反応して同じメッセージを返すシンプルなDiscordボットのPythonコードを以下に示します。
…いや、なんかキミ、ちょっと違わない? まぁ、いっかぁ! よろしくなぁ! ちなみにHELLOWEENというのは誤字ではなくドイツのバンドです。
import discord
from discord.ext import commands
# ボットのコマンドプレフィックスを設定
bot = commands.Bot(command_prefix='!')
# 'HELLOWEEN'というメッセージに反応するコマンド
@bot.command()
async def helloween(ctx):
await ctx.send('HELLOWEEN')
# ここにあなたのDiscordボットのトークンを入れてください
bot.run('YOUR_BOT_TOKEN')
とりあえず何となく文章から読み取れるものとして一つずつ把握していこうと思います。
import discord
from discord.ext import commands
discord機能を入力して、discord.extからcommandsという機能を入力しますよ、という意味と勝手に把握。初心者にかく恥などないのである。
# ボットのコマンドプレフィックスを設定
bot = commands.Bot(command_prefix='!')
「コマンドプレフィックスってなぁに?( ᐛ )」と思って調べたら、どうやらBotが認識するためのトリガーみたいなものらしい。「OK、Go〇gle」みたいな掛け声と思っておきます。正しい認識かはわかりません。
# 'HELLOWEEN'というメッセージに反応するコマンド
@bot.command()
async def helloween(ctx):
await ctx.send('HELLOWEEN')
はい、ここからもうさっぱりわかりません! 筆者の脳みそは0.5mgぐらいしかないんですよ!?
syncは同期って意味だったはずだから、asyncだと非同期? はいいとして、defって何、何なのさ!?
と思って調べてみたら、定義するためにつける拡張子みたいなもんらしい。ctxはコンテキスト情報で、コマンドを呼び出した時の複数の情報(端折った)を含むとか。
つまりasync def helloween(ctx)で「helloweenで呼び出すコンテキスト情報を非同期で定義する」的な意味なんですかね? 謎は深まるばかりである。謎の水深は多分0.01mmぐらい。
とりあえずお決まりの構文的なものとして出てくるものだと把握しとくに留めます。人生はやはり諦めが肝心です。
# ここにあなたのDiscordボットのトークンを入れてください
bot.run('YOUR_BOT_TOKEN')
これは流石にわかる。DiscordBotのTOKENを入れればいいだけですね。
でもこれって、Githubとかにそのままあげたら結構あぶねーのでは? と疑問だけメモしておく。
多分何かしらマスクする方法があるでしょう! でも今は後回し!
とりあえず試しでコードを打ち込んでみただけなので、今回は以上で終わります。
次の記事あたりから、作ってみたい機能であげた5つの機能を入れてみたいと思います。
多分途中でハゲちらかしながら進めることと思いますが、お付き合いいただければ幸いです。