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

时间:2021-06-25 04:33:39

标签: discord command discord.py slash

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

交互(斜线命令)将始终需要对用户的直接响应。如果不使用 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() 属性调用延迟交互(hiddenctx.send())。

如果你想隐藏你的响应 ctx.send('ok', hidden=True),你需要在相同的状态下延迟 ctx.defer(hidden=True)