javascript - 如何制作 Discord 机器人命令?
问题描述
我有一个我想使用的 Discord 机器人,因此我可以禁止用户访问该机器人所在的所有服务器,也就是我拥有的网络。
我需要这个命令,因为我还有其他项目和东西要处理,这似乎是给我带来最大麻烦的一个。它只需要在主公会中工作,或者我将其切换为角色 ID 而不是名称。
if(command === "sban") {
// this is the role of the moderator which would be used in the main guild to ban from all guilds,
if(!message.member.roles.some(r=>["Moderator"].includes(r.name)) )
return message.reply("Sorry, you don't have permissions to use this!");
let member = message.mentions.members.first();
if(!member)
return message.reply("Please mention a valid member of this server");
if(!member.bannable)
return message.reply("I cannot ban this user! Do they have a higher role? Do I have ban permissions?");
let reason = args.slice(1).join(' ');
if(!reason) reason = "No reason provided";
await member.ban(reason)
.catch(error => message.reply(`Sorry ${message.author} I couldn't ban because of : ${error}`));
message.reply(`${member.user.tag} has been banned by ${message.author.tag} because: ${reason}`);
我知道命令本身有效,我只需要一种方法让它在我需要禁止某人时在至少 8 个以上的公会中工作。
解决方案
如果我理解了,您正试图禁止用户访问您的机器人所在的所有服务器。
为此,请forEach
循环client.guilds
并禁止他加入公会。
即使用户不在公会中,您仍然可以通过他们的 ID 禁止他。这是我做的一个例子:
function getUserFromMention(mention) {
if (!mention) return false;
if (mention.startsWith("<@") && mention.endsWith(">")) {
mention = mention.slice(2, -1);
if (mention.startsWith("!")) {
mention.slice(1);
return client.users.get(mention); // Retun the user from mention.
};
};
if (client.users.get(mention)) {
return client.users.get(mention); // Return the user if the author provided an ID.
};
};
const UserToBan = getUserFromMention(arguments[0])
const Reason = arguments.slice(1, 2000).join(" ")
if (!UserToBan) return message.reply("Please mention a user or provide an id.");
if (!Reason) return message.reply("Please provide a reason for the ban.");
client.guilds.forEach(guild => {
if (guild.members.get(UserToBan.id)) {
// The user is in the guild.
message.reply(`Banned the user ${UserToBan} in ${guild.name}`);
guild.ban(UserToBan, Reason);
} else {
// The user is not in the guild, we have to ban him by id.
message.reply(`Banned the user with the id ${UserToBan.id} in ${guild.name}!`);
guild.ban(UserToBan.id, Reason);
}
});
您应该稍微修改一下代码。它将为每个公会发送一条消息。
这只是一个例子。您应该检查用户是否可以boolean
通过.bannable
.GuildMember
推荐阅读
- javascript - 反应 - 安装时不工作 npm
- azure - 本地 FTP 服务器文件夹迁移到 Azure 数据湖
- android - 改造-Android 11
- c++ - 如果一个类包含另一个类的对象,并且所有的类都是通过构造函数初始化的,那么初始化是如何工作的呢?
- vue.js - 使用 Vuetify 进行阴影控制
- amazon-web-services - AWS Glue - 数据未插入到所需的目的地
- json - 是什么导致我的 Blazor 应用程序中出现 JsonSerializationException
- python - 遍历 csv.reader python
- cordova - 如何在 Framework7 中使用 AdMob Pro 插件?
- r - 如何在 SJplot 包中生成聚集标准错误?