当前位置: 首页 > 知识库问答 >
问题:

需要帮助更新Bot以避免冲突。JSV12

后化
2023-03-14

我正在尝试更新此代码以处理Discord。jsv12。我遇到了一个错误,我有点困惑于如何修复这个错误。我已经更新了一些代码来处理Discord。jsv12。

client.channels.fetch...

在客户端。(/home/runner/Log/index.js:44:40)在客户端。在客户端发出(events.js:314:20)。事件发射器。在MessageCreateAction处发出(domain.js:483:12)。对象上的句柄(/home/runner/Log/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)。单元在WebSocketManager上导出[作为MESSAGE_CREATE](/home/runner/Log/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)。WebSocketShard上的handlePacket(/home/runner/Log/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)。WebSocketShard上的onPacket(/home/runner/Log/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)。websocket上的消息(/home/runner/Log/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)。onMessage(/home/runner/Log/node_modules/ws/lib/event target.js:132:16)

const Discord = require('discord.js');
const client = new Discord.Client();
const { prefix, token, logsChannel } = require('./config.json');

client.once('ready', () => {
    console.log('I am alive!');
});

// Messages log
client.on('message', message => {
    // Function
    function isEmpty(collection) {
        for(var arg in collection) {
            if(collection.hasOwnProperty(arg))
                return false;
        }
        return true;
    }
    // Logs
    if(message.author.bot) return;
    let username = message.author.tag;
    let channel = message.channel.name;
    let server = message.channel.guild;
    var serverAvatarURL = message.guild.iconURL;
    var attachment = (message.attachments).array();
    if(isEmpty(attachment)) {
        var img = "";
    } else {
        var img = attachment[0].url;
    }
    let embed_send = new Discord.MessageEmbed()
        .setAuthor(username, message.author.avatarURL)
        .setColor('23c115')
        .setTitle("Message sent!")
        .setDescription(message.content + " " + img)
        .setImage(img)
        .setFooter("#" + channel)
        .setTimestamp();
    client.channels.fetch(logsChannel).send(embed_send);
});

// Message edit log
client.on("messageUpdate", async(oldMessage, newMessage) => {
    // Function
    function isEmpty(collection) {
        for(var arg in collection) {
            if(collection.hasOwnProperty(arg))
                return false;
        }
        return true;
    }
    // Logs
    if (oldMessage.content === newMessage.content) {
        return;
    }

    var attachment = (oldMessage.attachments).array();
    if(isEmpty(attachment)) {
        var img = "";
    } else {
        var img = attachment[0].url;
    }

    let embed_edit = new Discord.MessageEmbed()
        .setAuthor(oldMessage.author.tag, oldMessage.author.avatarURL)
        .setColor('2615c1')
        .setTitle("Message edited!")
        .addField("Old", oldMessage.content + " " + img, true)
        .addField("New", newMessage.content + " " + img, true)
        .setFooter("#" + oldMessage.channel.name)
        .setTimestamp();
    client.channels.fetch(logsChannel).send(embed_edit);
});

// Message delete log
client.on("messageDelete", async message => {
    // Function
    function isEmpty(collection) {
        for(var arg in collection) {
            if(collection.hasOwnProperty(arg))
                return false;
        }
        return true;
    }
    // Logs
    var attachment = (message.attachments).array();
    if(isEmpty(attachment)) {
        var img = "";
    } else {
        var img = attachment[0].url;
    }

    let embed_delete = new Discord.MessageEmbed()
    .setAuthor(message.author.tag, message.author.avatarURL)
    .setColor('c11515')
    .setTitle("Message deleted!")
    .setDescription(message.content + " " + img)
    .setImage(img)
    .setFooter("#" + message.channel.name)
    .setTimestamp();    
    client.channels.fetch(logsChannel).send(embed_delete);
});

client.login(token);

原始代码

const Discord = require('discord.js');
const client = new Discord.Client();
const { prefix, token, logsChannel } = require('./config.json');

client.once('ready', () => {
    console.log('I am alive!');
});

