我目前正在使用机器人数据库,一切正常,但是当我将前缀设置为两个以上字符时,机器人不会回复。帮助?
这是我的“prefix.js”代码
let newPrefix = args[0];
if (await Prefix.findOne({
guildID: message.guild.id
})) {
let guildPrefixes = await Prefix.findOne({
guildID: message.guild.id
});
if (!guildPrefixes) {
guildPrefixes = await new Prefix({
_id: mongoose.Types.ObjectId(),
guildID: message.guild.id,
prefix: newPrefix,
})
await guildPrefixes.save();
message.channel.send(`Successfully set the guild Prefix to ${newPrefix}!`);
} else if (guildPrefixes) {
await Prefix.findOneAndUpdate({
guildID: message.guild.id,
prefix: newPrefix,
});
return message.channel.send(`Successfully updated the guild Prefix to ${newPrefix}!`);
}
}
}
这是我的消息事件
let guildPrefixes = await Prefix.findOne({
guildID: message.guild.id
});
if (message.content.startsWith(guildPrefixes.prefix)) {
const [cmdName, ...cmdArgs] = message.content
.slice(client.prefix.length)
.trim()
.split(/\s+/);
const command = client.commands.get(cmdName);
if (command) {
command.run(client, message, cmdArgs);
}
}
答案 0 :(得分:0)
从您对我对该问题的评论的回复来看,在消息事件代码的第 7 行,您有一个静态前缀:
.slice(client.prefix.length)
我想它可能是这样的!或 ?,所以长度为 1。当您尝试将其设置为 !!
,然后运行 !!test
时,cmdName
将是 !test
,因为您切掉了 1 个字符 (静态前缀),这不是命令。尝试将切片中的静态前缀更改为动态前缀:
.slice(guildPrefixes.prefix.length)
您的消息事件应如下所示:
let guildPrefixes = await Prefix.findOne({
guildID: message.guild.id
});
if (message.content.startsWith(guildPrefixes.prefix)) {
const [cmdName, ...cmdArgs] = message.content
.slice(guildPrefixes.prefix.length)
.trim()
.split(/\s+/);
const command = client.commands.get(cmdName);
if (command) {
command.run(client, message, cmdArgs);
}
}
希望它有效