提问者:小点点

discord.py-有没有办法从on_message活动中得到CTX?


我想重新编码我的音乐机器人(目前使用命令),以便创建一个通道。如果你在该通道中编写任何消息,机器人应该从消息中播放歌曲。为此,我需要访问voice_state之类的东西,但on_message似乎没有提供,而ctx提供。现在我正在寻找任何方法将消息转换为命令,以任何其他方式获取ctx或以其他方式访问所有语音内容。

提前感谢。


共1个答案

匿名用户

有,你可以使用机器人。get_context为此目的。这是一个协程。

例子:

@bot.listen()
async def on_message(message: discord.Message):
    ctx = await bot.get_context(message)
    command = bot.get_command('command name')
    await ctx.invoke(command, arg1, arg2, keywordarg1="something", keywordarg2="I like python")

命令中的位置参数后跟关键字参数。您不需要提供ctx参数,因为ctx. invoke在命令调用期间默认提供该参数

实际上,没有。您可以使用message. gueld.voice_client访问voice_clientctx.voice_client是一个快捷方式。此外,为了访问作者的语音状态message.author语音,您在上下文中做的大多数事情都是Guild/成员对象方法的快捷方式。不过也有一些例外。