体验(XP)不适用于所有用户 JSON Discord.PY

2023-12-26

我试图为在大约有 50-60 人打字的房间中输入的消息评分。它会第一次将用户添加到 JSON 文件,但不会为他们键入的消息添加任何更多点。我再次测试,只有一名用户因输入的消息而获得积分,其余的保持不变。这是代码:

 @client.event
async def on_message(message):

    if message.content.lower().startswith('!points'):
        await client.send_message(message.channel, "You have {} points!".format(get_points(message.author.id)))

    user_add_points(message.author.id,1)

def user_add_points(user_id: int, points: int):
    if os.path.isfile("users.json"):
        try: 
            with open('users.json', 'r') as fp:
                users = json.load(fp)
            users[user_id]['points'] += points
            with open('users.json', 'w') as fp:
                json.dump(users, fp, sort_keys=True, indent=4)
        except KeyError:
            with open('users.json', 'r') as fp:
                users = json.load(fp)
            users[user_id] = {}
            users[user_id]['points'] = points
            with open('users.json', 'w') as fp:
                json.dump(users, fp, sort_keys=True, indent = 4)
    else:
        users = {user_id:{}}
        users[user_id]['points'] = points
        with open('users.json', 'w') as fp:
            json.dump(users, fp, sort_keys=True, indent=4)

def get_points(user_id: int):
    if os.path.isfile('users.json'):
        with open('users.json', 'r') as fp:
            users = json.load(fp)
        return users[user_id]['points']
    else:
        return 0

我们应该只需要读取该文件一次,然后在需要时保存对文件的修改。我没有注意到任何会导致所描述的行为的逻辑错误,因此这可能是关于允许您的机器人查看哪些消息的权限问题。为了便于调试,我简化了您的代码并添加了一些打印来跟踪正在发生的情况。我还添加了一个守卫on_message阻止机器人对其自身做出响应。

import json
import discord

client = discord.Client()

try:
    with open("users.json") as fp:
        users = json.load(fp)
except Exception:
    users = {}

def save_users():
    with open("users.json", "w+") as fp:
        json.dump(users, fp, sort_keys=True, indent=4)

def add_points(user: discord.User, points: int):
    id = user.id
    if id not in users:
        users[id] = {}
    users[id]["points"] = users[id].get("points", 0) + points
    print("{} now has {} points".format(user.name, users[id]["points"]))
    save_users()

def get_points(user: discord.User):
    id = user.id
    if id in users:
        return users[id].get("points", 0)
    return 0

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    print("{} sent a message".format(message.author.name))
    if message.content.lower().startswith("!points"):
        msg = "You have {} points!".format(get_points(message.author))
        await client.send_message(message.channel, msg)
    add_points(message.author, 1)

client.run("token")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

体验(XP)不适用于所有用户 JSON Discord.PY 的相关文章

