🐈
Discordのボイスチャンネルから強制切断してくれるBotをつくる
こんにちは。スイミンタロウです。
概要
Discordのサーバーのボイスチャンネルにいるユーザーを、強制的に切断するコードの紹介。
環境
Python3.8でdiscord.pyを使用しています。
Botの権限は最高権限の「Administer」を設定。
人追い出す処理
APIリファレンスを見ると、以下のような記載があります。
channel (Optional[VoiceChannel]) -- The new voice channel to move the member to. Pass None to kick them from voice.
引数にNoneを入れることで、ボイスチャンネルから切断できるようです。
async def move_to_none():
# 接続に利用するオブジェクト
client = discord.Client()
# 該当サーバーの特定のチャンネルIDを入れてください。
talk_channel_id = ****
channel = client.get_channel(talk_channel_id)
# チャンネル経由でサーバー内のボイスチャンネル全体を走査
for ch in channel.guild.voice_channels:
for member in ch.members:
# move_to(None)で特定のメンバーを切断する
await member.move_to(None)
ソースコード全文
import discord # インストールした discord.py
import datetime # 滞在時間計測用
import asyncio
token = '************************'
client = discord.Client() # 接続に使用するオブジェクト
# 強制退出処理
async def move_to_none():
# 接続に利用するオブジェクト
client = discord.Client()
# 該当サーバーの特定のチャンネルIDを入れてください。
talk_channel_id = ****
channel = client.get_channel(talk_channel_id)
# チャンネル経由でサーバー内のボイスチャンネル全体を走査
for ch in channel.guild.voice_channels:
for member in ch.members:
# move_to(None)で特定のメンバーを切断する
await member.move_to(None)
# 起動時に通知してくれる処理
@client.event
async def on_ready():
last_clocked_time = datetime.datetime.now()
while True:
#ここから30秒間隔の処理
if last_clocked_time.hour is not datetime.datetime.now().hour:
# 2時に強制退出
if datetime.datetime.now().hour == 2:
print("強制退出を実行します")
await move_to_none()
last_clocked_time = datetime.datetime.now() #時刻更新処理
await asyncio.sleep(30)
# botの接続と起動
# (tokenにはbotアカウントのアクセストークンを入れてください)
client.run(token)
あとがき
あまりに居心地のいいサーバーのボイスチャンネルにいると、
平日でも時間を忘れてしまう…
そんなあなたにぴったりのBotです。
私たちのサーバーでは2時に強制切断されるように設定して利用しています。
実装してから、みんな早く寝るようになったのかというと…
そんなことはありません。
追い出されるのを必ず待っていて、
逆に2時まで起きてしまってる現象が…
つたない記事ですが、どなたかの力になれれば幸いです。
おまけ discord.jsだったら
以下のように書けるようです。discord.jsで動くBotも作ってみたいですね。
client.on("message", message => {
const member = message.member;
member.voice.setChannel(null); // これで切断
});
Discussion