所以我写了一个这样的垃圾邮件机器人:
@bot.command()
async def start (ctx):
while True:
await ctx.send("Pls use correct channels for discussion")
await asyncio.sleep(300)
当我输入 $start 时,函数启动。如何创建像 $stop 这样的新命令来阻止垃圾邮件?
答案 0 :(得分:0)
一个简单的方法是设置一个变量,如果垃圾邮件已经开始,什么时候停止。当您运行 start 命令时,spam 变量已经为真并且会运行,因为 if 语句继续执行 while 循环。运行 stop 命令时,它只是将垃圾邮件变量设置为 false 并且不会继续运行垃圾邮件
oldPos
答案 1 :(得分:0)
Cohen 的回答只会阻止您启动它,但它不允许您在无限循环开始时停止它。您实际上应该做的是检查循环内部变量的值,以便能够阻止它。此外,在 booleans
中使用 strings
而不是硬编码“true”和“false”。
spam = True
@bot.command()
async def start (ctx):
# EDIT: Set spam to True again so you can restart the loop
global spam
spam = True
while true:
# If "spam" is set to False, stop looping
if not spam:
break
await ctx.send("Pls use correct channels for discussion")
await asyncio.sleep(300)
@bot.command()
async def stop (ctx):
global spam
spam = False
await ctx.send('spam stopped')
这会检查它是否应该在循环的每次迭代中继续运行。这样,当您将其设置为 False
时,循环就会停止。