Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Discord.js按ID与特定用户打开DM流_Javascript_Node.js_Discord_Discord.js - Fatal编程技术网

Javascript Discord.js按ID与特定用户打开DM流

Javascript Discord.js按ID与特定用户打开DM流,javascript,node.js,discord,discord.js,Javascript,Node.js,Discord,Discord.js,是否有任何选项可以打开一个DM流或类似的内容,并使用特定的用户ID 我是什么意思 这类似于ssh终端功能,当我输入命令到bot时,如下所示: me: DM@{user.id} bot: {connection established message} /**-------------------------------------------- @ and for now, every message from me, bot will deliver to {user.id} until I

是否有任何选项可以打开一个
DM流
或类似的内容,并使用特定的用户ID

我是什么意思

这类似于ssh终端功能,当我输入命令到bot时,如下所示:

me: DM@{user.id}
bot: {connection established message}
/**--------------------------------------------
@ and for now, every message from me, bot will deliver to {user.id} until I 
@ don't send `{message_stop}` command, for example:
----------------------------------------------*/
me: "Hi, how are you?" -> client.fetchUser('user_id')
me: "Are you ok?"
me: -stop command
在每条消息的开头都不使用-prefix

或者可能实现这样的功能:

在服务器(公会)上创建一个频道,我在那里写的每一条消息都会被发送给某个用户

实际的问题是,如果可能的话,我应该如何操作才能获得这样的结果?

到目前为止,我已经编写了命令,根据每条消息乞讨中的前缀,将DMs消息发送给用户,如下所示:

me: dm@user_id: Hello!
me: dm@user_id: How are you?

也许我应该将会话数据(user.id)存储在某个地方,以帮助bot理解我只想与特定用户通信?

我在
Discord.js
Discord中收到了这个答案。所以这是可能的。我正在用它来构建我的机器人。这是我的代码:

module.exports = {
    name: 'direct',
    description: 'Ping!',
    args: true,
    execute(message, args, client) {
        const u = message.content.split(/(?<=^\S+)@/)[1];
        console.log(message.content);
        message.channel.send(`Connection established: ${message.author.id}`);
        const filter = m => m.content.includes('discord');
        const collector = message.channel.createMessageCollector(filter, {
            maxMatches: 10,
            time: 30000,
            errors: ['time']
        });

        collector.on('collect', m => {
            console.log(`${Date.now()} Collected ${m.content}`);
            client.fetchUser('user_id').then((user) => {
                return user.send(`${m.content}`);
            });
        });

        collector.on('end', collected => {
            message.channel.send(`Connection cancelled with ${message.author.id}. You send ${collected.size} messages`);
            console.log(`${Date.now()} Collected ${collected.size} items`);
            if (collected.size === 0) {
                console.log('here');
            }
        });
    }
};
module.exports={
名称:'直接',
描述:“Ping!”,
阿格斯:没错,
执行(消息、参数、客户端){
const u=message.content.split(/(?m.content.includes('discord');
const collector=message.channel.createMessageCollector(过滤器{
最大匹配数:10,
时间:30000,
错误:['time']
});
collector.on('collect',m=>{
log(`${Date.now()}收集${m.content}`);
client.fetchUser('user_id')。然后((user)=>{
返回user.send(`${m.content}`);
});
});
collector.on('end',collected=>{
message.channel.send(`使用${message.author.id}取消连接。您发送${collected.size}消息');
log(`${Date.now()}收集的${Collected.size}项`);
如果(已收集。大小===0){
console.log('here');
}
});
}
};
在本例中,您只需输入命令名(direct),然后将包含
discord
DMs的每条消息发送给用户id 10次或30秒。如果您想更改它,您可以使用参数。希望这对任何人都有帮助


另外,我非常感谢Discord.js社区的Monbrey#4502提供了这些信息。

没有DM流。你必须检查机器人看到消息时发出的事件。使用属性,查找它是否没有公会(因此它必须是DM)。使用存储的用户ID,检查所述消息是否来自该存储的用户ID。我希望这会有所帮助。正如@Steamgamer所述,您不能创建与Opus音频流相同的DM流。为了与其他用户创建DM频道,您需要运行函数
createDM()
针对用户对象。您可以通过从客户端发出的
消息
事件获取用户对象,也可以通过标记用户的命令手动调用用户对象。如文件所述,在
guildMemberAdd
事件上,您将返回一个
GuildMember
类型,您可以执行
member.createDM()
。记住这是一个承诺。@streamgamer,@Brxxn,似乎你理解错了。我问的是文字直接消息流。没有语音音频。
MessageCollector
是一个完美的解决方案。我们理解正确,我们不是在评论音频流,而是从直接消息中获得的文本。
Message收集器
s是很好的,如果消息预期是短期的,并且有预期的持续时间,但是这不是
消息
事件的限制。好吧,但是你可以
通过时间或消息计数限制
,这样你就可以收到源源不断的消息。而且,在你想要的任何时候,只要发送任何命令,就可以停止它和命令机器人。