为了账号安全,请及时绑定邮箱和手机立即绑定

事件可以执行命令吗?如果是这样,我怎样才能让我的人这样做呢?

事件可以执行命令吗?如果是这样,我怎样才能让我的人这样做呢?

慕桂英3389331 2023-08-15 16:33:17
因此,我试图创建一个事件,一旦用户输入特定单词(不是命令,实际上是单词/字符串),该事件将触发现有命令。是的,您可能想知道“为什么不让用户自己键入命令?” 好吧,为什么情况并非如此,这很难解释。看一下这个:仅当该人输入“无”(字面意思是“无”一词)时,我的活动才会起作用。最终,该人不会期望机器人实际上将此作为命令,因此他/她不会将其作为命令键入(带有前缀等)这是我的代码:@client.command()async def menu(ctx)#here, well, goes what I want the command to do but it's not the issue@client.eventasync def on_message(message):    if message.content.startswith("nothing"):        #here idk how to execute the command up there. That's my question我希望我能清楚地说明我的问题。不要担心命令执行什么,或者为什么事件的消息是“无”。我真的很想知道如何使这项工作成功。有朋友建议我调用该命令,但我真的不知道该怎么做,每次尝试都行不通。其他人建议调用该函数,但我也尝试了,但行不通。我不知道我输入的内容是否正确,或者它是否根本不起作用。我希望有人在这里帮助我。提前致谢。
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

get_context,这需要一个消息对象。然后invoke。请记住,使用此方法有 3 个缺点。

  1. 转换器(类型提示)不会被触发。您需要将正确的类型传递给参数。

  2. 检查将被绕过。您可以对非所有者调用仅限所有者的命令,它仍然有效。

  3. 如果ctx.invoke在命令外部调用(例如 eval),则错误处理程序将不会触发。

@client.command()

async def menu(ctx):

    await ctx.send("Hello")



@client.event

async def on_message(message):

    if message.content.startswith("nothing"):

        ctx = await client.get_context(message)

        await ctx.invoke(menu)

    await client.process_commands(message)


查看完整回答
反对 回复 2023-08-15
?
桃花长相依

TA贡献1860条经验 获得超8个赞

如果您的客户端是一个Bot实例,您可以使用Bot.get_context()创建您自己的上下文并从那里调用命令:


import discord

from discord.ext import commands


bot = commands.Bot(command_prefix='!')


@bot.command()

async def menu(ctx):

    await ctx.send('bar')


@bot.event

async def on_message(message):

    if message.content.startswith('foo'):

        ctx = await bot.get_context(message, cls=commands.Context)

        ctx.command = bot.get_command('menu')

        await bot.invoke(ctx)


    await bot.process_commands(message)


查看完整回答
反对 回复 2023-08-15
  • 2 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信