如何使斜线命令机器人不回复消息

Posted

技术标签:

【中文标题】如何使斜线命令机器人不回复消息【英文标题】:How to make a slash command bot do not reply messages 【发布时间】:2021-09-08 12:32:46 【问题描述】:
@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 bool(times):
    Times = 15
  else:
    Times = times
  
  for i in range(int(Times)):
    await ctx.send(text)
    await asyncio.sleep(.7)

结果是: 它不断回复机器人发送的第一条消息。我不希望机器人回复。我希望它只发送一条正常的消息。怎么样?

【问题讨论】:

【参考方案1】:

交互(斜杠命令)总是需要对用户的直接响应。如果不使用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.send() 相同的 hidden 属性调用延迟交互(ctx.defer(hidden=True)ctx.defer())。

如果你想隐藏你的回复ctx.send('ok', hidden=True),你需要推迟到相同的状态ctx.defer(hidden=True)

【讨论】:

感谢您对我的详细回答! 如果您找到了解决问题的有用答案,您可以将其标记为已接受【参考方案2】:

您可以获取频道并直接向频道发送消息。但是,您必须使用 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"):
  channel = ctx.channel

  if bool(times):
    Times = 15
  else:
    Times = times
  
  for i in range(int(Times)):
    if channel != None:
        await channel.send(text)
    await asyncio.sleep(.7)
  await ctx.send("Done")

【讨论】:

以上是关于如何使斜线命令机器人不回复消息的主要内容,如果未能解决你的问题,请参考以下文章

Discord Bot 无需命令即可发送消息

让 Telegram 机器人回复由命令回复的消息

如何使不和谐机器人将消息发送到不和谐 Node js 的特定频道机器人

如何让我的不和谐机器人回复“跟进”消息

Discord.js V13 使用斜线命令时添加角色

Discord bot没有回复消息[重复]