実現したいこと
uiボタンを押した人にロールをあたえる
前提
初心者です
discord.pyでぼたんをつくり、それに反応してメッセージをおくることまではできました。
しかしロールの付与をしようとするとrole.idのおぶじぇくとがない?ようで、roleでidは定義しているはずなんですが、できてないですか?
それともadd_rolesのつかいかたがちがいますか?
へんし
発生している問題・エラーメッセージ
Traceback (most recent call last): File "C:\Users\KUMAN\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\ui\view.py", line 425, in _scheduled_task await item.callback(interaction) File "c:\Users\KUMAN\OneDrive\デスクトップ\Discord Bots\Coturnix\Coturnix.py", line 111, in getnormalrole await user.add_roles(user.guild.get_role(role)) File "C:\Users\KUMAN\AppData\Local\Programs\Python\Python311\Lib\site-packages\discord\member.py", line 1018, in add_roles await req(guild_id, user_id, role.id, reason=reason) ^^^^^^^ AttributeError: 'NoneType' object has no attribute 'id'
該当のソースコード
Python
1import requests 2import json 3import inspect 4import sys 5import discord 6import datetime 7import asyncio 8 9from colorama import Fore, Style 10from discord.ext import commands 11from discord import app_commands 12 13bot = commands.Bot(command_prefix="/", intents=intents) 14intents = discord.Intents.default() 15intents.members = True 16intents.message_content = True 17client = Coturnix(intents=Intents.none()) 18 19class Coturnix(Client): 20 def __init__(self, *, intents: Intents): 21 super().__init__(intents=intents) 22 self.tree = app_commands.CommandTree(self) 23 self.role = 1076411397816201246 24 25 async def setup_hook(self) -> None: 26 """ This is called when the bot boots, to setup the global commands """ 27 await self.tree.sync() 28 29class button(discord.ui.View): 30 def __init__(self): 31 super().__init__(timeout = None) 32 33 @discord.ui.button(label = "市民になる", style = discord.ButtonStyle.green, custom_id = "role") 34 async def getnormalrole(self, interaction: discord.Integration, button: discord.ui.Button): 35 role = 1076411397816201246 36 user = interaction.user 37 38 print(f"> {Style.BRIGHT}{interaction.user}{Style.RESET_ALL} pushed the button.") 39 40 await user.add_roles(user.guild.get_role(role)) #問題発生個所 41 await interaction.response.send_message( 42 "ロールを付与しました", ephemeral=True) 43 44@client.event 45async def on_ready(): 46 """ 47 bot起動== 48 """ 49 bot.add_view(button()) 50 51@client.tree.command() 52async def ba(interaction: Interaction): 53 """ ロールボタンを出します """ 54 55 56 print(f"> {Style.BRIGHT}{interaction.user}{Style.RESET_ALL} appeared the button.") 57 58 await interaction.response.send_message("ボタンを押してロールをもらってください", view = button())
補足情報
discord.py 2.1.1
追記:use.guild.get_roleでろロールが取れていなかったです
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/02/23 00:57
2023/02/23 13:48
2023/02/23 13:56
2023/02/23 14:07
2023/02/23 16:24
2023/02/24 12:02
2023/02/26 09:39
2023/03/01 07:49