我正在和朋友们为我的私人不和谐服务器制作一个机器人,我们喜欢《星球大战》,所以我把它叫做达斯·维达。我一直在看教程,有了这个机器人,我已经很不错了,但是我却受制于命令。该命令称为forcechoke
。它的作用是在聊天中添加一条消息:
达斯·维达(Darth Vader):用力敲击@fakeplayer持续时间(以秒为单位)。 文件夹中有我所有代码的(达斯·维达cho住某人的)附件文件。
基本上,它会使人静音60秒,但随后显示Darth Vader使人窒息。命令:!forcechoke <@person> <time in seconds>
。我已经完成!forcechoke
的工作,您只需要看看即可。
const commando = require('discord.js-commando');
class ForceChokeCommand extends commando.Command
{
constructor(client)
{
super(client,{
name: 'forcechoke',
group: 'sith',
memberName: 'forcechoke',
description: 'Darth Vader will choke the person of your choice!',
args: [
{
key: 'user',
prompt: 'Who would you like me to forcechoke?',
type: 'user'
}
]
});
}
// THIS IS WHERE I NEED HELP
}
}
module.exports = ForceChokeCommand;
此外,如果我需要安装npm,请告诉我。
答案 0 :(得分:0)
1。屏蔽用户:
没有使用户静音的内置方法,您必须使用角色来静音。创建一个角色(假设它称为 Mute ),并在每个频道中撤消诸如“发送消息”,“连接”,“讲话”之类的权限。然后使用以下方式分配该角色:
run(msg) {
let mute_role = msg.guild.roles.find("name", "Mute");
let member = msg.mentions.members.first();
member.addRole(mute_role); // <- this assign the role
setTimeout(() => {member.removeRole(mute_role);}, 60 * 1000); // <- sets a timeout to unmute the user.
}
或者,您可以使用guild.channels.forEach()
和GuildChannel.overwritePermissions()
覆盖每个频道中该用户(甚至角色)的权限,具体取决于您。
2。发送图像:
您可以使用在线图片的URL或路径:
msg.say(`Forcechockes ${member} for 60 seconds.`, {file: "path or URL as a string"});
-回顾:
创建一个名为“静音”的角色(或随意更改代码中的“静音”)。
查找图像,然后您既可以通过网络使用它,也可以将其保存在本地。我将从网络上获取一个,您可以将我的URL替换为另一个URL或文件的本地路径。
将此代码添加到您的命令文件中:
run(msg) {
let mute_role = msg.guild.roles.find("name", "Mute"); // this is where you can replace the role name
let member = msg.mentions.members.first();
member.addRole(mute_role); // <- this assign the role
setTimeout(() => {member.removeRole(mute_role);}, 60 * 1000); // <- sets a timeout to unmute the user.
// V this is where the URL or the local path goes V
msg.say(`Forcechockes ${member} for 60 seconds.`, {file: "https://lumiere-a.akamaihd.net/v1/images/databank_forcechoke_01_169_93e4b0cf.jpeg"});
}
答案 1 :(得分:0)
我的回答基本上是Federico Grandi所做的,但是又冲洗了一些并在discord.js-commando中实现。在扩展的run()
类中添加此Command
方法。 run()
是在Commando中执行用户请求启动的过程的主要方法。
您在这里:
async run(message, args) {
// get the user from the required args object
const userToMute = message.guild.members.find('id', args.user.id);
// find the name of a role called Muted in the guild that the message
// was sent from
const muteRole = message.guild.roles.find("name", "Muted");
// add that role to the user that should be muted
userToMute.addRole(muteRole);
// the time it takes for the mute to be removed
// in miliseconds
const MUTE_TIME = 60 * 1000;
// wait MUTE_TIME miliseconds and then remove the role
setTimeout(() => {
userToMute.removeRole(muteRole);
}, MUTE_TIME);
message.channel.send(`*${message.author.username} forcechockes ${userToMute.user.username} for ${MUTE_TIME / 60} seconds*`, { file: 'url/path' });
return;
}
如果您想知道javascript中的async
关键字是一个相当新的东西,但是它只允许您运行此方法而无需您的机器人等待它完成。
setTimeout()
是全局的javascript函数,它仅告诉您的程序在运行该进程之前要等待一定的时间。
() => {}
是function helloworld() {}
的简写
`${}`
奇怪的字符串格式请尝试读取一些this。
希望这对您有所帮助,请学习一些Javascript:)!