前→Raspberry Pi Zero WH カメラモジュールで遊ぶ その1
次→未定
本記事では、discordと連携した監視カメラアプリを作ってみます。
1. 各種pythonライブラリの追加
1.1. discord
discordをインストールします。
# discordのインストール
$ sudo pip3 install discord
2. 監視カメラアプリの作成
2.1. discordサーバ作成
discordアプリから、「サーバーを追加」→「サーバーを作成」→「新規作成」でサーバを作成します。(サーバ名はお好きに。)
2.2. Botアカウント作成
https://discord.com/developers/applications/にアクセスします。
"New Application" → "Create"でアプリを作成します。(アプリ名はお好きに。)
Applicationsタブから、作成されたアプリを選択して、Botタブに移動します。
"Add Bot" → "Yes, do it!"でBotを追加します。(追加後、Bot名の後ろに"_bot"を付けました。)
Botのトークンは"Build-A-Bot"欄のトークンからコピーしておきます。(後で使います。)
2.3. サーバへの登録
OAuth2タブから、サーバに参加させるための認証URLを作成します。
"OAuth2 URL Generator" → "SCOPES"でbotにチェックし、作成されたURLをコピーしてアクセスします。
BOTを追加する場所を聞かれるので、先に作成したサーバを選択し、「認証」をクリックします。
「ロボットではありません」にチェックし、「認証しました」と表示されれば登録は完了です。
2.4. チャネルの作成とIDのコピー
discordアプリから、サーバを選択し、テキストチャネル横の"+"をクリックしてチャネルを作成します。
作成したテキストチャネルにポインタを合わせ、右クリックしてチャネルIDをコピーしておきます。(後で使います。)
2.5. 監視カメラアプリテスト
discordのチャネルに"surveillance"とメッセージを送ると、静止画を撮影してdiscordに送信するBotのスクリプト部分です。
YOUR_CHANNEL_IDとYOUR_BOT_TOKEN部分を、先ほどコピーしておいたチャネルID、Botトークンと入れ替えてください。
import picamera
import discord
import asyncio
import datetime
def discord_bot():
print('### Bot is running.')
client = discord.Client()
chid = YOUR_CHANNEL_ID
token = 'YOUR_BOT_TOKEN'
@client.event
async def on_ready():
channel = client.get_channel(chid)
await channel.send("I've joined!")
@client.event
async def on_message(message):
if message.content == 'surveillance':
with picamera.PiCamera() as camera:
camera.resolution = (1920,1080)
dt_now = datetime.datetime.now()
fname = '.'.join([dt_now.strftime('%Y%m%d_%H%M%S'), 'jpg'])
camera.capture(fname)
channel = client.get_channel(chid)
await channel.send(file=discord.File(fname))
client.run(token)
if __name__=='__main__':
discord_bot()
実行結果は以下のようになります。
ラズパイとdiscordで監視カメラもどき作った。 pic.twitter.com/7kqP56h0XG
— う〜し〜@ラズパイ勉強中 (@yuzzy2222) June 30, 2020
2.6. 追記
discord_bot_test.pyは、2020年6月時点で実行可能であることを確認済みです。2020年8月時点で実行すると下記エラーが出力されました。
Traceback (most recent call last):
File "discord_bot_test.py", line 34, in <module>
discord_bot()
#
# 中略
#
TypeError: __new__() got an unexpected keyword argument 'deny_new'
どうやらdiscord.pyのバージョンが古くなったことが原因のようだったので、アップデートしたら実行できました。
# discord.pyのアップデート(1.3.3 → 1.4.1)
$ sudo pip3 install -U discord.py