我正在尝试在 Discord 中制作关卡机器人。基本上,我想做的是为服务器中的每个人分配一个“pts”变量。我的机器人中有一个事件处理程序和命令处理程序。
这是我的 event_handler.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));
}
这是我的 command_handler.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 添加一个成员 Angular 色,并说一条欢迎消息。在这里(它被称为 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 真的很不好,我知道,这将是 绝对 不行。有没有办法做到这一点?如果有,我该如何根据命令更改它? (我的命令存储在另一个文件夹中。)
如果你们需要,这是我的……嗯……文件和文件夹的排序。我不太确定那叫什么。
非常感谢您的帮助!!
我认为你们不需要 Node 模块文件,对吧?如果你这样做,请发表评论。
我的编辑 1(由 TYRCNEX 提供) : 看到这个问题的你们中的一些人可能会说,“嗯,应该还有其他类似的 Stack Overflow 问题,对吧?”就在这里。但是,我是 完成正如我上面提到的,JS 初学者。我可以花一年的时间来学习 js 的基础知识...
...但我手头没有那么多时间。我的 需要帮助具体 问题,我无法真正理解其他答案。这就是我问这个问题的原因。谢谢你。
最佳答案
首先,您需要某种类型的存储空间,您可以在其中保存 GuildMembers 的 lvl 和 id,我向您推荐其中一些:
易于使用:QuickDb , json 数据库
The problem with that db's is that they have poor scalability and more they weight more time the queries take to execute.
对于您当前的水平,数据库将使您了解它是如何工作的,当您了解数据库的工作原理时,您应该期待一些数据库,例如: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
}
}
}
quick.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 )
}
关于javascript - Discord Bot - 我可以使用 guildMember 创建一个 'personal' 变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66062947/