将MongoDB加进discord-bot

建立 data.py

  • 套入
pip install mongo

bot_id.json

{
    "token":"Your Token",
    "mongoclient":"刚刚复制过来的"
}

bot.py增加数据与查找

@bot.command()
async def check(ctx):
    await ctx.send("请稍等大约4秒钟左右")
    re = checkdatabase(ctx.author, ctx.author.id)
  • 这边要注意的是,因为查询需要时间,所以会有延迟的状况
  • 如果不在资料库要先创建
#data.py
from pymongo import MongoClient
import pymongo
import json

with open('bot_id.json', "r", encoding = "utf8") as datafile:
    jsondata = json.load(datafile)

#checkdatabase is exist ?
def checkdatabase(name, ID):
    cluster = MongoClient(jsondata["mongoclient"])

    db = cluster['discord_bot_database']
    collection = db['data']
    
    result = collection.find_one({str(name) : str(ID)})
    
    if not result:
        
        post = { str(name) : str(ID) , "wallet" : 0, "bank" : 0}

        collection.insert_one(post)
        return False
    
    else:
        return True
  • 如果为非,则创建
#bot.py
if re == False:
    await ctx.send("不在资料库中,现在码上创建")
else:
    await ctx.send("已在资料库中,正在读取资料,请稍後")
    w, b = viewbank(ctx.author, ctx.author.id)
    em = discord.Embed(title = f"{ctx.author.name}'s 钱包", color = discord.Color.red())
    em.set_thumbnail(url = ctx.author.avatar_url)
    em.add_field(name = "Wallet", value = w)
    em.add_field(name = "Bank", value = b)
    await ctx.send(embed = em)
  • 回到刚刚的部分,有了就给出wallet跟bank里有的钱
#data.py
#view bank data
def viewbank(name, ID):
    cluster = MongoClient(jsondata["mongoclient"])

    db = cluster['discord_bot_database']
    collection = db['data']
    
    id = str(ID)
    membername = str(name)
    
    test = []
    for i in collection.find({membername : id}):
        test.append(i)
    
    print("find $$ succeddful")
    wallet = next(item for item in test if item[membername] == id)
    
    nowwallet = wallet["wallet"]
    nowbank = wallet["bank"]
    
    print("$$ succeddful")
    return nowwallet, nowbank

改写一下beg功能

#beg money
@commands.command()
async def beg(self, ctx):
    begnums = random.randint(1, 100)
    begdata(ctx.author, ctx.author.id, begnums)
    await ctx.send(f"你获得了{begnums}$")
  • 回到 data.py
#beg $$调整
def begdata(name, ID, begnums):
    cluster = MongoClient(jsondata["mongoclient"])

    db = cluster['discord_bot_database']
    collection = db['data']
    
    try:
        id = str(ID)
        membername = str(name)
        
        test = []
        for i in collection.find({membername : id}):
            test.append(i)
        
        print("succeddful")
        wallet = next(item for item in test if item[membername] == id)
        nowwallet = wallet["wallet"]
        
        myquery = { "wallet": nowwallet }
        newvalues = { "$set": { "wallet": nowwallet + begnums } }
        
        print("begdata succeddful")
        collection.update_one(myquery, newvalues)
    except:
        checkdatabase(name, ID)
        begdata(name, ID, begnums)
  • 没有的话先创建一个,有的话就直接执行

<<:  使用MongoDB -- 资料库简易上手

>>:  [Day14]What is Hash? part.2

React hooks 的基础概念:hooks链表

当函数组件进入render阶段时,会被renderWithHooks函数处理。函数组件作为壹个函数,...

[Day 11] 核模型 - 支持向量机 (SVM)

核模型 - 支持向量机 (SVM) 今日学习目标 SVM 分类器 何谓支持向量机? 非线性与线性? ...

Day 20 纪录Log

在开发系统时,纪录是一件很重要的事,前面都没有提到,笔者在最近才想到这点,所以就来实作吧! 由於笔者...

学习如何以输入增加知识

如何有效输入从听 Podcast、有声书,到文章集结成册的出版书籍。我们的世界有多元化的方式供大家选...

day15: 模组化好的写法 - 只公开必要的 Interface 和状态管理

只公开必要的 Interface 当你在实作一个模组,若过公开全部的参数介面,那其实就失去模组化的意...