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 检测机器人等待发送()消息

如何在 discord.py 中将 on_message 与 sqlite3 集成?

在 discord.py 中,on_message 不会为一个公会触发