【问题标题】:Mute role not working with time, UnhandledPromiseRejectionWarning静音角色不随时间工作,UnhandledPromiseRejectionWarning
【发布时间】:2022-01-15 03:01:51
【问题描述】:

我正在为我们的系统机器人制作静音和取消静音命令,静音应该按小时计时,但我将它设置为秒只是为了测试它,无论如何,我的问题是使用该命令时是否有args1 这是静音将持续的时间(以小时为单位),它发送错误并仅使用默认时间,有人知道为什么吗?

我的代码:

const { MessageEmbed } = require('discord.js');

module.exports = {
    name: 'mute',
    category: 'Owner',
    aliases: ["t"],
    description: 'Mute command.',
    usage: 'mute <memeberid> <time>',
    userperms: [],
    botperms: [],
    run: async (client, message, args) => {
    if (!message.guild) return;
    if (message.author.bot) return;

    if (!message.member.roles.cache.has("916785912267034674")) return message.channel.send("You are not a staff member.").then(m => m.delete({timeout: 4000}))
    if (!message.member.hasPermission("MANAGE_ROLES")) return message.channel.send("I don't have permission to do this.").then(m => m.delete({timeout: 4000}))


    let time = args[1]
    let reason = args[2]

    if (!reason) reason = "Violated server rules";
    if (!time) time = "1"
    
    const user = message.mentions.members.first() || message.guild.members.cache.get(args[0]);
    const muterole = message.guild.roles.cache.get("916963460540157962");
    const embed = new MessageEmbed()
      .setTitle('Member muted!')
      .addField('User muted', '<@'+user+'>')
      .addField('muted by', message.author)
      .addField('Reason', reason)
      .addField('For', time + " hour(s)")
      .setFooter('Time muted', client.user.displayAvatarURL())
      .setThumbnail('https://th.bing.com/th/id/R.3e3ee93bca49df93c9751dbb284d7ec8?rik=fKLepuY9WQQnew&riu=http%3a%2f%2fimage.flaticon.com%2ficons%2fpng%2f512%2f25%2f25632.png&ehk=mdsvAx56LxLhOmmktJkpp5Vbse%2fxjnaW8mxahrVoQeU%3d&risl=&pid=ImgRaw&r=0')
      .setTimestamp()

    if (!args[0]) return message.channel.send("Please mention a member or use an ID.")
    if (!user) return message.channel.send("Error: Can't find that user.")
    if (user.user.id == message.author.id) return message.channel.send("Uhh, why don't you just shut up like humans?")
    if (user.user.id == client.user.id) return message.channel.send("You good bro?")
    if (user == message.author.id) return message.channel.send("Uhh, why don't you just shut up like humans?")
    if (user == client.user.id) return message.channel.send("You good bro?")
    if (user.roles.cache.has("916963460540157962")) return message.channel.send("Chill, his already muted!")
    if (user.roles.cache.has("916785912267034674")) return message.channel.send("You can't mute staff, idoit.")

    message.channel.send(embed).catch(err => console.log("Error: " + err));
    user.roles.add("916963460540157962").then(user.roles.remove("916963460540157962") ({timeout: time+"00000"})).catch(err => console.log("Error: " + err));
  }
}

错误:

(node:1460) UnhandledPromiseRejectionWarning: TypeError: user.roles.remove(...) is not a function
    at Object.run (/home/runner/DwaCraft-Main-bot/commands/owner/Mute.js:47:87)
    at module.exports (/home/runner/DwaCraft-Main-bot/events/guild/message.js:52:11)
    at Client.emit (events.js:314:20)
    at MessageCreateAction.handle (/home/runner/DwaCraft-Main-bot/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (/home/runner/DwaCraft-Main-bot/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (/home/runner/DwaCraft-Main-bot/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (/home/runner/DwaCraft-Main-bot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (/home/runner/DwaCraft-Main-bot/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
    at WebSocket.onMessage (/home/runner/DwaCraft-Main-bot/node_modules/ws/lib/event-target.js:132:16)
    at WebSocket.emit (events.js:314:20)
(node:1460) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:1460) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

谢谢!

【问题讨论】:

    标签: javascript node.js discord discord.js


    【解决方案1】:

    您正在使用user.roles.remove(id) ({timeout: time+"00000"}),这显然是错误的语法。此外,角色删除没有内置的timeout。您将需要使用setTimeout,或者更长时间使用数据库

    await user.roles.add(id)
    setTimeout(() => user.roles.remove(id), time * 1000) // *1000 for seconds
    

    正如我之前所说,它只适用于短时间,使用数据库更长的时间

    【讨论】:

    • 所以最多 5 天不能工作?
    • 不保证,如果机器人关闭
    • 哦,对了,我怎样才能让它记住它停止的地方?就像在数据库中一样?
    • 我从没用过数据库
    【解决方案2】:

    语法似乎不正确,请尝试:

    user.roles.add("916963460540157962").then(() => setTimeout(() => user.roles.remove("916963460540157962", +time))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 2020-09-15
      • 2021-09-03
      相关资源
      最近更新 更多