当前位置: 首页 > 知识库问答 >
问题:

不和谐机器人-我可以使用协会成员来创建个人变量吗?

高才
2023-03-14

我在努力制造一个不和谐的机器人。基本上,我想做的是为服务器中的每个人分配一个“pts”变量。我的bot中有一个事件处理程序和命令处理程序。

这是我的事件处理程序。js:

const fs = require('fs');

module.exports = (client, Discord) =>{
    const load_dir = (dirs) =>{
        const event_files = fs.readdirSync(`./events/${dirs}`).filter(file => file.endsWith('.js'));
        
        for (const file of event_files) {
            const event = require(`../events/${dirs}/${file}`);
            const event_name = file.split('.')[0];
            client.on(event_name, event.bind(null, Discord, client));
        }
    }

    ['client', 'guild'].forEach(e => load_dir(e));
}

这是我的命令处理程序。js:

const fs = require('fs');

module.exports = (client, Discord) =>{
    const command_files = fs.readdirSync('./commands/').filter(file => file.endsWith('.js'))

    for(const file of command_files){
        const command = require(`../commands/${file}`);
        if(command.name){
            client.commands.set(command.name, command);
        } else {
            continue;
        }
    }
}

我还有一个guildMemberAdd事件,它有一个guildMember变量,向guildMember添加一个成员角色,并发出欢迎消息。在这里(它被称为guildMemberAdd.js):

module.exports = (Discord, client, guildMember) =>{
    let welcomeRole = guildMember.guild.roles.cache.find(role => role.name === 'Member');

    guildMember.roles.add(welcomeRole);
    guildMember.guild.channels.cache.get(MYCHANNELID).send(`Welcome, <@${guildMember.user.id}>, to our server! ... Check out the rules-cmd channel!`);
}

我在想也许当有人加入服务器时,我可以给他们一个变量。例如:

module.exports = (Discord, client, guildMember) =>{
    var pts = new guildMember;
    let welcomeRole = guildMember.guild.roles.cache.find(role => role.name === 'Member');

    guildMember.roles.add(welcomeRole);
    guildMember.guild.channels.cache.get(MYCHANNELID).send(`Welcome, <@${guildMember.user.id}>, to our server! ... Check out the rules-cmd channel!`);
}

...但我对javaScript的使用非常糟糕,我知道,这肯定行不通。

有办法做到这一点吗?如果有,如何根据命令更改它?(我的命令存储在另一个文件夹中。)

如果你们需要,这是我的。。。嗯。。。文件和文件夹的排序。我不太清楚那叫什么。

非常感谢您的帮助!

我认为你们不需要节点模块文件,对吗?如果有,请评论。

我的编辑1(按TYRCNEX):你们中的一些人在查看这个问题时可能会说,“嗯,应该还有其他像这样的堆栈溢出问题,对吗?”是的,有。然而,正如我上面提到的,我是JS的完全初学者。我可以花一年的时间学习js的基础知识...

...但我手头没有那么多时间。我需要帮助解决我的具体问题,但我无法真正理解其他答案。这就是我问这个问题的原因。非常感谢。

共有1个答案

元叶秋
2023-03-14

首先,您需要某种类型的存储,可以保存行会成员的lvl和id,我建议您使用:

易于使用: QuickDb, Json DB

该数据库的问题在于,它们的可伸缩性较差,而且它们的权重越大,执行查询所需的时间就越多。

对于您当前的级别,数据库将让您了解所有数据库的工作方式,当您了解数据库的工作方式时,您应该期待一些数据库,如:Mongo、postgres等。

也许你们甚至不需要数据库,你们想把它作为对象保存在应用程序的缓存中,我会给你们一个快速的例子来说明它是如何完成的:

var members = {}
//You should know that for level's you shouldn't save all the members on guildmembersJoin 
//Some the members won't last long on the server and even maybe leave right after and you will have 
//a useless row in you db. 
//Your message event
  module.exports = (Discord, client, message) =>{
    members = {
      ...members,
      [message.member.id] : {
        level: members[message.member.id] ? members[message.member.id].level : 0,
        exp: members[message.member.id] ? members[message.member.id].exp : 0 + expformessage
      }
    }
}

以快速为例。db:

const db = require('quick.db');
  module.exports = (Discord, client, message) =>{
    if(!db.get(message.member.id))
      db.set(message.member.id, {'level': 0, 'exp': expformessage})
    else
      db.set(`${message.member.id}.exp`, db.get(`${message.member.id}.exp`) + expformessage )
}
 类似资料:
  • 我使用repl。它让我的不和机器人。我使用Python并遵循本教程: https://www.youtube.com/watch?v=SPTfmiYiuok 这是我的代码:

  • Bot只是不工作:/Bot没有给出任何错误

  • 我已经创建了一个bot,它现在在我的discord服务器中,使用下面的代码。 我的问题是,一旦我在与bot不和谐的聊天中,我如何调用命令让bot运行代码,为用户列表收集csv?我不确定如何调用机器人,一旦它在聊天/服务器中获得列表。

  • 问题内容: 我正在使用Python处理User Discord Bot。如果机器人所有者键入内容,则该机器人将DM所有者提到的用户。 问题答案: 最简单的方法是使用扩展程序。在这里,我们使用转换器来获取目标用户,并使用仅关键字参数作为可选消息来发送目标用户: 对于discord.py的较新的1.0+版本,应使用而不是

  • 我正在使用discord制作discord机器人。py和asyncio。bot有像和这样的命令,这显然不应该对普通用户可用。 我想制作一个简单的系统,它将使用以获取发送命令的用户。 我不希望bot检测到特定的角色名称,因为这些名称在不同的服务器上有所不同。我也不希望机器人有多个文件来保持简单。 我看到了不和谐。py文档和各种其他来源,但没有一个包含如何实现他们所讨论的各种方法的示例。 举个例子,这

  • 我有一个不和谐机器人,定期检查数据库中的一些数据,如果有更新,它会向通道输出一些内容。所以我设置了一个每小时运行一次的函数。 当机器人被添加到多个服务器时,问题就出现了,在这些服务器中,消息只被发送到特定的,因此消息只被发送到我的服务器通道。本质上,我只向我的渠道发送通知,我怎么能向每个拥有我的机器人的渠道发送通知,这可能吗?