首页 > 解决方案 > 如何从特定用户名而不是 ID 中删除某些消息

问题描述

twitchClient.on('timeout', async (channel, username, user, reason, duration) => {

    discordClient.on('message', async (message, messages) => {
        async function deleteMessage() {
            await discordClient.channels.cache.get("901568598538063932")
            .messages.fetch({limit: null})
            .then(message.delete(messages.first(user["display-name"]).author.name))
        }
        await deleteMessage()
    })
        
    async function sendMessage() {
        const request = new XMLHttpRequest();
        request.open("POST", "API url");
        
        request.setRequestHeader('Content-type', 'application/json');

        const users = { 
        username: "User Timed Out",
        avatar_url: 'https://i.imgur.com/GUrbNsB.jpg',
        content: `**${username} has been timed out for ${duration} seconds.**`
        }
        request.send(JSON.stringify(users));
    }

    await sendMessage()
});

我有这个用于 twitch 聊天的代码以在不和谐中同步,我想在 twitch 上的事件超时时执行我希望它删除频道上某个名称的消息是否有可能没有 ID 我迷失了如何做到这一点可以删除最后一条消息,但不能删除来自特定用户的消息,而且我只有一个 webhook,所以所有用户名的 id 都相同

TypeError:无法读取未定义的属性(读取“第一”)

标签: discorddiscord.js

解决方案


注意:此代码适用于 Discord.js v13.3.0


如错误所述,您正在尝试访问一个名为messages. 这是因为您没有在then()参数中定义它,您立即进入回调。

then()是一个允许您提供要添加的参数的函数。您可以简单地将消息集合作为一个变量调用messages,并相应地将其传递给回调。

// DON'T do this
messages.fetch({limit: null})
            .then(message.delete(messages.first(user["display-name"]).author.name))

// DO this
messages.fetch({limit: null})
            .then((messages) => message.delete(messages.first(user["display-name"]).author.name))

推荐阅读