使用 quick.db 设置说明
Setting a description with quick.db
在我的 discord bot 中,我希望所有用户都有一个可自定义的配置文件。每当他们 运行 命令 !profile 或 !p 时,机器人将显示带有 bio 的嵌入(类似于“Hello World”之类的介绍),他们选择的自定义嵌入颜色和其他数据库信息(.即硬币、能源等)。我想确保每当他们 运行 像 !desc Hello World 这样的东西时,他们的个人资料嵌入将包含消息 Hello World,如果他们再次 运行 !desc Lorem,他们自定义嵌入的简历将是编辑为 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,
maxArgs: null,
callback: async (message, arguments, 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:`,
inline: true,
},
{
name: "energy",
value: `${energy} :dizzy:`,
inline: true,
},
);
message.channel.send(embed);
},
};
您正在使用 arguments.join('')
获取描述,这将用一个空字符串连接两个字符串:
const message = ['Hello', 'World'];
console.log(message.join('')); // no spaces
console.log(message.join(' ')); // instead, join by a space!
在我的 discord bot 中,我希望所有用户都有一个可自定义的配置文件。每当他们 运行 命令 !profile 或 !p 时,机器人将显示带有 bio 的嵌入(类似于“Hello World”之类的介绍),他们选择的自定义嵌入颜色和其他数据库信息(.即硬币、能源等)。我想确保每当他们 运行 像 !desc Hello World 这样的东西时,他们的个人资料嵌入将包含消息 Hello World,如果他们再次 运行 !desc Lorem,他们自定义嵌入的简历将是编辑为 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,
maxArgs: null,
callback: async (message, arguments, 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:`,
inline: true,
},
{
name: "energy",
value: `${energy} :dizzy:`,
inline: true,
},
);
message.channel.send(embed);
},
};
您正在使用 arguments.join('')
获取描述,这将用一个空字符串连接两个字符串:
const message = ['Hello', 'World'];
console.log(message.join('')); // no spaces
console.log(message.join(' ')); // instead, join by a space!