2 回答
TA贡献1836条经验 获得超13个赞
get_context
,这需要一个消息对象。然后invoke
。请记住,使用此方法有 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)
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)
添加回答
举报