【发布时间】:2021-03-24 19:20:39
【问题描述】:
我在谷歌上搜索了一下,但我找不到真正的答案,因为分片似乎不是一个非常流行的论点,那么我们来了。
我正在尝试在我的机器人中处理分片,但我遇到了问题。我有接受消息作为参数的自定义事件,我要疯了让它们与 broadcastEval 一起工作
我已经尝试过 ${message} 并且没有工作,因为它只序列化文本并且我想要对象
我已经尝试过 JSON.stringify,但由于同样的原因也无法正常工作
我有点卡住了。我正在使用 Discord JS
这是调用函数
function test2(_guild_id, _args, _message, gameInfo, _originalMessage, reaction_id){
let msg = JSON.stringify(_message);
let cmd = "command";
let args = "args";
let rights = 0;
let stringToEval = `
this.emit("SHARE_DATA", "${_message}", {
guild_id: ${_guild_id},
cmd: ${cmd},
args: ${args},
rights: ${rights}
});
`;
log.debug(stringToEval);
/*
// this is not working. I receive any sort of exceptions related to the fact
// that it is serializing the text of the message only
discordClient.shard.broadcastEval(stringToEval);
/*/
// this is working as intended
discordClient.emit("SHARE_DATA", _message, {
guild_id: _guild_id,
cmd: cmd,
args: args,
rights: rights
});
//*/
}
这是听者
client.on("SHARE_DATA", (message, support) => {
log.debug("Let's see if this shard id can be found .... it should be "+registered_shard_id);
log.debug(`received message ${message} with support ${support}`);
log.debug("we are on shard "+JSON.stringify(client.shard));
});
使用常规事件和像现在这样的单个分片应用程序,事件可以正确触发,完全没有问题,我只需添加 discordClient.emit 就可以了。 但是broadcastEval想要一个字符串,所以我需要序列化消息
编辑: 使用 msg variabe (JSON.stringified) 广播 eval 产生此错误
[DEBUG] [2020-12-14_09:58:35] [1|GodCommands]:
this.emit("SHARE_DATA", "{"channelID":"752335384037294160","deleted":false,"id":"787981855374442526","type":"DEFAULT","content":",test2","authorID":"323030704348987404","pinned":false,"tts":false,"nonce":"787981857693106176","system":false,"embeds":[],"attachments":[],"createdTimestamp":1607939914316,"editedTimestamp":null,"webhookID":null,"applicationID":null,"activity":null,"flags":0,"reference":null,"guildID":"511487725849804804","cleanContent":",test2"}", {
guild_id: 511487725849804804,
cmd: command,
args: args,
rights: 0
});
[ERROR] [2020-12-14_09:58:35] [1|RotBot]: SyntaxError: missing ) after argument list
at Client._eval (E:\Sviluppo\Swgoh\Bot\RotBot2\node_modules\discord.js\src\client\Client.js:391:17)
at ShardClientUtil._handleMessage (E:\Sviluppo\Swgoh\Bot\RotBot2\node_modules\discord.js\src\sharding\ShardClientUtil.js:185:82)
at process.emit (events.js:326:22)
at emit (internal/child_process.js:906:12)
at processTicksAndRejections (internal/process/task_queues.js:81:21)
【问题讨论】:
-
`this.emit("SHARE_DATA", ${msg}, {` 工作吗?
-
@PLASMAchicken 很遗憾没有,我在运行时收到错误
-
在编辑中你使用的是 ${msg} 还是 "${msg}"?
-
@PLASMAchicken 抱歉,我实际上使用了完全不同的策略。我想我都试过了
标签: javascript discord.js sharding