如何使斜线命令机器人不回复消息
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")
【讨论】:
以上是关于如何使斜线命令机器人不回复消息的主要内容,如果未能解决你的问题,请参考以下文章