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

How to make a slash command bot do not reply messages

@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)

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

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

交互(斜杠命令)总是需要对用户的直接响应。如果不使用ctx.send(str),交互会失败

你有 2 个选项可以让它看起来像你没有响应斜线命令

隐藏回复

您可以post隐藏答案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)