@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)
结果是: 它不断回复机器人发送的第一条消息。我不想让机器人回复。我希望它只发送一条普通消息。怎么样?
答案 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()
属性调用延迟交互(hidden
或 ctx.send()
)。
如果你想隐藏你的响应 ctx.send('ok', hidden=True)
,你需要在相同的状态下延迟 ctx.defer(hidden=True)
。