使用 quick.db

问题描述

在我的 discord bot 中,我希望所有用户都有一个自定义配置文件。每当他们运行命令 !profile 或 !p 时,机器人将显示一个带有 bio 的嵌入(类似于“Hello World”之类的介绍)、他们选择的自定义嵌入颜色和其他数据库信息(即硬币、能量等等。) 。我想确保每当他们运行 !desc Hello World 之类的东西时,他们的个人资料嵌入将包含消息 Hello World,如果他们再次运行 !desc Lorem,他们的自定义嵌入的 bio 将被编辑为 Lorem 等等。我使用 quick.db 通过简单的 db.get 和 db.set 函数实现了它们,但问题是每当用户使用多个参数(例如 Hello World )设置描述时,它只会出现在嵌入中作为 HelloWorld 但不是实际正确的带空格的。我真的希望嵌入能够准确显示用户设置的描述(带有空格和东西),但目前我的代码无法做到这一点。请看一下并指出我应该更改的地方!

const db = require("quick.db");
const discord = require("discord.js");

module.exports = {
  commands: ["description","desc"],minArgs: 1,maxArgs: null,expectedArgs: ["description to add"],callback: (message,arguments,text) => {
    var desc;
    desc = arguments.join("");
    let tester = db.get(`_desc${message.author.id}`);

    if (!tester) {
      db.set(`_desc${message.author.id}`,desc);
    } else {
      db.delete(`_desc${message.author.id}`),db.set(`_desc${message.author.id}`,desc);
    }
    console.log(desc);
  },};

上面是 !desc 的代码,下面是 !profile 的代码

const db = require("quick.db");
const discord = require("discord.js");

module.exports = {
  commands: ["profile","p"],alias: ["p"],minArgs: 0,callback: async (message,text) => {
    let target = message.mentions.members.first() || message.author;

    const balance = db.get(`honey_${target.id}`);
    const energy = db.get(`energy_${target.id}`);
    var desc = db.get(`_desc${target.id}`);
    if (desc === null) {
      let desc = "this user have yet to set a description!";
    }

    const embed = new discord.MessageEmbed()
      .setTitle(`${target.tag}'s profile`)
      .setColor("#ECB802")
      .addFields(
        { name: "Description",value: `${desc}`,inline: false },{
          name: "cards",value: "1",inline: true,//to do
        },{ name: "Gym battle record",value: "1/0",inline: true },//to do
        {
          name: "Honey",value: `${balance} :honey_pot:`,},{
          name: "energy",value: `${energy} :dizzy:`,);

    message.channel.send(embed);
  },};

解决方法

您正在使用 ID 获取描述,它将用一个空字符串连接两个字符串:

arguments.join('')