@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}')
结果是所有消息都是对机器人发送的第一条消息的回复。我不希望机器人回复自己。我希望它只发送一条正常的消息。我该怎么做?
交互(斜线命令)始终需要对用户进行直接响应。如果不使用
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)
。
您可以获取频道并直接向频道发送消息。但是,您必须使用类似
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")