Discord.py on_message for 循环不起作用
Posted
技术标签:
【中文标题】Discord.py on_message for 循环不起作用【英文标题】:Discord.py on_message for loop not working 【发布时间】:2018-06-10 19:59:38 【问题描述】:这是我想要做的:
@bot.event
async def on_message(message):
ans1GuessList = []
ans2GuessList = []
ans3GuessList = []
if message.content.startswith("!1"):
guessName1 = message.author.name
ans1GuessList.append(guessName1)
if message.content.startswith("!2"):
guessName2 = message.author.name
ans2GuessList.append(guessName2)
if message.content.startswith("!3"):
guessName3 = message.author.name
ans3GuessList.append(guessName3)
if message.content.startswith("!ans1correct"):
if "admin" in [y.name.lower() for y in message.author.roles]:
rewardListRaw = open("bank.txt", "rt")
rewardList = rewardListRaw.read()
rewardListRaw.close()
print("Hello")
for name in ans1GuessList:
print("Goodbye")
for item in rewardList.split("\n"):
if name in item:
itemList = item.split(":")
rewardLine = itemList[1]
balance = re.search(r'(\d+)', rewardLine)
print(balance)
newBalance = balance + 50
finalLine = string.replace(rewardLine, balance, newBalance)
print(finalLine)
l = fileinput.nput('bank.txt', inplace=1)
for z in l:
newLine = z.replace(rewardLine, finalLine)
l.close()
else:
await bot.send_message(message.channel, "You do not have permission to use that command!")
我知道这有点乱,但基本上人们会使用 !1 !2 或 !3 提交他们的答案,然后如果答案正确,管理员将使用命令 !ans1correct。然后它将遍历列表中的每个名称,并遍历一个名为“bank.txt”的文本文件。然后它扫描每一行(一行的示例格式是“Joe Smith:100 个硬币”(不带引号)),当它到达该行时,它用“:”分割它(如果任何用户名包含数字),然后是正则表达式将提取作为他们余额的数字。然后它将 50 个硬币的奖励添加到他们的余额中,然后将其放回队列中。然后它将使用 fileinput 将旧行替换为包含其新余额的新行。这 打印(你好) 和 打印(再见) 用于调试。启动时,不会引发任何错误。当我使用任一命令(!1 或!ans1correct)时,也不会引发错误。它打印 Hello 但不打印 Goodbye,所以我知道代码在 for 循环处停止。有谁知道我的代码有什么问题。我知道这是一团糟,但我发现它在哪里搞砸了。它成功地将用户名附加到列表中,但由于某种原因,当在 !ans1correct 中访问列表下方时,它显示为空白。当我执行 print(ans1GuessList) 并且它只打印 [] 时证明了这一点。当我在 !1 命令期间打印它时,它显示它已成功修改。我对为什么列表在 !ans1correct 之前清空自己感到很困惑。任何帮助表示赞赏,谢谢!
编辑:我认为该列表仅附加在该命令内部,不会影响任何其他命令。无论如何要附加列表并让它保持在该命令之外?谢谢!
【问题讨论】:
【参考方案1】:问题在于,每当机器人接收到消息时,列表都会重新定义而没有值。要解决此问题,您只需将列表移出 on_message,并在需要时使用命令重置它们
希望对你有帮助
【讨论】:
以上是关于Discord.py on_message for 循环不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 discord.py 机器人不响应 on_message 事件?
Discord.py:有没有办法使用 on_message() 函数获取命令的参数?
Discord.py on_message() 但仅用于私人消息
discord.py bot:on_message 检测机器人等待发送()消息