# インストールした discord.py を読み込む
import discord
import random
# 設定全般まとめる
BOT_NAME = "cats0830v"
SERVER_NAME = "cattyのサーバー(botのテスト用)"
RAISE_WORD = "/random_role"
RAISE_WORD_CONFIRM = "/who_is"
MSG_WORD = "狂人"
WHO_IS_TARGET = ""
# 自分のBotのアクセストークンに置き換えてください
TOKEN = 'xxxxx'
#誰が狂人かをローカルにメモする
def mkmemo(name):
path = 'memo.txt'
f = open(path,'w')
f.write(name)
f.close()
return
def readmemo():
path = 'memo.txt'
with open(path) as f:
s = f.read()
return s
#ボイスチャンネルに入っているメンバーを取得する関数
def getVoiceUsers(guild):
chs = guild.channels
voice_members = []
for ch in chs:
if ch.type == discord.ChannelType.voice:
for mem in ch.members:
voice_members.append(mem)
return voice_members
#オンラインのメンバーを取得する関数
def getOnlineUsers(guild):
online_members = []
for member in guild.members:
if member.status == discord.Status.online and member:
if member.name != BOT_NAME:#ほんとはBotじゃないという条件にしたい
online_members.append(member)
#print(member.name, " is online")
return online_members
# 接続に必要なオブジェクトを生成
intents = discord.Intents.default()
intents = discord.Intents.all()
client = discord.Client(intents=intents)
# 起動時に動作する処理
@client.event
async def on_ready():
# 起動したらターミナルにログイン通知が表示される
print('ログインしました')
# メッセージ受信時に動作する処理
@client.event
async def on_message(message):
# メッセージ送信者がBotだった場合は無視する
if message.author.bot:
return
# RAISE_WORDを発言したらがDMが返る処理
if message.content == RAISE_WORD:
guild = discord.utils.get(client.guilds, name=SERVER_NAME)
online_members = getVoiceUsers(guild)
# 誰もいない場合は抜ける
if len(online_members) == 0:
return
# ランダムな数字を作成
rand_idx = random.randrange(len(online_members))
target_name = online_members[rand_idx].name
mkmemo(target_name)
for i in range(len(online_members)):
if i != rand_idx:
dm_channel = await online_members[i].create_dm()
await dm_channel.send("not "+MSG_WORD)
else:
dm_channel = await online_members[i].create_dm()
await dm_channel.send(MSG_WORD)
print("完了")
if message.content == RAISE_WORD_CONFIRM:
await message.channel.send(readmemo() + " is " + MSG_WORD)
# Botの起動とDiscordサーバーへの接続
client.run(TOKEN)