背景
グラブルのDiscordの鯖で毎日定時に日課の募集かけてくれるBot欲しいよねーって話があって、試しに作ってみた。
プログラミング自体はJavaとかを少々やってるくらい。
Botに関してはなんか自動で動くものっぽい程度の認識。
いわゆる超初心者がBotを始めて作ってみたよ、って感じの備忘録。
準備するもの(物理)
- Botを稼働させる環境(とりあえず電源いれっぱなしのPCを利用)
準備するもの(PC)
- pythonの開発環境(本記事では簡単に)
- DiscordのBotアカウント
1.DiscordのBotアカウント作成
-
こちらの記事を参考にBotアカウントを作成。
- 普段アプリ版を使っていてDEVELOPER PORTALがどこにあるか結局分からなかったので、ブラウザ版でDiscordにログインしてDEVELOPER PORTALにアクセスした。
2.pythonのインストール
-
公式サイトから落としてくる
- 記載時点で最新のバージョン(3.7.3)を利用
- 普通にOK連打でインストール完了
- これで動くのかなーと思って他の方が作ったコードを動かしてみたところ、importエラーっぽいものが発生。
- pythonさんがデフォルトでdiscordBotに対応してるワケないよねってことでそれも導入
3.discordBot開発に必要なライブラリの導入
- この辺を参考にしながら導入。
- コマンドプロンプトでコマンドを打つと、一応完了。
> py -m pip install -U discord.py
なんか python -m pip install --upgrade pip
してくれみたいなメッセージも出たので一緒に更新しておく。
> py -m pip install --upgrade pip
4. いろいろ試行錯誤しながら作成
- discord.pyは3.6以前と3.7以降で結構変わったらしい。
- 古いサンプルはそのまま流用できない。
- この記事に詳しく書いてあるので参考にしながら手直し。
- リアクション付ける時に数字のリアクション用意するのが大変だった。
- 結果としては
f'{1}\N{COMBINING ENCLOSING KEYCAP}'
みたいに書くことで動いた。まさかフォーマット指定で数値を入れるとは。 - 普通の絵文字は
\N{Unicode名称}
でOK。数値が特殊。
- 結果としては
- チャンネルIDはDiscordの開発者モードを有効にしないと取得できない。
# coding:UTF-8
import discord
from datetime import datetime
from discord.ext import tasks
client = discord.Client()
TOKEN = "トークン"
@client.event
async def on_ready():
print('ready.')
time_check.start()
@tasks.loop(seconds=60)
async def time_check():
timeStr = datetime.now().strftime('%H:%M')
if timeStr == '07:00':
channel = client.get_channel(チャンネルのID)
msg = await channel.send("本日アルバハに参加したい方を募集します。\n\n21時~ :one:\n22時~ :two:\n23時~ :three:\nいつでも :four:")
await msg.add_reaction(f'{1}\N{COMBINING ENCLOSING KEYCAP}')
await msg.add_reaction(f'{2}\N{COMBINING ENCLOSING KEYCAP}')
await msg.add_reaction(f'{3}\N{COMBINING ENCLOSING KEYCAP}')
await msg.add_reaction(f'{4}\N{COMBINING ENCLOSING KEYCAP}')
client.run(TOKEN)
5.起動
コマンドプロンプトから
py 作成したファイル.py
でとりあえずは動く。
理想を言えばどっかに別サーバ立てて自分のPCを落としても問題なく動くようにしたいところではあるけれど、身内用の簡単なBotだしこんなもんでいいか、ということで終了。