如何响应斜杠命令执行而不让响应显示为回复?

问题描述 投票:0回答:2
@slash.slash(name='test', ...)
async def test(ctx, txt: str):
    await ctx.send(f'1st: {txt}')
    await ctx.send(f'2nd: {txt}')
    await ctx.send(f'3nd: {txt}')

结果是所有消息都是对机器人发送的第一条消息的回复。我不希望机器人回复自己。我希望它只发送一条正常的消息。我该怎么做?

discord discord.py command
2个回答
6
投票

交互(斜线命令)始终需要对用户进行直接响应。如果不使用

ctx.send(str)
,交互将会失败。

您有 2 个选项可以让它看起来像是您没有响应斜杠命令

隐藏回复

您可以发布隐藏答案

ctx.send('ok', hidden=True)
,然后将有意向的消息发送到频道
ctx.channel.send(str)

这将使初始的“ok”仅对调用用户可见,服务器的所有其他成员都不会看到该请求,也不会看到第一个响应。

删除回复

您的第二个选择是在很短的时间后自动删除答案(

ctx.send('ok', delete_after=1)
),然后在频道中发送正常消息
ctx.channel.send(str)

推迟回应

如果您在调用后 3 秒内无法响应,您可能需要

defer
您的响应。推迟交互(
ctx.defer(hidden=True)
ctx.defer()
)必须使用与您的未来
hidden
相同的
ctx.send()
属性来调用。

如果您想隐藏您的回复

ctx.send('ok', hidden=True)
,您需要在相同的状态下推迟
ctx.defer(hidden=True)


1
投票

您可以获取频道并直接向频道发送消息。但是,您必须使用类似

ctx.defer()
的内容,这样交互才不会显示为失败。

@slash.slash(name='spam', description='I will spam your content for times!', options=optionsspam, guild_ids=[847769978308526090])
async def spam(ctx, text: str, times: int=15):
  if ctx.channel:
    for i in range(times):  
        await ctx.send(text)
        await asyncio.sleep(.7)
  await ctx.send("Done")

© www.soinside.com 2019 - 2024. All rights reserved.