14
3

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.

Discordの通知をすべてDiscordで通知するBOT

Last updated at Posted at 2021-12-16

クソアプリ Advent Calendar 2021 17日目の記事です。

初めに

どうも、最近Javascriptばっか使ってて、Pythonを忘れかけてる人です。

この記事では、pycordというPythonのライブラリを使ってDiscord botを使ったので、その紹介をしていきます。

作ったBOT紹介

Discordの通知をDiscordでします。

image.png
image.png
送信されたもの、すべてが通知されます。

コマンド

n.join

通知をonにします。

このコマンドを実行すると、コマンドを実行したサーバーのメッセージのうち、botが閲覧できるメッセージの送信通知が全部DMで送られてきます。

n.leave

通知をoffにします。

これで、あのうるさいピコピコ音にうんざりしなくて済みます。

招待URL

Pycord

この記事で紹介したbotは、このライブラリを使って開発しました。

pythonでdiscord botといえばdiscord.pyが主流でした。しかし、とある理由で開発が中止となってしまいました。
そんなdiscord.pyの後継者として、いま注目を浴びてるのが、このライブラリ

docsもどこか懐かしい感じがします。

インストール

pip install -U py-cord

基本機構

import discord

class MyClient(discord.Client):
    async def on_ready(self):
        print(f'Logged on as {self.user}!')

    async def on_message(self, message):
        print(f'Message from {message.author}: {message.content}')

client = MyClient()
client.run('my token goes here')

この記事で紹介したbotのコードは、このコードをベースに作りました。

簡易コマンド

コマンドの実装方法には複数あります。

  • Slash Command
  • ext.commands
  • message.content

こんな感じかな?

このbotで使った方法は、message.contentを使った方式です。

上で書いた基本機構のon_messageで受け取った引数messageを使ってコマンドを実装します。

if message.content.startswith('n.join'):
  # 処理

こんな感じ

イコールを使ってもよかったけど、のちに他の人を強制的に通知onにするいたずら機構も作ろうと思い、.startswith()を使いました。

DMへメッセージ送信

DMへのメッセージ送信は、discord.Membersend()することでできます。

Intents問題

通知対象のdiscord idをdictで保管してます。
メッセージを受け取ったら、通知をするためにそのidからメンバーを取得します。

しかし、最初は、このintentsを設定していなかったため、メンバーを取得できませんでした。

二時間くらいかけて、解決

intents = discord.Intents.all()
client = MyClient(intents=intents)

こいつをclient.run()の前に追加してあげると、解決

Herokuにデプロイしよう!

こんな記事があります。

requirements.txtに、discord.pyと書いてあるので、py-cordに書き換えましょう

requirements.txt
- discord.py[voice]>=1.7.3
+ py-cord>=1.7.3

バージョンはお好みで

デフォルトのPythonのバージョンは3.8.5なので、気に入らない人は、
runtime.txt
を書き換えましょう。

各種URL

最後に

楽しかった。

少し改良して、特定の人が送信したメッセージだけ送信したり、通知メッセージにチャンネルへのリンクを埋め込んだり、他人の通知を強制的にonにするいたずらをしたり、、、
夢がありますね!

また、次の記事で会いましょう ノシ

14
3
1

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
14
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?