javascript - 当有人在机器人 DMS 中输入时,如何让我的不和谐机器人在特定 channel 中输入?

标签 javascript discord discord.js bots

我希望我的 Discord 机器人在用户在 bot dms 中输入时在特定 channel 中输入,以使用户看起来像是通过机器人输入。我已经成功做到了,这样每当有人在机器人 dms 中输入时我的机器人就会开始在 channel 中输入,但当用户停止输入时它不会停止

谢谢你的帮助

我现在希望机器人以相反的方式执行此操作,这就是为什么我在代码中添加了以下几行。它还不起作用。错误消息如下: “(节点:38868)UnhandledPromiseRejectionWarning:TypeError:dmToTypeIn.startTyping不是函数”

Client.on("typingStart", async function(channel, user){
    if(user.bot){
        return;
    }

    let channelToTypeIn = Client.channels.cache.get(openTicketsByUserID[user.id].ticketID)
    if(channel.type === "dm"){
        if(openTicketsByUserID[user.id]){

            console.log("one")
            channelToTypeIn.startTyping()

        } else{
            return;
        }   
    }
    
})

新代码:

Client.on("typingStart", async function(channel, user) {

    function Sleep(milliseconds) {
        return new Promise(resolve => setTimeout(resolve, milliseconds));
    }


    if (channel.type === "dm") {

        if (openTicketsByUserID[user.id]) {
            let channelToTypeIn = Client.channels.cache.get(openTicketsByUserID[user.id].ticketID);
            channelToTypeIn.startTyping();
        }
        let fulfilled = false;
        while (!fulfilled) {
            if (!user.typingIn(user.dmChannel)) {
                let channelToTypeIn = Client.channels.cache.get(openTicketsByUserID[user.id].ticketID);
                fulfilled = true;
                channelToTypeIn.stopTyping(true);
            }
        }     
    }

↓↓↓ 尚未运行的部分 ↓↓↓

    if(openTicketsByChannelID[channel.id]){
        let dmToTypeIn = Client.users.fetch(openTicketsByChannelID[channel.id].userID)
        dmToTypeIn.startTyping();
    }
    let fulfilled = false;
    while(!fulfilled){
        if(!user.typingIn(channel)){
            let dmToTypeIn = Client.channels.get(openTicketsByChannelID[channel.id].userID)
            fulfilled = true;
            dmToTypeIn.stopTyping(true);
        }
    }

});

最佳答案

您必须检查用户是否输入 User.typingIn方法

Client.on("typingStart", async function(channel, user) {
    if (user.bot) {
        return;
    }

    let channelToTypeIn = Client.channels.cache.get(openTicketsByUserID[user.id].ticketID);
    if (channel.type === "dm") {
        if (openTicketsByUserID[user.id]) {
            channelToTypeIn.startTyping();
        }  
    }
   let fulfilled = false;
    while (!fulfilled) {
        if (!user.typingIn(user.dmChannel)) {
            fulfilled = true;
            channelToTypeIn.stopTyping(true);
        }
    } 
});

您实际上可以使用它来制作您自己的自定义事件!

Client.on("typingStart", async (channel, user) => {
    let fulfilled = false;
        while (!fulfilled) {
            if (!user.typingIn(channel)) {
                fulfilled = true;
                Client.emit("typingStop", channel, user)
            }
    }
})

并聆听

Client.on("typingStop", async (channel, user) => {
//code for when user stops typing
})

关于javascript - 当有人在机器人 DMS 中输入时,如何让我的不和谐机器人在特定 channel 中输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68693045/

相关文章:

javascript - 谷歌分析如何收集数据?

javascript - float 什么时候溢出?

javascript - 获取/监听 channel 中的新消息

javascript - 试图让一个不和谐的机器人随机选择一个用户

javascript - Discord.js UnhandledPromiseRejectionWarning : TypeError: message. guild.channels.cache.array.forEach 不是函数

c# - 来自 C# 的 javascript unicode 属性

javascript - Ajax 无法通过 readyState 1,为什么?

javascript - 通过 javascript 隐藏来自不和谐用户的消息 - 软阻止

javascript - Discord.js v12.2.0 |根据 react 添加角色

javascript - 统计文本 channel 、语音 channel 、所有 channel 和角色