我如何让python存储多人的数据?

时间:2018-05-08 00:12:17

标签: python discord.py

我正在尝试制作一个discord.py异步机器人,当被问到时,会给人们提供布朗尼点数(嘿嘿)。它应该是我朋友和我的本地机器人,但我不希望每次重新启动时都将每个人的每个布朗尼点都更新到代码中。我的代码在这里:

导入命令

import discord
from discord.ext.commands import Bot
from discord.ext import commands
import asyncio
import time
import random

#Here is the basic command:
#await client.send_message(message.channel, messsage)

#global hub
me = 0
discordname = "PRIVATE"

Client = discord.Client()
client = commands.Bot(command_prefix = "")

@client.event
async def on_ready():
    print ("the brownies are loaded and ready to go!")

@client.event
async def on_message(message):
    if message.content.startswith("bb! give"):
        args = message.content.split(" ")
        if args[1:][1] == "(my user ID)":
            global me
            global discordname
            me = me + int(args[1:][2])
            await client.send_message(message.channel, str(int(args[1:][2])) + "  brownie points have been given to " + str(discordname))
    if message.content.startswith("bb! brownies"):
        args = message.content.split(" ")
        if args[1:][1] == "(my user ID)":
            await client.send_message(message.channel, str(discordname) + " 
currently has " + str(me) + " brownie points.")

client.run(TOKEN)

我希望每次用户加入服务器时,机器人都会创建一个新变量。但是,我尝试的每一次尝试(即泡菜模块,搁置模块......)都会导致以下后果之一:

  1. 什么都不做
  2. 发生故障
  3. 返回错误

1 个答案:

答案 0 :(得分:0)

如果您不使用commands扩展程序,为什么要导入它?利用commands扩展程序,将您的代码从on_message事件中提取出来。这样,您就可以利用commands扩展程序的一些很酷的功能,例如converters

from discord.ext.commands import Bot
import discord
from collections import defaultdict

bot = Bot('!')

points = defaultdict(int)

@bot.event
async def on_ready():
    print("Ready")

@bot.command(pass_context=True)
async def give(ctx, member: discord.Member):
    points[member.id] += 1
    bot.say("{} now has {} points".format(member.mention, points[member.id]))

@bot.command(pass_context=True)
async def points(ctx, member: discord.Member):
    bot.say("{} has {} points".format(member.mention, points[member.id]))

bot.run('token')

就持久化您的数据而言,您有几个选择。您可以将数据写入文件并将其读回,但我建议您考虑设置数据库。其他地方和本网站上有大量资源可以告诉你如何。如果你确实走了那条路,你应该使用像asyncpg这样的异步数据库。