Javascript 如何为我的机器人编写带有原因函数的kick

Javascript 如何为我的机器人编写带有原因函数的kick,javascript,discord,discord.js,Javascript,Discord,Discord.js,我试图让我的代码有理由踢人,并告诉他们他们因为而被踢出。在这一分钟,它没有发送一个理由 看了在线教程,但没有运气。我也问过一些人,但他们也不知道。似乎没有多少人使用discord.js,任何帮助都将不胜感激。=) const Discord=require('Discord.js'); const{token}=require('./config.json'); var{prefix,logchannel}=require('./config.json'); const client=new

我试图让我的代码有理由踢人,并告诉他们他们因为
而被踢出
。在这一分钟,它没有发送一个理由

看了在线教程,但没有运气。我也问过一些人,但他们也不知道。似乎没有多少人使用discord.js,任何帮助都将不胜感激。=)

const Discord=require('Discord.js');
const{token}=require('./config.json');
var{prefix,logchannel}=require('./config.json');
const client=new Discord.client();
client.once('ready',()=>{
log('Bot-loaded!');
client.user.setActivity('支持:!信息'{
类型:“播放”
});
})
client.on('message',message=>{
if(message.content==`${prefix}ping`){
message.channel.send('Pong');
log(`COMMAND:${message.member.displayName}发出了ping命令。`);
}else if(message.content==`${prefix}info`){
message.channel.send(`此服务器的名称为:${message.guild.name}
它的成员总数为${message.guild.memberCount}。
它正在运行**用户隐藏的**浪费机器人****
如需支持,请加入链接隐藏“);
log(`COMMAND:${message.member.displayName}发出的信息命令。`);
}else if(message.content==`${prefix}help`){
log(`COMMAND:${message.member.displayName}发出的帮助命令。`);
message.delete();
message.channel.send('请检查您的dm');
message.member.send(`\**WastefulBot帮助**__
!乒乓球。
!info |返回有关服务器的信息以及如何获得对bot的支持。
!捐赠|获取有关如何捐赠的信息。
!help |显示此信息。
__**行政命令**__
(请注意,这些命令需要相应的权限)
!kick |踢指定用户。
!ban |禁止指定的用户。
__**管理命令**__
(请注意,这些命令需要相应的权限)
!staff |授予用户staff。(WIP-可能无法在大多数服务器上工作。)
`);
}
if(message.content==(`${prefix}setlog`){
if(message.member.hasPermission(“管理频道”)){
message.channel.send('抱歉,此命令当前为WIP');
console.log(`WARNING:${message.member.displayName}发出了setlog命令,该命令是WIP且不起作用。`);
}
}
if(message.content==(`${prefix}devote`){
message.channel.send('您可以在``https://www.patreon.com/wasteful_development``');
}
//KICK命令从这里开始
else if(message.content.startsWith(`${prefix}kick`){
if(message.member.hasPermission(“KICK_MEMBERS”)){
如果(!message.notices.users.size){
return message.reply('您必须标记1个用户');
}否则{
让member=message.notices.members.first();
让原因=message.content.split(“”).slice(22);
if(member.kickable==false){
message.channel.send(“该用户不能被踢!”);
返回;
}否则{
member.send(`你因为${reason}.`的原因被踢出\`${message.guild.name}\`)。然后((message)=>{
成员。踢(原因)。然后((成员)=>{

message.channel.send(“由于用户的隐私设置,您的bot可能无法在用户被踢出后对其进行DM。因为用户被踢出,他们不再与bot共享服务器(除非它是一个非常全局使用的bot,这会增加用户在多个服务器上使用bot的几率,”)这意味着bot无法向该用户发送DM的可能性非常高。

下面不是答案,用户和成员都有。send() 代码中的错误是
member.send()
。你看,和是两个不同的东西。
.send()
仅适用于,它将起作用。
此外,您还需要一个捕获来实现该承诺,因此,如果该用户禁用了DM,就像机器人无法在用户禁用DM时对其进行DM一样。类似于:

await member.user.send(`You have been kicked!`)
  .catch(() => message.channel.send("User seems to have DMs disabled!"));
await member.kick("reason")
  .then(member => message.channel.send(`${member.displayName} has been kicked!`))
  .catch(e => console.error(e.stack));
请记住,
await
是异步函数中的链接
then

说明: 看看你的错误,这是问题的时间表

  • 这一切的根源在于,由于帮会()中的隐私设置,机器人无法向成员发送DM。这导致
    成员发送(…)
    被拒绝
  • 由于未捕获此被拒绝的承诺,因此代码继续执行
    。然后()
    不返回任何内容,而不是预期的
    消息
    参数
  • 当您尝试读取
    message.member
    displayName
    属性时,它会抛出一个错误,因为从未返回您的参数
    message
  • 解决方案: 实施
    .catch()
    方法来处理拒绝承诺的可能性

    请记住,必须将函数声明为异步才能使用
    wait

    client.on('message',异步消息=>{//ES6
    
    然后,在您的命令中:

    wait member.send(`您已被\`${message.guild.name}`踢出。原因:\`${Reason}`)
    .catch(err=>message.channel.send(`⚠ 无法通知${member}原因。`);
    等待成员。踢(原因);
    
    wait message.channel.send(`是否抛出任何错误?我的错误:(我不能在这里粘贴太长)@slothiful这不是真的:这段代码不工作。它缺少两个右括号,我试图添加它们,但出现了以下错误(粘贴太长,无法在这里发布)。您需要将这段代码放入异步函数中。更改
    client.on('message',message=>{
    客户端。在(“message”,async message=>{
    )上,确保异步在message之前。Hm似乎仍然不起作用。这是错误的粘贴箱,这是我的代码谢谢。=)你好。对我来说,这段新代码有效。他实际上使用了
    member.send('msg')。然后((message)=>{member.kick)(原因)…})
    所以它会发送消息,然后踢,但你是