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

为什么此bot无法成功禁用指定用户?

仲浩歌
2023-03-14

我正在尝试创建一个discord bot,它能够在调用bot时使某个用户静音,如“mute@”。该命令应向用户添加静音角色,以便用户无法发送消息。

我有以下代码:

import discord
from discord.ext import commands
from discord.utils import get

client = commands.Bot(command_prefix=',')

@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord and is ready to mute!')

@client.command(aliases=[',mute'])
async def mute(member: discord.Member):
    role = get(member.server.roles, name='Muted')
    await member.add_roles(member, role)

if member.has_role('Muted'):
    await member.channel.send(f'{member} has been muted')

当我尝试使用这个命令时,我没有看到明显的效果。为什么不添加角色?

共有1个答案

樊烨烨
2023-03-14

>

它是成员。Guild.roles,而不是. server(别担心,这不仅仅发生在你身上)

成员的正确用法。添加角色()成员。添加角色(您希望添加的角色),如文档中所述。所以,简单的解释是:如果你有成员。add_roles()您不必为函数指定成员参数。

我猜你想要的if在函数中,所以我把它移动到那里,带有一个返回和另一条消息,这样如果他已经得到了这个角色,它就不会试图添加它,并且节省了很多时间。此外;您无法从该成员获取通道,因为该成员不属于通道。

对于命令,始终必须首先传递上下文(也称为“ctx”)参数。因此,您可以将其发送回您的机器人的响应。

因此,您的修订代码是:

import discord
from discord.ext import commands
from discord.utils import get

client = commands.Bot(command_prefix=',')


@client.event
async def on_ready():
    print(f'{client.user} has connected to Discord and is ready to mute!')


@client.command(aliases=['mute'])
async def mute(ctx, member: discord.Member):
    if member.has_role('Muted'):
        return await ctx.send(f'{member} is already muted!')

    role = get(member.Guild.roles, name='Muted')
    await member.add_roles(role)
    await ctx.send(f'{member} has been muted!')
 类似资料:
  • 当我在CSS代码中添加回退字体时,我的网站不再显示我已激活的opentype功能。为什么会这样? Opentype功能可用于:字体系列:“Ogg罗马”; Opentype功能不起作用:字体系列:“Ogg罗马”,乔治亚州,衬线; 这是我的网站:https://cpdesignery.com/

  • 问题内容: 我正在阅读angularjs.org上的开发人员指南的指令部分,以刷新我的知识并获得一些见解,并且我尝试运行示例之一,但指令ng- hide不适用于自定义指令。 这里是jsfiddle:http : //jsfiddle.net/D3Nsk/: 知道为什么会这样吗? 解 似乎标记上的变量dialogIsHidden已经在指令中引用了作用域变量,而不是控制器中的变量;鉴于该指令具有其自己

  • 问题内容: 我有一个项目,我试图在回调中使用weakrefs,但我不明白我在做什么错。我创建了简化的测试,以显示我困惑的确切行为。 为什么在此测试中test_a可以正常工作,但是self.MyCallbackB的weakref在类初始化和调用test_b之间消失了?我以为只要实例(a)存在,对self.MyCallbackB的引用就应该存在,但是不存在。 问题答案: 您需要一个WeakMethod

  • 问题内容: 以下Java代码无法编译: 编译器报告: 奇怪的是,标记为“ OK”的行可以正常编译,但是标记为“ Error”的行失败。它们看起来基本相同。 问题答案: 您的lambda需要与保持一致。如果您参考JLS#15.27.3(Lambda的类型): 如果满足以下所有条件,则lambda表达式与函数类型一致: […] 如果函数类型的结果为void,则lambda主体为语句表达式(第14.8节

  • 我一直在一个多租户项目上使用SpringDataJPA,在hibernate的帮助下,我使用http头在租户之间正确路由数据(使用和),但当我切换到SpringDataREST并使用其endpoint时,所有数据都会转到公共模式为什么路由不再工作?SpringDataREST使用hibernate吗? 这是我的依赖项

  • 问题内容: SimpleDateFormat: 抛出的异常: 有任何想法吗? 编辑: 感谢您的快速解答。你们都是正确的,我只是错过了SimpleDateFormat文档中的一个关键句子-我可能应该把它称为一天。 问题答案: 从SimpleDateFormat javadocs : 月:如果图案字母的数目为3或更多,则将月份解释为文本;否则,将其解释为数字。 尝试使用“ MMM dd yyyy”之类