首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用“选择”菜单添加Rols

使用“选择”菜单添加Rols
EN

Stack Overflow用户
提问于 2022-11-20 19:29:52
回答 1查看 20关注 0票数 0

我为不和谐制作了一个多工具机器人,这是一个代码模块,安装的库是不和谐的、discord.ui的、回溯的、随机的、不和谐的、异步的--我有这个代码、whrite并使用YouTube视频进行了改编:

代码语言:javascript
复制
    @client.command()
    class select(discord.ui.Select):
        def __init__(self):
            options=[
                discord.SelectOption(label="Man"),
                discord.SelectOption(label="Woman"),
                discord.SelectOption(label="Gender-Fluyd"),
                discord.SelectOption(label="Non-Binary"),
                discord.SelectOption(label="Other"),
            ]
            super().__init__(placeholder="Gender", min_values=1, max_values=1, options=options)
        async def callback(self, interaction: discord.Interaction):
            user = interaction.user
            guild = interaction.guild
            if self.values[0] == "Man":
                role = discord.utils.get(guild.roles, name="Man")
                await user.add_roles(role)
                await interaction.response.send_message("Role Man added!", ephemeral=True)
            
            elif self.values[0] == "Woman":
                role = discord.utils.get(guild.roles, name="Woman")
                await user.add_roles(role)
                await interaction.response.send_message("Role Woman added!", ephemeral=True)

            elif self.values[0] == "Gender-Fluyd":
                role = discord.utils.get(guild.roles, name="Gender-Fluyd")
                await user.add_roles(role)
                await interaction.response.send_message("Role Gender-Fluyd added!", ephemeral=True)

            elif self.values[0] == "Non-Binary":
                role = discord.utils.get(guild.roles, name="Non-Binary")
                await user.add_roles(role)
                await interaction.response.send_message("Role Non-Binary added", ephemeral=True)

            elif self.values[0] == "Other":
                role = discord.utils.get(guild.roles, name="Other")
                await user.add_roles(role)
                await interaction.response.send_message("Other Role added!", ephemeral=True)
                
    class SelectView(discord.ui.View):
        def __init__(self, *, timeout = 30):
            super().__init__(timeout=timeout)
            self.add_item(select())

    class Role():
        def __init__(self, client):
            self.client = client
        
        @commands.command()
        async def role(self, ctx):
            await ctx.send("What is your gender ?", view = SelectView())

但是当我运行我的代码时,这个错误会出现在终端中:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Users\Distool - User\distool\env\scripts\bot.py", line 85, in <module>
    class select(discord.ui.Select):
  File "C:\Users\Distool - User\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ext\commands\core.py", line 1475, in decorator
    result = command(name=name, cls=cls, *args, **kwargs)(func)
  File "C:\Users\Distool - User\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ext\commands\core.py", line 1748, in decorator
    return cls(func, name=name, **attrs)
  File "C:\Users\Distool - User\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\discord\ext\commands\core.py", line 354, in __init__
    raise TypeError('Callback must be a coroutine.')
TypeError: Callback must be a coroutine.

有人能帮我吗??

我试图用async def替换awaitdef,但它没有功能。

EN

回答 1

Stack Overflow用户

发布于 2022-11-20 19:47:58

您将@client.command()放在“选择”菜单之上。选择菜单不能是命令..。

代码语言:javascript
复制
    @client.command()
    class select(discord.ui.Select):

那会做什么呢?

创建命令,创建“选择”菜单,并在命令中发送“选择”菜单。不过,您似乎已经完成了所有这些工作,因此仅仅删除@client.command()-line可能就足够了。

额外信息

安装的库是不和谐的,discord.ui,回溯,随机,不协调,异步

它们是导入库,而不是已安装的库。其中一半是Python的一部分& discord.uidiscord.py库的一个子模块。

我试图通过等待或def取代异步def,但它没有功能。

它说必须是一个协同线,用def代替它将使它不再是一个协同线。这不可能是解决你的问题的方法。

如果您查看一下您的错误,就会在class select(discord.ui.Select)行上看到实际的错误,这意味着错误就在上面( @client.command()装饰器将其封装在内部)。

await替换它也没有多大意义,这不是await关键字的工作方式。你不能只是随机地尝试一些事情,希望其中之一有效。你应该试着理解你在做什么,这一切都很简单和基本。

使用YouTube视频进行了改编:

该停止观看YouTube教程了。他们都教不好的代码,已经过时了(在discord.py 2.0之前),他们什么也不教你。你只需复制粘贴一个人在教程中所写的内容,你就不会知道它是如何工作的以及你在做什么。读读文档就好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74511273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档