// Messages log
client.on('message', message => {
    // Function
    function isEmpty(collection) {
        for(var arg in collection) {
            if(collection.hasOwnProperty(arg))
                return false;
        }
        return true;
    }
    // Logs
    if(message.author.bot) return;
    let username = message.author.tag;
    let channel = message.channel.name;
    let server = message.channel.guild;
    var serverAvatarURL = message.guild.iconURL;
    var attachment = (message.attachments).array();
    if(isEmpty(attachment)) {
        var img = "";
    } else {
        var img = attachment[0].url;
    }
    let embed_send = new Discord.RichEmbed()
        .setAuthor(username, message.author.avatarURL)
        .setColor('23c115')
        .setTitle("Message sent!")
        .setDescription(message.content + " " + img)
        .setImage(img)
        .setFooter("#" + channel)
        .setTimestamp();
    client.channels.get(logsChannel).send(embed_send);
});

// Message edit log
client.on("messageUpdate", async(oldMessage, newMessage) => {
    // Function
    function isEmpty(collection) {
        for(var arg in collection) {
            if(collection.hasOwnProperty(arg))
                return false;
        }
        return true;
    }
    // Logs
    if (oldMessage.content === newMessage.content) {
        return;
    }

    var attachment = (oldMessage.attachments).array();
    if(isEmpty(attachment)) {
        var img = "";
    } else {
        var img = attachment[0].url;
    }

    let embed_edit = new Discord.RichEmbed()
        .setAuthor(oldMessage.author.tag, oldMessage.author.avatarURL)
        .setColor('2615c1')
        .setTitle("Message edited!")
        .addField("Old", oldMessage.content + " " + img, true)
        .addField("New", newMessage.content + " " + img, true)
        .setFooter("#" + oldMessage.channel.name)
        .setTimestamp();
    client.channels.get(logsChannel).send(embed_edit);
});

// Message delete log
client.on("messageDelete", async message => {
    // Function
    function isEmpty(collection) {
        for(var arg in collection) {
            if(collection.hasOwnProperty(arg))
                return false;
        }
        return true;
    }
    // Logs
    var attachment = (message.attachments).array();
    if(isEmpty(attachment)) {
        var img = "";
    } else {
        var img = attachment[0].url;
    }

    let embed_delete = new Discord.RichEmbed()
    .setAuthor(message.author.tag, message.author.avatarURL)
    .setColor('c11515')
    .setTitle("Message deleted!")
    .setDescription(message.content + " " + img)
    .setImage(img)
    .setFooter("#" + message.channel.name)
    .setTimestamp();    
    client.channels.get(logsChannel).send(embed_delete);
});

client.login(token);

共有2个答案

宦飞
2023-03-14

. finch()返回一个Promise。
因此,您需要等待的结果。然后()

在代码中(假设logsChannel是一个ID):

client.channels
    .fetch(logsChannel)
    .then(fetchedChannel => fetchedChannel.send(embed_delete));

目前,您需要更新所有。获取es

齐弘业
2023-03-14

正如NullDev所提到的,. finch()返回一个promise,因此需要首先解析它。您可以使用. so(). cat()方法或async/wait

使用。然后()。catch()

client.channels
  .fetch(logsChannel)
  .then((ch) => ch.send(embed_send))
  .catch(console.error);

async/wait相同:

try {
  (await client.channels.fetch(logsChannel)).send(embed);
} catch (error) {
  console.log(error);
}

如果您有一个函数(如isEmpty)在三个不同的处理程序中使用,那么您可以将其移出,只定义一次。虽然你根本不需要这个<代码>消息。附件返回邮件中附件的集合。集合有一个。sizeaccessor属性,返回集合中的元素数。

检查是否有附件与检查其大小一样简单:消息。附件。大小

集合还有一个获取此集合中第一个值的. first()方法。这意味着您可以像这样获取第一个附件的URL:message.attachments.first(). url

另一个错误是消息。著者avatarURL将不作为工作。avatarURL()是一个方法,因此您应该调用它。您可能会使用displayAvatarURL(),因为如果用户没有任何头像,它会返回用户的默认头像。

您可以在下面找到包含所有这些更改的代码:

const Discord = require('discord.js');
const client = new Discord.Client();
const { prefix, token, logsChannel } = require('./config.json');

client.once('ready', () => {
  console.log('I am alive!');
});

