javascript - 我如何发出警告命令
问题描述
我在 warn.js 中的命令
module.exports = {
name: 'warn',
commands: 2,
expectedArgs: "<Target user's @> <reason>",
requiredRoles: ['Admin'],
callback: (message, arguments) => {
const target = message.mentions.users.first()
if (!target) {
message.reply('Please specify a MEMEBR to warn!!')
return
}
arguments.shift()
const guildId = message.guild.id
const userId = message.member.id
const reason = arguments.join(' ')
console.log(guildId, userId, reason)
},
}
我在 index.js 中的代码
else if (command == 'warn'){
client.commands.get('warn').execute(message, args, Discord, client);
}
我的错误
/home/runner/discord-quack-admin/index.js:85
client.commands.get('warn').execute(message, args, Discord, client);
^
TypeError: client.commands.get(...).execute is not a function
at Client.<anonymous> (/home/runner/discord-quack-admin/index.js:85:35)
at Client.emit (events.js:314:20)
at Client.EventEmitter.emit (domain.js:483:12)
at MessageCreateAction.handle (/home/runner/discord-quack-admin/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
at Object.module.exports [as MESSAGE_CREATE] (/home/runner/discord-quack-admin/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (/home/runner/discord-quack-admin/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
at WebSocketShard.onPacket (/home/runner/discord-quack-admin/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
at WebSocketShard.onMessage (/home/runner/discord-quack-admin/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
at WebSocket.onMessage (/home/runner/discord-quack-admin/node_modules/ws/lib/event-target.js:132:16)
我是 DISCORD.JS 的新手,所以请告诉我该怎么做,如果可能,请重新编写代码来帮助我
解决方案
这是我使用的警告命令。我目前没有将警告保存在日志中,但可以轻松添加。它确实将用户已被警告存储在 .json 文件中。在 5 次警告时,用户将在默认时间内自动静音。您需要更改的是静音角色,以及机器人将发送操作日志的位置。
module.exports = {
name: 'warn',
aliases: ['warn'],
category: 'staff',
utilisation: '{prefix}help <command name>',
execute(client, message, args) {
const Discord = require("discord.js");
const mutedroleid = '818147666785337406';
const fs = require('fs');
const mutedrole = message.guild.roles.cache.get(mutedroleid);
const warns = require("./warns.json");
if(!message.member.hasPermission("MUTE_MEMBERS")) return message.send("I cannot let you do that");
const user = message.mentions.users.first();
if (!user) return message.send("Please specify someone you want to warn. **&warn <user> [reason]**");
const target = message.guild.members.cache.get(user.id);
if(target.roles.cache.has(mutedroleid)) return message.reply("You cannot warn muted members.");
if(!mutedrole) return message.send("Couldn't find the Muted role.");
message.delete()
const reason = args.slice(1).join(" ");
if(!warns[user.id]) {
warns[user.id] = {
warnCount: 1
}
} else {
warns[user.id].warnCount += 1;
}
if(warns[user.id].warnCount >= 5) {
const mute = new Discord.MessageEmbed()
.setColor("#ff7b23")
.setDescription(`${user} has been muted. (**5**/**5**)\nReason: **${reason != "" ? reason : "-"}**`);
message.channel.send(mute);
message.guild.members.cache.get(user.id).send(mute)
let botlog = message.guild.channels.cache.find(x => x.name === "bot-logs");
botlog.send(mute);
target.roles.add(mutedrole.id);
warns[user.id].warnCount = 0;
setTimeout(() => {
target.roles.remove(mutedrole.id);
const unmute = new Discord.MessageEmbed()
.setColor("#23ff82")
.setDescription(`${user} has been unmuted.`);
message.channel.send(unmute);
message.guild.members.cache.get(user.id).send(unmute)
}, 1000 * 900);
} else {
const warn = new Discord.MessageEmbed()
.setColor("#ffd641")
.setDescription(`${user} has been warned by ${message.author}. (**${warns[user.id].warnCount}**/**5**) \nReason: **${reason != "" ? reason : "-"}**`);
message.channel.send(warn);
message.guild.members.cache.get(user.id).send(warn)
let botlog = message.guild.channels.cache.find(x => x.name === "bot-logs");
botlog.send(warn);
}
fs.writeFile("./warns.json", JSON.stringify(warns), err => {
if (err) console.log(err);
});
},
};
.json 文件格式。将此文件保存在机器人的主文件夹中。有时它会创建文件,有时它不会。
{}
推荐阅读
- mysql - 有没有更好的方法来按部门获得最高(薪水)并确保只有你获得平均(薪水)> 50,000 的部门?
- kubernetes - 运行 `linkerd upgrade --from-manifests` 时没有类型的“APIService”注册错误
- list - 如何订购firebase的文件?
- c# - 如何将子项从 ListBox 添加到 ListView?
- python - use ValueProvider to format a BigQuery in Dataflow
- php - 联系表格 7 提交后调用 PHP 函数
- google-apps-script - 使用谷歌应用脚本设置文件共享权限的到期日期
- php - url重写:域名后的id
- java - 将参数类型绑定到多个候选者之一
- date - Neo4j 日期和日期时间比较问题