在 Discord.py 中添加/删除角色使用控制台输入重写

Posted

技术标签:

【中文标题】在 Discord.py 中添加/删除角色使用控制台输入重写【英文标题】:Add/Remove Roles in Discord.py Rewrite using console input 【发布时间】:2020-07-26 15:02:59 【问题描述】:

我正在参与一个大型项目,由于在 discord.py 中是菜鸟,我在添加和删除角色方面陷入了死胡同。

我有设置控制台输入,它要求输入用户 ID、要添加/删除的角色,然后它应该执行一个命令。控制台只是一个批处理文件或pycharm/atom等的运行模式...... 该功能不是在 Discord 中通过命令使用的,而是仅通过输入使用的。 抱歉,如果这是一个双重帖子,但我从 2 天以来一直在寻找这个,每个结果都给了我一个错误代码。该函数已被注释,应该让您知道究竟是什么问题:

async def rolemanager():
   await client.wait_until_ready()
   function = input("Add/Remove> ")
        if function == 'add':
            person = input("User ID> ") # Uses non-changeable User ID
            personname = client.get_user(int(person)) # Converts to Name#0000
            roleadd = input("Role-Name> ") # Asks for exact role name to add
            confi = input("Are you sure? y/n > ") # Asks for confirm input
            if confi == "y": # If its confirmed:
                await client.add_roles(name=roleadd) # Error: AttributeError: 'Bot' object has no attribute 'add_roles'
                print(f"Role roleadd added to user personname") # Prints if successful, or crashes the program
            else:
                print("Role-Add canceled.") # If canceled, shows this
                pass # Passes to restart the loop
        elif function == 'remove': # Same stuff here, but remove . .
            person = input("User ID> ")
            personname = client.get_user(int(person))
            roleremove = input("Role-Name> ")
            confi = input("Are you sure? y/n > ")
            if confi == "y":
                await client.remove_roles(name=roleremove)
                print(f"Role roleremove removed from user personname")
            else:
                print("Role-Remove canceled.")
                pass
        else:
            print(f"Wrong input, use add/remove in lower-case)

完全错误: 从未检索到任务异常 未来:exception=AttributeError("'Bot' 对象没有属性 'add_roles'")> 回溯(最近一次通话最后): 主处理程序中的文件“bot2.py”,第 42 行 等待 client.add_roles(name=roleadd) AttributeError: 'Bot' 对象没有属性 'add_roles'

提前致谢!

【问题讨论】:

【参考方案1】:

您根本不应该使用input,因为它是一个阻塞操作。相反,您应该从用户那里获取所有这些信息,作为命令调用的一部分。

您遇到的问题是add_rolesMember 的方法,而不是Client

from discord.ext import commands
from discord import Member, Role

bot = commands.Bot("!")

@bot.command()
async def add(ctx, member: Member, role: Role):
    await member.add_roles(role)

@bot.command()
async def remove(ctx, member: Member, role: Role):
    await member.remove_roles(role)

bot.run("token")

【讨论】:

以上是关于在 Discord.py 中添加/删除角色使用控制台输入重写的主要内容,如果未能解决你的问题,请参考以下文章

通过 ID 添加角色 discord.py

Discord.py如何删除服务器中的所有角色

Discord.py 将角色添加到成员

如何将 discord.py remove_roles 用于多个角色? (作为参数的对象列表)

如何使用 discord.py 机器人,在他们加入 VC 时赋予用户角色并在他们离开时将其删除

Discord Py - 如何使用文本命令向公会的所有成员添加多个角色