client.on('message', async (message) => {
  if (message.author.bot) return;
  let username = message.author.tag;
  let channel = message.channel.name;
  let img = message.attachments.size > 0 ? message.attachments.first().url : '';

  let embed = new Discord.MessageEmbed()
    .setAuthor(username, message.author.displayAvatarURL())
    .setColor('23c115')
    .setTitle('Message sent!')
    .setDescription(message.content + ' ' + img)
    .setImage(img)
    .setFooter('#' + channel)
    .setTimestamp();

  try {
    let log = await client.channels.fetch(logsChannel);
    log.send(embed);
  } catch (error) {
    console.log(error);
  }
});

client.on('messageUpdate', async (oldMessage, newMessage) => {
  if (oldMessage.content === newMessage.content) return;

  let img =
    oldMessage.attachments.size > 0 ? oldMessage.attachments.first().url : '';

  let embed = new Discord.MessageEmbed()
    .setAuthor(oldMessage.author.tag, oldMessage.author.displayAvatarURL())
    .setColor('2615c1')
    .setTitle('Message edited!')
    .addField('Old', oldMessage.content + ' ' + img, true)
    .addField('New', newMessage.content + ' ' + img, true)
    .setFooter('#' + oldMessage.channel.name)
    .setTimestamp();

  try {
    let log = await client.channels.fetch(logsChannel);
    log.send(embed);
  } catch (error) {
    console.log(error);
  }
});

client.on('messageDelete', async (message) => {
  let img = message.attachments.size > 0 ? message.attachments.first().url : '';

  let embed = new Discord.MessageEmbed()
    .setAuthor(message.author.tag, message.author.displayAvatarURL())
    .setColor('c11515')
    .setTitle('Message deleted!')
    .setDescription(message.content + ' ' + img)
    .setImage(img)
    .setFooter('#' + message.channel.name)
    .setTimestamp();

  try {
    let log = await client.channels.fetch(logsChannel);
    log.send(embed);
  } catch (error) {
    console.log(error);
  }
});

client.login(token);

 类似资料:
  • 我想更新表中几行的主键。如果所有行都已更新,则键将再次是唯一的,但第一行的更新会导致与第二行的键发生临时冲突。有没有优雅的方法来解决这个问题? 例子: 错误:重复的键值违反了唯一约束“pk_erichtest”

  • 我正在上Java课程的第三周。我正在做一个下星期要交的课堂作业。使用控制台作为输出,我可以毫无问题地完成分配,这是可以接受的。然而,教授也建议我们研究JTextArea,并考虑将其用于我们的程序输出。 我从一个教程中找到了一些代码,并且能够至少得到一个文本块来显示我要显示的第一行文本。但是在我编写实际程序时,我需要随着程序的进展继续向文本块添加额外的行。

  • 需要在 SQL 中将主键列更新为自动递增 我越来越不犯错, 关键字“身份”附近的语法不正确。

  • 问题内容: 最近,我被分配创建拍卖系统的任务。在我的工作中,我遇到了无数次由于列名不明确而导致包含联接的SQL查询无法执行的情况。考虑以下(简化的)拍卖表结构: 表: (创建拍卖的用户的ID) 表: (添加项目的用户的ID) (有该物品的拍卖的ID) (初始价格) 表: 表: (出价的用户的ID) (已提高价格的项目) (优惠价格) 如您所见,有许多列具有冲突的名称。连接这些表需要采取一些措施来消

  • 考虑这个例子,其中主应用程序是两个模块的消费者:一个提供电子邮件服务,另一个提供日志服务。 app/email/email.service.ts app/email/email.module.ts providers: [ EmailService ], }) export class EmailModule { } 电子邮件服务api需要一些由字符串api-config标识的配置设置,由DI

  • 我使用SWING API编写了一个GUI。 我有一组表单,每个表单都帮助用户创建预定义类型的对象。完成后,用户通过单击JButton确认创建。 我得到了一个遵循单例模式的类(DataManager)。此外,该类遵循观察者和工厂模式。DataManager是一个可观察的对象。观察到的数据格式如下: DataManager类包含一组方法,用于创建对象的预定义类型<示例: 其中一种形式是观察者对象,它观