DiscordJS数据库不能理想地存储信息

时间:2019-05-29 21:11:03

标签: javascript node.js discord.js node-sqlite3

我试图让Discord机器人创建一个数据库,该数据库在收到!getdata命令时,基本上就是用户映射(每个用户一行,ID,昵称,头像URL等列)。 / p>

我已经到了数据库成功获取数据的地步,在这种情况下,是用户名和用户ID,但是它在两列中显示所有唯一值,以逗号分隔的长值(即,用户名列显示“ user1, user2,user3')。

我确定这是设计使然,但是我真的在进行重组方面的努力。我想让它从对象映射(client.users或message.guild.members)中获取所有数据,但我无法弄清楚。

我现在正在尝试的另一种选择是为每个用户创建一行,然后填写我要存储的值,但进展并不很快。

我对SQLite(以及与此相关的node / DiscordJS / JS)非常陌生,因此非常感谢任何建议。

Index.js

const Discord = require('discord.js');
const client = new Discord.Client();
const sql = require('sqlite3');

let db = new sql.Database("users.sqlite", (err) => {
    if (err) {
        console.log('Error connecting to the database', err)
    } else {
        console.log('Database connected.')
    }
})

let token = process.env.CLIENT_TOKEN;
let prefix = process.env.PREFIX ;

client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
    db.run(`CREATE TABLE IF NOT EXISTS users(username TEXT, id TEXT)`);
})

client.on('message', function(message) {

    if (!message.content.startsWith(prefix));

    const args = message.content.slice(prefix.length).split(/ +/);
    const command = args.shift().toLowerCase();

    if (command === 'getdata') {
        let username = message.guild.members.map(m=>m.user.username);
        let userid = message.guild.members.map(m=>m.user.id);
        db.run(`INSERT OR REPLACE INTO users(username, id) VALUES(?,?)`, [`${username}`,`${userid}`]);
        return message.channel.send(`User database updated.`);
    }
});

client.login(token);

如果您对格式或编写方式感到好奇,答案有两个:

  1. 我很新
  2. 这是我可以获取数据库中的值以返回非null的唯一方法

预先感谢

1 个答案:

答案 0 :(得分:1)

首先,欢迎访问该网站。

我希望我能在这里有所启发,而不必致力于重构代码或使您进行任何重大更改。

关于为什么您存储的是数组而不是单个值,这对我很重要。

let username = message.guild.members.map(m=>m.user.username);
let userid = message.guild.members.map(m=>m.user.id);

.map调用返回一个数组,而不是单个值。

每个发出命令的用户都是消息对象的一部分。如果我没记错的话,你会希望它像是...

(简体版)

const { username, id } = message.member.user;
db.run(`INSERT OR REPLACE INTO users(username, id) VALUES(?,?)`, [username, id]);
// ...

User documentation can be found here

希望这会为您指明正确的方向:)