【问题标题】:Romove/add discord roles to a person为某人删除/添加不和谐角色
【发布时间】:2022-10-24 03:30:27
【问题描述】:

我想创建一个提升 cmd,在输入时将成员提升到下一个等级,但我无法删除/添加他的角色

import discord
import os
from discord.utils import get

bot = discord.Bot(intents=discord.Intents.all())

admin = 990420666568278086

#roles
prospect = 869470046953537546
member = 869470100061814784
patched = 1003733917704134737

@bot.event
async def on_ready():
    print(f"{bot.user} is ready and online!")

@bot.slash_command(name="promote", description = "Promote people to the next rank")
async def promote(ctx, user: discord.Member):
    if ctx.author.get_role(admin):
        if user.get_role(prospect):
            await user.remove_roles(prospect)
            await user.add_roles(member, patched)

bot.run("DISCORD-TOKEN")

【问题讨论】:

    标签: python discord.py command bots pycord


    【解决方案1】:

    请参考discord.Member.add_rolesdiscord.Member.remove_roles。他们都以discord.Role 作为参数。因此,您的代码应类似于user.remove_roles(guild.get_role(prospect)),其中guild.get_role(prospect) 返回discord.Role

    这就是你的代码应该让它工作的样子。快乐编码!

    async def promote(ctx, user: discord.Member):
        guild=ctx.guild
        if ctx.author.get_role(admin):
            if user.get_role(prospect):
                await user.remove_roles(guild.get_role(prospect))
                await user.add_roles(guild.get_role(member), guild.get_role(patched))
    

    【讨论】:

    • 这里的第一部分是错误的。 Member.get_role 的文档明确指出,如果用户没有具有该 ID 的角色,它将返回 None。不仅 OP 的 if 语句足够好(没有一个是假的),你的甚至都行不通。如果用户没有角色,则返回 None,None.id 将引发错误。
    猜你喜欢
    • 2018-08-11
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2021-05-31
    相关资源
    最近更新 更多