【问题标题】:Discord Interprocess Communication - Read MessagesDiscord 进程间通信 - 阅读消息
【发布时间】:2021-07-24 02:48:24
【问题描述】:

我想遵守 TOS,但我遇到了困难。我在无法放置机器人帐户的付费服务器中。我只是想在我的应用程序中使用消息内容(目前在 python 中)。我能做些什么?我可以编写一个钩子来使用来自 GUI 或 Web 客户端的消息吗?似乎不支持我想做的事情。有什么想法吗?

其他人表示您显然可以使用 ipc 和 messages.read 范围或 RPC 来接收消息,但我不知道有哪些资源可用于挂钩并获取来自服务器的消息内容。

【问题讨论】:

    标签: discord discord.js ipc rpc discord-jda


    【解决方案1】:

    有多种方法可以从客户端读取消息。您可以将 Discord API 与您帐户的令牌一起使用,但这是Discord ToS 不允许的,因此是可禁止的(自我机器人)。另一种方法是使用Discord IPC

    Discord IPC 允许您使用命名管道与 Discord 客户端通信。默认名称为discord-ipc-0。您需要一个 Discord 应用程序才能使用它。

    IPC 协议使用与 RPC 相同的协议,记录在 Discord Developer Portal 上。您还可以在discord-rpc official repo 上找到有关 IPC 协议的更多信息。

    简单地说,你通过管道发送的数据包就是这样序列化的:

    uint32 opcode
    uint32 length
    byte[length] jsonData
    

    数据是一个 JSON 编码的对象,带有一个唯一的 nonce 参数,该参数会在答案中返回,cmd 参数用于您要使用的命令以及可选的 argsevt

    您可能会对 AUTHORIZEAUTHENTICATEGET_CHANNELSUBSCRIBE 命令感兴趣。所以我将在这里解释这四个命令。

    但首先,您需要连接到 IPC 并进行握手。这是通过发送带有操作码 0、您的 client_id 和协议版本的消息来完成的。 JSON 对象应如下所示:

    {
        "v": 1,
        "client_id": 332269999912132097
    }
    

    连接后,您应该会收到包含用户信息的DISPATCH 响应。您从此时发送的每条消息都应使用 操作码 1

    现在,您需要发送 AUTHORIZE 命令 该命令允许您向具有指定 范围 的客户端询问 OAuth2 代码,这将允许您使用 AUTHENTICATE 命令。在这里,您需要 rpcmessages.read 范围。它应该是这样的:

    {
        "nonce": "be9a6de3-31d0-4767-a8e9-4818c5690015",
        "cmd": "AUTHORIZE",
        "args": {
            "client_id": 332269999912132097,
            "scopes": "rpc messages.read"
        }
    }
    

    请注意,您的应用程序需要一个重定向 uri 才能使用。

    客户应该得到一个提示。如果他接受,那么您的应用程序将收到一个 oauth2 代码,您可以使用该代码进行身份验证。 OAuth2 流程在Discord Developer Portal 上有说明。

    使用代码、您的客户端 ID、客户端密码和重定向 uri/oauth2/token 发出请求后,您应该会获得一个 访问令牌,您可以使用 AUTHENTICATE 命令进行身份验证。它应该是这样的:

    {
        "nonce": "5dc0c062-98c6-47a0-8922-bbb52e9d6afa",
        "cmd": "AUTHENTICATE",
        "args": {
            "access_token": "CZhtkLDpNYXgPH9Ml6shqh2OwykChw"
        }
    }
    

    如果身份验证成功,您应该会收到将evt 设置为null、应用程序信息和用户信息的响应。

    此时,您已通过身份验证,您可以通过使用 GET_CHANNEL 命令 获取最后一条消息并订阅 MESSAGE_CREATE 事件 来读取消息新消息发送时。这些都记录在Developer Portal

    【讨论】:

    • 这是我能找到的关于 Discord IPC 协议的唯一信息来源。非常感谢。感谢您的回答,我能够为 Qt 制作这个 Discord IPC 库:github.com/CZDanol/QtDiscordIPC
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2021-06-25
    • 1970-01-01
    • 2018-01-19
    • 2014-01-17
    • 1970-01-01
    相关资源
    最近更新 更多