随机推荐

  • 多个邮件附件 - PhoneGap

    您好 我正在phonegap中做一个应用程序 它需要有多个附件 但我无法有多个附件 任何解决方案 我的代码如下
  • 使用单个函数调用写入多个文件描述符

    我有一个群聊服务器的用例 其中服务器必须向所有客户端的套接字写入一个公共字符串 然后 我通过循环遍历文件描述符列表并将字符串写入每个文件描述符来解决这个问题 现在我正在考虑寻找更好的解决方案 是否可以通过使用 Linux 中的 tee 系统
  • 在 Swift 3.0 中转换 base64String 中的音频文件

    我正在使用以下代码录制音频文件 let audioFilename getDocumentsDirectory appendingPathComponent tt mp4 let settings AVFormatIDKey Int kAu
  • 修改多维 numpy 数组中的对角线

    我有一个形状为 7 3 7 3 的多维 numpy 数组 我想修改轴 0 和轴 2 重合的广义对角线 这个广义对角线将被定义为数组中第 0 个和第 2 个索引重合的元素 并且形状为 3 3 7 Doing arr diagonal axis
  • 在 Vbscript 中终止进程

    我试图终止名为 AetherBS exe 的进程的所有实例 但以下 VBscript 不起作用 我不太确定在哪里 为什么会失败 那么我怎样才能杀死 AetherBS exe 的所有进程呢 CloseAPP AetherBS exe Func
  • Boost.Spirit 将表达式转换为 AST

    使用 Boost Spirit 将某些表达式转换为 AST 的正确方法是什么 我尝试构建它 但我认为它很混乱 可以简化很多 https godbolt org z VXHXLY https godbolt org z VXHXLY incl
  • 调试非托管 Neo4j 扩展

    我刚刚开始使用 Graphaware 框架为 Neo4j 服务器开发一个非托管扩展 到目前为止一切都很好 甚至单元测试也有效 但我想实际调试从 Intellij 内部运行 Neo4j 服务器的扩展 有人能给我一个关于如何做到这一点的提示吗
  • Spring Batch 多数据源和 ChainedTransactionManager 风险

    我正在研究由两个数据源组成的 Spring Batch 的可行性 用于 Spring Batch 元数据的 SQL 数据源和用于业务数据的 MongoDB 数据源 具有事务性用途 交易方面在这里提出了几个问题 以下主题 使用 MongoDB
  • 让 Django 走向绿色

    我有一个 Django 管理命令 可以发出数千个 TCP UDP 请求 我使用 Gevent 来加快速度 因为我重组了代码以作为协程工作 套接字连接不再阻塞 但从我读到的内容来看 Django 的某些部分仍然不是绿色的 我所说的绿色 是指使
  • 如何使用 JSTL 在 JSF 1.2 页面中强制构建阶段?

    我在 JSF 应用程序中使用 JSTL 标签 通过某些操作 我需要重建组件树 就像它是初始构建一样 我当前的症状是对象与组件关联不正确 重复的 ID 以及陈旧组件的其他问题 这是使用在构建阶段使用的 c foreach 不能使用重复标记 请
  • 我们如何确定我们使用的是 Web API 1 还是 Web API 2?

    介绍一下问题 我想知道我们使用的是Web API 1还是2 我自己的packages config指示版本5 0 0 这是 Web API 1 还是 2 搜索和研究 我尝试过谷歌搜索以下内容 网络 API 1 网络 API 2 and AS
  • Rhino 中没有 Array.filter() 吗?

    为什么我不能使用Array filter 在犀牛 代码是这样的 var simple reason a b c print typeof simple reason filter var not so simple reason new A
  • WinForms:无需使用 FormWindowState.Normal 即可查找最小化表单的大小

    有没有一种简单的方法可以确定 WindowState Normal 中窗体的大小 而无需实际更改窗体状态 这是我现在所做的 C 代码 public class MyForm Form public void MyMethod FormWin
  • VB.NET 将 Tab 键发送到另一个应用程序窗口

    我想将 TAB 键发送到另一个应用程序window 将密钥发送到窗口而不是文本框 I tried SendMessage hWnd WM SETHOTKEY VK TAB 0 什么都没发生 我的目标是 将 Tab 键发送到我的应用程序Or当
  • 使用带有 CommaDelimitedList 参数的 Cloudformation Join 函数来构建 IAM ARN

    我一直在尝试构建一个存储桶策略 以允许对 CloudFormation 中的集中帐户执行操作到共享相同模式的一系列其他帐户中的 IAM 角色 即 arn aws iam 111111111111 role my role arn aws i
  • Golang:如何将字符串转换为二进制表示形式

    在golang中 如何将字符串转换为二进制字符串 示例 CC 变为 10000111000011 这是一个简单的方法 func stringToBin s string binString string for c range s binS
  • 如何编写返回插值的函数(pandas 数据帧)?

    我有一个作为 pandas 数据框导入的 xls 文件 它具有 NaN 值 如何设置一个函数 用相邻值之间的插值替换 NaN 我不能使用 pd DataFrame interpolate 或任何现有的插值函数 因为我应该创建自己的函数 这是
  • 如何使用 Quartz.net 2.0 安排任务?

    我正在尝试在 ASP NET MVC 4 应用程序中使用 Quartz net 2 0 安排任务 但无法执行该任务 这是代码 public class ScheduleTaskConfig public static void StartS
  • 使用 WinAPI 创建具有透明背景的文本标签

    是否可以仅使用 WinAPI 命令在窗口中创建具有透明背景的标签 我正在尝试将图像添加到对话框窗口中 该窗口将用作背景图像 然后在该图像上显示文本 到目前为止 我尝试过的所有内容都显示背景图像顶部的文本标签 并在其周围绘制了灰色矩形 这是迄
  • 体验(XP)不适用于所有用户 JSON Discord.PY

    我试图为在大约有 50 60 人打字的房间中输入的消息评分 它会第一次将用户添加到 JSON 文件 但不会为他们键入的消息添加任何更多点 我再次测试 只有一名用户因输入的消息而获得积分 其余的保持不变 这是代码 client event a