【问题标题】:`on_typing` event not working on self bot discord.py [duplicate]`on_typing`事件在self bot discord.py上不起作用[重复]
【发布时间】:2021-08-19 22:53:03
【问题描述】:

首先,我很确定我的问题不是由于自我机器人造成的差异而重复的,而且我可以让它整体工作。

基本上,我需要将on_typing 事件作为一个自我机器人,但它根本不会触发。

这是一个简单的例子:

import discord
from discord.ext import commands

bot = commands.Bot("example_prefix")

@bot.event
async def on_typing(channel, user, when):
    print("TYPING TRIGGERED")
    print(channel.name)
    print(user.name)

bot.run("TOKEN", bot=False)

行为是它永远不会被触发。

我尝试过的

我尝试通过在非自我机器人上测试这是否是其他问题,触发了 on_typing(在给出意图之后)。

尝试发送输入意图,即使是作为自我机器人。

强制删除意图作为自我机器人(这修复了最近出现的消息事件对于自我机器人问题为空)

不,不要发布无用的答案,说自我机器人违反 TOS 并且不使用它们。

编辑:

解决了,看答案

复制: 对于那些说这是消息内容和嵌入问题的副本的人,它不是。这是一个不同的问题,解决方案对此不起作用

【问题讨论】:

  • 如果自我机器人违反 TOS,我们也不会帮助您。
  • @ŁukaszKwieciński 不,这不是因为这是一个已解决的单独问题。基本上在发送意图之前强制删除意图并替换一些收件人和关系用户的修复适用于该问题,但不适用于此问题。而且我严重怀疑“您在这里也不会得到任何帮助”,因为另一个问题是这里人们如何关心该用例的一个明显例子,它甚至有很多要点。而且我不认为违反服务服务条款的有关功能的问题是无效的。 “永远不会工作”。
  • @ŁukaszKwieciński,其他库,如 discord.js 和 self-bot only 库确实支持 self-bots。只是 discord.py 没有。
  • @Ceres discord.py 还是可以的,只是在未发布的下一个版本 2.0 中删除了它,当前版本仍然有效,并且有很多尝试/分叉来保持它的支持
  • @Karibiusk,如果您尝试将 discord.py>1.4.2 用于自我机器人(在意图发布后),机器人根本无法正常工作,discord 停止正确响应任何用户在 4 月 30 日之后发送意图,这就是为什么您会看到 discord.py 的 软禁令,如果您使用的是旧版本,它可能会工作或只是使用分叉

标签: python-3.x discord discord.py


【解决方案1】:

我找到了一个似乎可行的解决方案。

您需要在 on_ready 触发之前将此操作码 14 有效负载发送到所有公会,以便它在自我机器人上工作。

它可以像这样与 discord.py 的补丁一起使用

From b271d0bdd7cb69b81e13f66e1c2bd74921ed194b Mon Sep 17 00:00:00 2001
From: Example User <user@example.tld>
Date: Tue, 1 Jun 2021 22:01:27 +0300
Subject: [PATCH] fix on_typing for self bots

To fix on_typing for self code it is needed to send opcode 14 to all
guilds with the required parameters. This also magically fixes the
`on_typing` to work.
---
 discord/client.py | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/discord/client.py b/discord/client.py
index 1c35fddf..ef26a3c5 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -269,6 +269,27 @@ class Client:
         await self.ws.request_sync(guilds)
 
     def _handle_ready(self):
+        for guild in self.guilds:
+            payload = {
+                "op": 14,
+                "d": {
+                    "guild_id": str(guild.id),
+                    "typing": True,
+                    "threads": False,
+                    "activities": True,
+                    "members": [],
+                    "channels": {
+                        str(guild.channels[0].id): [
+                            [
+                                0,
+                                99
+                            ]
+                        ]
+                    }
+                }
+            }
+
+            asyncio.ensure_future(self.ws.send_as_json(payload), loop=self.loop)
         self._ready.set()
 
     @property
-- 
2.30.2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2019-07-23
    • 1970-01-01
    • 2020-12-24
    • 2017-12-09
    • 2022-07-23
    相关资源
    最近更新 更多