当前位置: 首页 > 知识库问答 >
问题:

我的discord bot为我提供了AttributeError(“非类型”对象没有属性“角色”)

傅献
2023-03-14

我有一个用python编写的不和谐机器人。机器人应该在表情回应中给出角色并删除角色。但是今天我得到了这个错误,当我试图得到一个角色的属性错误('NoneType'对象没有属性'角色')和这个错误,当我试图删除角色的属性错误('NoneType'对象没有属性'remove_roles')。

主要文件:

from discord import utils
 
import config
 
class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged on as {0}!'.format(self.user))
 
    async def on_raw_reaction_add(self, payload):
        channel = self.get_channel(payload.channel_id) # получаем объект канала
        message = await channel.fetch_message(payload.message_id) # получаем объект сообщения
        member = utils.get(message.guild.members, id=payload.user_id) # получаем объект пользователя который поставил реакцию
            
        try:
            emoji = str(payload.emoji) # эмоджик который выбрал юзер
            role = utils.get(message.guild.roles, id=config.ROLES[emoji]) # объект выбранной роли (если есть)
            
            if payload.message_id != 669082231955783707:
                print('[Error] Wrong message id {0.display_name}'.format(member))
                return

            if (len([i for i in member.roles if i.id in config.ROLES.values()]) < config.MAX_ROLES_PER_USER):
                await member.add_roles(role)
                print('[SUCCESS] User {0.display_name} has been granted with role {1.name}'.format(member, role))
            else:
                await message.remove_reaction(payload.emoji, member)
                print('[ERROR] Too many roles for user {0.display_name}'.format(member))
        
        except KeyError as e:
            print('[ERROR] KeyError, no role found for ' + emoji)
        except Exception as e:
            print(repr(e))
 
    async def on_raw_reaction_remove(self, payload):
        channel = self.get_channel(payload.channel_id) # получаем объект канала
        message = await channel.fetch_message(payload.message_id) # получаем объект сообщения
        member = utils.get(message.guild.members, id=payload.user_id) # получаем объект пользователя который поставил реакцию
       
        try:
            emoji = str(payload.emoji) # эмоджик который выбрал юзер
            role = utils.get(message.guild.roles, id=config.ROLES[emoji]) # объект выбранной роли (если есть)
 
            await member.remove_roles(role)
            print('[SUCCESS] Role {1.name} has been remove for user {0.display_name}'.format(member, role))
 
        except KeyError as e:
            print('[ERROR] KeyError, no role found for ' + emoji)
        except Exception as e:
            print(repr(e))
 
# RUN
client = MyClient()
client.run(config.TOKEN) ```

共有1个答案

夏宏旷
2023-03-14

我会建议使用等待Guild.fetch_member(id)或Guild.get_member(id),以接收您的会员对象。从那里,您应该可以随意添加和删除角色。

您遇到了一个问题,utils。get返回成员对象。您可能还希望尝试在discord developer门户中启用服务器成员意图,并在初始化客户端对象时添加意图。

 类似资料:
  • 我一直在努力学习Python(目前的请求和美丽的soup4),我在网上找到了一个教程 问题是我一直得到下面的错误,根本无法弄清楚... 任何帮助都将不胜感激! 回溯(最近一次调用last):文件“C:\Users\BillyBob\Desktop\Web Scrap.py”,第14行,标题=a.string。strip()AttributeError:'NoneType'对象没有属性'strip'

  • 我目前正在构建一个烧瓶应用程序 我能够从下面的stackoverflow留言板上得到这么远,但是我不认为我做对了什么(可能忽略了什么?) 在Flask应用中运行Dash应用 这里的任何帮助都将不胜感激 这是我的服务器。py代码: 这是我的服务器。py:从应用程序导入服务器,应用程序服务器。运行(调试=True) 当我运行这一切时,我得到:

  • 我正在尝试删除空行。但是,当我试图计算空行数以查看它是否有效时,我有一个错误: AttributeError:“非类型”对象没有属性“isnull” 我的剧本: 输出: Traceback(最近的调用最后): 打印文件“\data\u vis.py”,第12行(data\u not\u empty.isnull().sum()) AttributeError:“非类型”对象没有属性“isnull”

  • 我正在随意地编程我的不和谐机器人,当我完成后,我通过使用我的替代帐户加入测试服务器来测试我的代码(当有人加入服务器时,它会发送欢迎消息)。但是当另一种选择加入时,我得到了这个错误: 我不知道出了什么问题。我的代码:https://pastebin.com/VntL0y5d

  • 我正在用Python为discord编写一个机器人。我希望当有人登录到服务器时,他被赋予特定的角色 当我启动并且有人进入服务器时,我得到以下错误:AttributeError:“Bot”对象没有属性“add_roles”

  • 我的代码返回这个错误"'NoneType对象没有属性'发送'" 这是我的密码 导入discord从discord导入操作系统。ext导入命令 客户=不和谐。客户() 类日志记录(commands.Cog):“为您设置日志记录” def设置(客户端):客户端。添加_cog(日志记录(客户端)) 我是在我的齿轮,而不是在主要。派克