前提・実現したいこと
buttonを使用して数字をカウントアップしていき、最後のEnterを押して足し算する。
※Enterを管理者権限を持っている人だけが押せるようにしたい。
該当のソースコード
python
1import asyncio 2import discord 3from discord.ext import tasks,commands 4from discord_components import DiscordComponents, Button, ButtonStyle, InteractionType 5import datetime 6 7client = commands.Bot(command_prefix = '_') 8 9ddb = DiscordComponents(client) 10 11tasu=[[ 12 Button(style=ButtonStyle.red, label="1"), 13 Button(style=ButtonStyle.red,label="2"), 14 Button(style=ButtonStyle.red,label="3"), 15 Button(style=ButtonStyle.gray, label="Enter"), 16 Button(style=ButtonStyle.gray, label="Cancel") 17 ]] 18 19@client.command() 20@commands.has_permissions(administrator=True) 21async def pura(ctx): 22 Voting1 = Voting2 = Voting3 = pura = 0 23 now = datetime.datetime.now() 24 delta = datetime.datetime.now()+ datetime.timedelta(minutes=5) 25 embed = discord.Embed(title="",description='足し算\n' + str(Voting1) + "+" + str(Voting2) + "+" + str(Voting3) + "=" + str(pura),color=0xff0000,timestamp=now) 26 m = await ctx.send(embed=embed,components=tasu, type=7) 27 while m.created_at < delta: 28 res = await client.wait_for("button_click") 29 role = ctx.guild.get_role("管理者のrole_id") 30 #ここで管理者権限を持っている人だけEnterを押せるようにしたい。 31 def check(res): 32 return ctx.author == res.user and res.channel == ctx.channel and res.role == role 33 34 ent = await client.wait_for("button_click",check=check) 35 pura = VotingB + VotingK + VotingW 36 print(str(role) + 'aaaaaaa') 37 if res.component.label == "1": 38 Voting1 += 1 39 if res.component.label == "2": 40 Voting2 += 1 41 if res.component.label == "3": 42 Voting3 += 1 43 if ent.component.label == "Enter": 44 pura = Voting1 + Voting2 + Voting3 45 else: 46 await res.respond(content="あなたは権限を持っていません。") 47 if res.component.label == "Cancel": 48 await res.respond(content="終了します。") 49 break 50 embed = discord.Embed(title="",description='足し算\n\n結果:' + str(pura),color=0xff0000,timestamp=now) 51 await res.respond(embed=embed,components=tasu,type=7)
試したこと
wait_forがあると聞いて試してみたが、動かなかった。
> 動かなかった。
ではわかりませんので、どのように動かなかったか具体的に示して下さい。
また、提示のコードはどの段階のものでしょうか?
・「管理者権限を持っている人だけが押せる」以外の機能は正常に動くもの
・上記コードに「管理者権限を持っている人だけが押せる」機能を足したため動かなくなったもの(この場合、どの部分を変更したか明示していただいた方がわかりやすいです)。
すみません。説明が下手で....
後者のほうですね。「管理者権限を持っている人だけがおせる」を追加しようとしたら、
「インタラクションに失敗しました」と出るようになりました。
あとは、Contextにroleはないよって言われていますね。
回答1件
あなたの回答
tips
プレビュー