【问题标题】:How to store value to prevent loose after updating my discord bot?更新我的不和谐机器人后如何存储价值以防止松动?
【发布时间】:2020-09-04 19:09:24
【问题描述】:

我目前正在按照discordjs.guide(node.js+discord.js)创建一个不和谐机器人,并且我得到了基础(命令、配置文件)。我成功地将我的机器人加载到我的服务器上,但我相信我会随着时间的推移对其进行改进。

那么我如何存储价值/数据?(用户级别、用户点、用户自定义计数器等)

我知道数据库和 json 文件的存在,但我不太确定它是否能解决问题。 我想知道是否可以从我的机器人下载/检索文件,然后在更新后重新加载。有可能吗?

【问题讨论】:

    标签: discord.js


    【解决方案1】:

    正确的解决方案是使用数据库。你可以以 mysql 为例。 并使用 guild.id 和 user.id 作为 SELECT 的键。

    mysql 的一些示例:

    创建数据库

    CREATE DATABASE myBase
    use myBase
    CREATE TABLE `users` (
      `id` bigint PRIMARY KEY AUTO_INCREMENT,
      `guildId` varchar(255),
      `userId` varchar(255),
      `lvl` int
    );
    

    创建一个连接数据库的池

    const mysql = require('mysql');
    
    const pool = mysql.createPool({
        connectionLimit: 15,
        host: 'localhost',
        user: 'root',
        password: 'password',
        database: 'myBase',
    });
    
    module.exports = pool;
    

    使用选择创建文件,创建和更新 mysql DATA。

    const pool = require('./pool');
    const get = (guildId, userId) => {
        return new Promise((resolve, reject) => {
            pool.query(`SELECT * FROM users WHERE userId = ${userId} && guildId = ${guildId}`, (err, rows) => {
                if (err) throw err;
                if (rows.length === 0) {
                    resolve(create(guildId, userId));
                } else if (rows) {
                    resolve(rows[0]);
                } else {
                    reject(err);
                }
            });
        });
    };
    
    const create = (guildId, userId) => {
        return new Promise((resolve, reject) => {
                let data = {
                    guildId: guildId,
                    userId: userId,
                    lvl: 1,
                };
                pool.query('INSERT INTO users SET ?', data, (err, result) => {
                    resolve(get(guildId, userId));
                });
        });
    };
    
    const update = (guildId, userId, data) => {
        return new Promise((resolve, reject) => {
            get(guildId, userId).then(user => {
                pool.query(`UPDATE users SET ? WHERE _id = ${user.id}`, data, (err, result) => {
                    if (err) throw err;
                    resolve(get(guildId, userId));
                });
            });
        });
    };
    
    module.exports.get = get
    module.exports.create = create
    module.exports.update = update
    

    在 bot 中使用的一些示例。

    const Discord = require('discord.js');
    const client = new Discord.Client();
    const prefix = '?';
    const token = require('./token.json').token;
    const mysqlUser = require('./mysqlUser');
    client.on('ready', () => {
        console.log(`Bot is ready`);
    });
    
    client.on('message', (message) => {
        /* s *Check for message starts with prefix */
        if (!message.content.startsWith(prefix)) return;
        /* split message to array */
        let args = message.content.substring(prefix.length).split(' ');
        /* get command */
        let command = args.shift();
        if (command === 'lvl') {
            mysqlUser.get(message.guild.id, message.author.id).then((user) => {
                message.channel.send(`${message.author} your lvl is ${user.lvl}`);
            });
        }
    });
    
    client.login(token);
    

    【讨论】:

      猜你喜欢
      • 2021-05-30
      • 2020-02-18
      • 2021-02-05
      • 2019-04-12
      • 2021-06-15
      • 1970-01-01
      • 2020-03-19
      • 2020-11-10
      • 2021-08-11
      相关资源
      最近更新 更多