この記事ははてなブログからの移転記事です。自動的に移転するようになっています。
Discode Botを作ろう!(大声)
前回、苦しみながら(?)、特定のメッセージを送ると返信してくれるかわいいOimoBotを制作。
▼その時の記事はこちら
https://subsleepical.com/2022/04/24/2022-04-24-022423/
今回は「指定曜日の指定時間に指定チャンネルにメッセージを送る」ようにしたい。
すごくかっこつけて言ってるけど、要は「次の日のゴミ出しを非常に非常に忘れるので、前日にBotに通知させよう!」ってだけ……。頑張ろう!
この記事は個人の備忘録を目的としたものであり、解決策をわかりやすく明示する記事ではありません。
▼今回一番参考になった記事はこちらです▼
[Python]Discordで指定時間に発言させるBOT #Python3 – Qiita
とりあえず下調べしてみる。作り方を想像する。
とりあえず、色々記事やらなんやら当たってみる。
これが使えそうってその時の自分はメモってた。
Scheduleを使って格闘する。挫折する。
無理だった。「やってほしいイベントを書く」→「それをいつやるかを書く(Schedule)」→「指定チャンネルにSendする」みたいなのをイメージしながら書いた・・・けど、、ターミナルにエラーが出るわ出るわ。頑張ってエラー内容を読み解こうとしたけど、挫折。違う道を探す。
‘Client’ オブジェクトは ‘get_cahnnel’ という属性を持ちません。って言われてた。どう対処すればいいか全然想像つかず。Python初心者敗北。ちなみに別のpyファイルを作って、Scedule関数を試してみたら、上手く動いたので、Discode.pyとうまく繋げられなかったのが敗因という予想。あと後述の公式ドキュメントにスリープがどうのこうのって書いてあって、そこらへんもわかってないといけないのかなあ~と思った。
やりたいことと似たようなことをやっている神記事を見つける。
つまるところやりたいことはこれやん!!!!ありがて~~~~!!!
Qiita記事を参考に自分のやりたいことに改造していく
(ぜんぜん何のことかわからないけど)Discode.exeのtasksというものを使っているらしい。
▼公式ドキュメント
そしてなんかそれっぽいのができた。
@tasks.loop(seconds=30) async def time_check(): sleepTime = 0 # 現在の時刻 now = datetime.now().strftime('%A %H:%M') # 指定時間のとき if now == "Sunday 21:51": channel = client.get_channel(CHANNEL_ID) await channel.send('月曜日は段ボールの日だよ!')
これも合ってるか分からん!!!w でも21時51分前に実行して、51分にちゃんと通知が来たからとりあえずヨシ!!!!
strfttimeというのを使っているみたい。はじめまして。
strftime関数は、引数で指定された書式文字列に従い、日付を表現する文字列を返します。
へ~~~。要勉強ですね。
友人がもうちょっと綺麗な書き方あるよって言ってくる
さーせん。。。汚くて、、、、すみません、、、、。
頑張って書き直す。
2022/12/25追記:現在使用しているコードとその中身
@tasks.loop(seconds=30) async def time_check(): sleepTime = 0 # 現在の時刻 now = datetime.now() if now.weekday() == 6 and now.hour == 19 and now.minute == 0: channel = client.get_channel(CHANNEL_ID) await channel.send('月曜日は段ボールの日だよ!') time_check.start()
datetimeモジュールで日付や時刻を取得する
datetimeを使用することで、日付や時刻を簡単に取得することができます。
曜日を取得する
weekdayメソッドでは、月曜日を0、日曜日を6として曜日を返してくれます。
上記コードでは、もし6だったら日曜日ということなので、月曜日のゴミ出しをお知らせしています
時間を取得する
.hourと.minuteで時刻を取得しています
2023/01/13追記:discord.ext.tasksのエラー
現在「discord.ext.tasks」を使用すると、asyncio~~と出て、loopが正しく実行されない場合があります。
解決したので、別途記事にしました。こちらを参照ください。
動くだけで、幸せ。
次はOimobotに何してもらおうかな…。
[
コメント