0

プロジェクトで TinyDB を使用して、不和ボットの情報を保存しています。ユーザーが「ロール」を更新するたびに、変更された値がキャッシュされますが、ドキュメントは変更を反映して更新されません。これにより、ボットが再起動するたびにデータが保存されなくなります。

ユーザーデータは次のようになります。

{
        "id": "some guid",
        "userId": discordId,
        "guildId": guildId,
        "data": {
            "rolls": {},
            "bonus": {}
        },
        "active": true,
        "first": "john",
        "last": "doe"
    }

「ロール」ディクショナリにキーと値を追加するコマンドがあります。コードは次のとおりです。

handler.py

def save_dice(ctx, key, value):
    for x in ['+','-','*','/']:
         value = x.join(value.split(x))
         value = value.replace(x, f" {x} ")
    character = database.get_active_character(ctx.author.id, ctx.guild.id)
    character["data"]["rolls"][key] = value
    database.update_character(character["id"], {"data": character["data"]})
    return f"roll \"{key}\" set to \"{value}\""

データベース.py

from tinydb import TinyDB, Query
from difflib import SequenceMatcher
from pprint import pprint
from uuid import uuid4
import json
import os

script_dir = os.path.dirname(__file__) #<-- absolute dir the script is in
Row = Query()

...

# id: uuid
# guildId: discord guildid
# userId: discord userid
# data: dict containing character stuff
# active: bool
# first: first name
# last: last name
characterTable = TinyDB(os.path.join(script_dir, 'data/characters.json'))

...

def update_character(id, changedValues):
    userTable.update(changedValues, (Row.id == id))
4

0 に答える 0