如何制作将channelID存储在数据库中的命令?
Posted
技术标签:
【中文标题】如何制作将channelID存储在数据库中的命令?【英文标题】:How to make a command that stores channelID in database? 【发布时间】:2020-02-27 05:31:29 【问题描述】:如何创建一个在数据库中存储频道 ID 的命令,也可以通过数据库,有点像我机器上的一个大文本文件,它有一个服务器 ID,然后是一个频道 ID。我该怎么办?
我正在使用: 不和谐.js sqlite3 续集
我认为会是这样: 用户:?setlog #channelmentionhere Bot:将新的整体变成一个文本文件或其他东西
我做了很多研究,我不能理解很多,如果我理解它,我会遇到麻烦。
我的机器人代码:
client.on('message', message =>
if (!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).split(/ +/);
const commandName = args.shift().toLowerCase();
const user = message.mentions.users.first();
const command = client.commands.get(commandName)
|| client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
if (!command) return;
if (command.guildOnly && message.channel.type !== 'text')
return message.reply('I can\'t execute that command inside DMs!');
if (command.args && !args.length)
let reply = `You didn't provide any arguments, $message.author!`;
if (command.usage)
reply += `\nThe proper usage would be: \`$prefix$command.name $command.usage\``;
return message.channel.send(reply);
if (!cooldowns.has(command.name))
cooldowns.set(command.name, new Discord.Collection());
const now = Date.now();
const timestamps = cooldowns.get(command.name);
const cooldownAmount = (command.cooldown || 3) * 1000;
if (timestamps.has(message.author.id))
const expirationTime = timestamps.get(message.author.id) + cooldownAmount;
if (now < expirationTime)
const timeLeft = (expirationTime - now) / 1000;
return message.reply(`please wait $timeLeft.toFixed(1) more second(s) before reusing the \`$command.name\` command.`);
timestamps.set(message.author.id, now);
setTimeout(() => timestamps.delete(message.author.id), cooldownAmount);
try
command.execute(message, args, user);
catch (error)
console.error(error);
message.reply('there was an error trying to execute that command!');
);
【问题讨论】:
我敢打赌它适用于火星。 【参考方案1】:我会推荐 Quick.db (npm i quick.db
) 这个数据库持久存储(不会在机器人重启时擦除)
在下面的代码 sn-ps 中,我使用的是 quick.db,但使用 Json 文件应该不会太难。
为每个公会设置频道ID:(你不必使用会员,但我这样做是出于习惯)
let member = message.guild.member(message.member);
db.set(`$member.guild.id-modlogs`, message.mentions.channels.first().id);
在其他命令中获取数据库,然后发送通道消息:
let dbchannelID = db.get(`$member.guild.id-modlogs`)
let msgchannel = member.guild.channels.get(dbchannelID);
msgchannel.send("Blah Blah")
解释db.set
部分:
所以db.set
正在设置数据库,这里的数据库将是modlogs
。 db.set
和 modlogs
之间的文本是你想要的设置方式,在这里它是按公会设置的。您可以将其更改为 message.author.id
并将其设置为作者等。
希望这在某种程度上有所帮助。
【讨论】:
我的 bot 文件夹或任何东西(例如任何新文件/文件夹)是否有任何设置?我只是想确定一下。 我测试了您的代码,但它不起作用,我收到一条错误消息,提示“未定义 db”。这是我的 pastebin 脚本:pastebin.com/i4KNF26C 解决了上面的问题,把代码做成两个单独的命令 希望我在某种程度上提供了帮助,祝你机器人的其余部分好运。以上是关于如何制作将channelID存储在数据库中的命令?的主要内容,如果未能解决你的问题,请参考以下文章