Discord.py获取通道名称和服务器名称返回错误消息

时间:2020-06-20 23:55:01

标签: python python-3.x discord.py discord.py-rewrite

我目前正在尝试创建一个discord机器人,当有人说命令时,它会说出它们所处的服务器和通道。过去我可以这样做,但是过去我使用的是{{1 }}和In member function ‘void D::f2(C)’: ../main.cpp:34:27: error: ‘int A::x’ is protected within this context 34 | void f2(C c){cout << c.x << c.y << c.z << endl;} // error | ^ ../main.cpp:16:8: note: declared protected here 16 | int x = 0; | ^ ../main.cpp:34:34: error: ‘int A::y’ is private within this context 34 | void f2(C c){cout << c.x << c.y << c.z << endl;} // error | ^ ../main.cpp:18:8: note: declared private here 18 | int y = 1; | ^ ../main.cpp:34:41: error: ‘int A::z’ is inaccessible within this context 34 | void f2(C c){cout << c.x << c.y << c.z << endl;} // error | ^ ../main.cpp:20:8: note: declared here 20 | int z = 2; | ^。我最近开始使用on_message(message),但我仍在尝试适应它。我尝试使用if message.content.startswith('$hello')@bot.command,但收到错误消息。 message.guild.name我认为这是因为在我的旧设置中,在message.channel.mention中定义了消息,但是对于我当前的代码,它似乎不起作用。

Undefined variable 'message'

我知道这可能会使人烦恼,但是在将命令移交给我的主要机器人之前,我目前仅在测试机器人上工作。如果您有更好的主意,请告诉我。而我之所以拥有该变量,是因为我正计划将变量包括在最终产品中。

如果没有任何意义,请告诉我,我将对其进行编辑,以期使其更加清晰,并在需要时提供更多背景信息。

2 个答案:

答案 0 :(得分:2)

要获取消息对象,您需要使用传入的“上下文”(ctx)。因此它将是ctx.message.guild.namectx.message.channel.mentionDocs on Context

另一方面,Bot是Client的子类。因此,无论客户可以做什么,Bot都可以做到。您不需要客户和机器人,只需机器人。 Docs on Bot subclass

答案 1 :(得分:1)

这是应有的示例。

@bot.command()
async def whereAmI(ctx, *, messageContents):
    link = await ctx.channel.create_invite(max_age = 300)
    message = f'You are in {ctx.message.guild.name} in the {ctx.message.channel.mention} channel with an invite link of ' + link
    await ctx.message.author.send(message)

祝你有美好的一天!