### discord.pyでユーザー別にニックネームの数字を特定のコマンドによって操作したい
数日前からプログラミングを始めたばかりの初心者です。
discordで使用するBOTを作成しています。
今回実装したい機能として、ニックネームの後ろに「@3」を"入力"とチャットに書き込んだ際に、そのユーザーの「@3」を「@2」へと書き換え、もう一度"/入力"を書き込むと「@1」「@0」とカウントを下げていく、という機能を実装したいと思っています。
現状だとカウントを2にすることしかできず、カウントをリストではなく数字のみの変数に置き換えて反応するたびに-1を行わせると、当然ながらユーザー別に設定できていないため、下がったままの値が次に入力した人に反映されてしまいます。
なので、ユーザー別に固有の値を割り当て、"/入力"を行ったユーザーを判別できるようにすればうまく行くのだろう、というところまでで躓いてしまい、どのように書き換え始めればよいのかすらわからない状態です。
どなたかご教授いただければ幸いです。
該当のソースコード
python3
1import discord 2 3ROLE_ID = "役職ID" 4 5c = 0 6# 自分のBotのアクセストークンに置き換えてください 7TOKEN = 'アクセストークン' 8 9# 接続に必要なオブジェクトを生成 10client = discord.Client() 11# 起動時に動作する処理 12@client.event 13async def on_ready(): 14 print('ログインしました') 15 16# メッセージ受信時に動作する処理 17@client.event 18async def on_message(message): 19 20#イベント全体の共通変数 21 global c #フラグ管理用変数 22 global lunch_role #ロールID用変数 23 global member_name #ロールID一致のリスト 24 global t #操作したい数字の種類のリスト 25 26 # メッセージ送信者がBotだった場合は無視する 27 if message.author.bot: 28 return 29 30 if message.content == '/開始': 31 if c == 0: 32 c = c + 1 33 lunch_role = message.guild.get_role(ROLE_ID) #ロールIDを取得 34 member_name = list(set(lunch_role.members)) #ロールIDの一致したメンバーをリスト化 35 t = [3,2,1,0] #使用する数字のリスト 36 await message.channel.send("開始しました") 37 i = 0 #条件ループにより一人ずつ@3を付与 38 while i <= 2: 39 await member_name[i].edit(nick=str(member_name[i].name)+ "@" + str(t[0])) 40 i = i + 1 41 else:#すでに起動済みなら 42 await message.channel.send("すでに起動しています") 43 44 if message.content == '/入力': 45 if c == 1: 46 await message.author.edit(nick=str(message.author.name) + "@" + str(t[1])) 47 await message.channel.send("入力が完了しました") 48 49
試したこと
if message.content == '/開始': if c == 0: c = c + 1 lunch_role = message.guild.get_role(ROLE_ID) #ロールIDを取得 member_name = list(set(lunch_role.members)) #ロールIDの一致したメンバーをリスト化 t = 3 #使用する数字のリスト await message.channel.send("開始しました") i = 0 #条件ループにより一人ずつ@3を付与 while i <= 2: await member_name[i].edit(nick=str(member_name[i].name)+ "@" + str(t[0])) i = i + 1 else:#すでに起動済みなら await message.channel.send("すでに起動しています") if message.content == '/入力': if c == 1: await message.author.edit(nick=str(message.author.name) + "@" + str(t - 1)) await message.channel.send("入力が完了しました") t = t - 1
補足情報(FW/ツールのバージョンなど)
python3.8.3
pip 2.1.1
discord.py
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。