gpt4 book ai didi

python - Discord.py 的审核日志问题

转载 作者:行者123 更新时间:2023-12-04 08:03:13 28 4
gpt4 key购买 nike

我正在为我的经济创建审计日志。此时,只要有人使用经济命令,我就会让它向 channel 发送消息。

async def audit_log(ctx, bot, action, stats=None, new_bank=None, new_money=None):
audit_channel = bot.get_channel(813610020943953920)
old_stats = stats
new_stats = stats
if new_bank is not None:
new_stats['bank'] = new_bank
if new_money is not None:
new_stats['money'] = new_money

await audit_channel.send(f'{ctx.author} did {action},\nprev-bank: {old_stats["bank"]}, prev-cash: {old_stats["money"]}\nnew-bank: {new_stats["bank"]}, new-cash: {new_stats["money"]}')
Stats 是一个字典,分配给数据库中某人的文档。其中两个值是货币和银行。并非每个命令都会更新银行和货币,如果命令更新其中任何一个,它就会通过它。现在我已经描述了代码,我将描述问题。当我收到不和谐的消息时,它既有新的,也有旧的,等于新的。当我做了一些打印时,我最终发现它改变了 if 语句中的 old_stats 。它改变了货币中的货币和银行中的银行。
我花了大约 5 个小时试图弄清楚这一点,任何帮助将不胜感激。

最佳答案

这里的错误是您同时分配了 old_statsnew_stats到统计数据,并且由于字典是可变的,python 使得 old_statsnew_stats持有相同的字典,所以如果你更新一个,你就会更新“两者”。要解决此问题,您可以使用复制模块复制功能:copy.copy(stats) .
这就是您的代码看起来固定的方式:

# imports
import copy

# ... other code
async def audit_log(ctx, bot, action, stats=None, new_bank=None, new_money=None):
audit_channel = bot.get_channel(813610020943953920)
old_stats = copy.copy(stats)
new_stats = copy.copy(stats)
if new_bank is not None:
new_stats['bank'] = new_bank
if new_money is not None:
new_stats['money'] = new_money

await audit_channel.send(f'{ctx.author} did {action},\nprev-bank: {old_stats["bank"]}, prev-cash: {old_stats["money"]}\nnew-bank: {new_stats["bank"]}, new-cash: {new_stats["money"]}')
解释
  • 进口副本
  • 分配 new_statsstats 的副本并分配 old_statsstats 的副本.
  • 关于python - Discord.py 的审核日志问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66345179/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com