如何制作将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 正在设置数据库,这里的数据库将是modlogsdb.setmodlogs 之间的文本是你想要的设置方式,在这里它是按公会设置的。您可以将其更改为 message.author.id 并将其设置为作者等。

希望这在某种程度上有所帮助。

【讨论】:

我的 bot 文件夹或任何东西(例如任何新文件/文件夹)是否有任何设置?我只是想确定一下。 我测试了您的代码,但它不起作用,我收到一条错误消息,提示“未定义 db”。这是我的 pastebin 脚本:pastebin.com/i4KNF26C 解决了上面的问题,把代码做成两个单独的命令 希望我在某种程度上提供了帮助,祝你机器人的其余部分好运。

以上是关于如何制作将channelID存储在数据库中的命令?的主要内容,如果未能解决你的问题,请参考以下文章

我如何制作将数据存储在客户端数据库中的服务器端应用程序

如何让不和谐机器人在命令上创建频道

如何从存储在 pyspark 链接中的数据制作数据框?

Discord.js 向存储在数据库中的每个频道 ID 发送消息

你将如何获得最后 10 个键 redis?

python 如何根据存储在Python列表中的数据制作热图