<i id='gbsEA'><tr id='gbsEA'><dt id='gbsEA'><q id='gbsEA'><span id='gbsEA'><b id='gbsEA'><form id='gbsEA'><ins id='gbsEA'></ins><ul id='gbsEA'></ul><sub id='gbsEA'></sub></form><legend id='gbsEA'></legend><bdo id='gbsEA'><pre id='gbsEA'><center id='gbsEA'></center></pre></bdo></b><th id='gbsEA'></th></span></q></dt></tr></i><div id='gbsEA'><tfoot id='gbsEA'></tfoot><dl id='gbsEA'><fieldset id='gbsEA'></fieldset></dl></div>

  • <tfoot id='gbsEA'></tfoot>
          <bdo id='gbsEA'></bdo><ul id='gbsEA'></ul>

        <legend id='gbsEA'><style id='gbsEA'><dir id='gbsEA'><q id='gbsEA'></q></dir></style></legend>
      1. <small id='gbsEA'></small><noframes id='gbsEA'>

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

        时间:2023-10-11

            <tbody id='ARkD2'></tbody>
          • <bdo id='ARkD2'></bdo><ul id='ARkD2'></ul>

              <legend id='ARkD2'><style id='ARkD2'><dir id='ARkD2'><q id='ARkD2'></q></dir></style></legend>
              <i id='ARkD2'><tr id='ARkD2'><dt id='ARkD2'><q id='ARkD2'><span id='ARkD2'><b id='ARkD2'><form id='ARkD2'><ins id='ARkD2'></ins><ul id='ARkD2'></ul><sub id='ARkD2'></sub></form><legend id='ARkD2'></legend><bdo id='ARkD2'><pre id='ARkD2'><center id='ARkD2'></center></pre></bdo></b><th id='ARkD2'></th></span></q></dt></tr></i><div id='ARkD2'><tfoot id='ARkD2'></tfoot><dl id='ARkD2'><fieldset id='ARkD2'></fieldset></dl></div>

                <small id='ARkD2'></small><noframes id='ARkD2'>

                • <tfoot id='ARkD2'></tfoot>

                  本文介绍了体验 (XP) 不适用于所有用户 JSON Discord.PY的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我正在尝试为在大约有 50-60 人输入的房间中输入的消息打分.它将第一次将用户添加到 JSON 文件中,但不会为他们键入的消息添加任何分数.我再次对其进行了测试,只有一个用户获得了他们输入的消息的积分,其余的保持不变.代码如下:

                  I'm trying to give points for messages typed in a room that has around 50-60 people that type in it. It will add the user to the JSON file the first time, but it won't add any more points for the messages they type. I tested it again and only one user was getting points for the messages they typed and the rest remained the same. Here is the code:

                   @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 中添加了一个守卫,以阻止机器人对其自身做出响应.

                  We should only need to read the file once, and then just save our modifications to the file when we need to. I didn't notice any logical errors that would lead to the behavior described, so it may be a permissions issue regarding what messages your bot is allowed to see. To facilitate debugging, I've simplified your code and added some prints to track what's going on. I also added a guard in on_message to stop the bot from responding to itself.

                  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")
                  

                  这篇关于体验 (XP) 不适用于所有用户 JSON Discord.PY的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:如何提及命令的发送者?不和谐.py 下一篇:Discord.py 变量在整个代码中不是恒定的

                  相关文章

                  最新文章

                    <bdo id='uQJ2c'></bdo><ul id='uQJ2c'></ul>

                  1. <small id='uQJ2c'></small><noframes id='uQJ2c'>

                  2. <i id='uQJ2c'><tr id='uQJ2c'><dt id='uQJ2c'><q id='uQJ2c'><span id='uQJ2c'><b id='uQJ2c'><form id='uQJ2c'><ins id='uQJ2c'></ins><ul id='uQJ2c'></ul><sub id='uQJ2c'></sub></form><legend id='uQJ2c'></legend><bdo id='uQJ2c'><pre id='uQJ2c'><center id='uQJ2c'></center></pre></bdo></b><th id='uQJ2c'></th></span></q></dt></tr></i><div id='uQJ2c'><tfoot id='uQJ2c'></tfoot><dl id='uQJ2c'><fieldset id='uQJ2c'></fieldset></dl></div>

                    1. <tfoot id='uQJ2c'></tfoot>

                      <legend id='uQJ2c'><style id='uQJ2c'><dir id='uQJ2c'><q id='uQJ2c'></q></dir></style></legend>