Selfbot 的 Discord API“软禁令”?它只能读取自己的消息

时间:2021-04-30 19:00:10

标签: discord discord.py

所以今天,突然间,我的 Discord Selfbot 停止了工作。它已经运行了数周没有任何问题。它所做的只是监控来自其他渠道的机器人警报,并在满足某些条件时通知我。

基本上问题是当我 print(message.content) 得到空字符串,而当我 print(message.embeds) 得到一个空列表。对于不是我自己发送的任何消息,都会发生这种情况。基本上我可以从任何频道拉取任何消息,但如果它不是我发送的,我会看到它是空的。我仍然可以print(message)查看其 ID、作者等,但无法检索内容/嵌入。

我认为这是 Discord API 的某种软禁令(帐户没有收到任何警告并且正常工作),但后来尝试创建一个新帐户并遇到了同样的问题。我很困惑,无法找出问题的原因......除非他们为每个人更改了 API。

4 个答案:

答案 0 :(得分:5)

每个人的问题的答案:

2021 年 4 月 30 日,discord 进行了一些更改,中断了接收消息内容并仅嵌入(可能更多)到 selfbot 上。如果您遇到此问题,那么您使用的是 selfbot,它违反了 discord TOS……它也被 discord.py 自 1.7 版以来弃用,并且不会获得支持。如果您需要支持,您需要更改为真正的机器人

答案 1 :(得分:4)

过去几周我一直在玩这个,并使用互联网上的技巧和想法,我为自我机器人创建了 Discord.py 的补丁版本。

看来您需要做几件事才能让 message.contentmessage.embeds 再次工作:

  • 禁用所有意图
  • 编辑发送到 Discord 的 IDENTIFY 数据包

我的 fork 完成了所有这些工作,同时混淆了用户代理和其他一些事情。

检查自述文件是否有更改 + 积分。

链接:GitHubPyPi

答案 2 :(得分:2)

事实证明它对我也不起作用,我认为它起作用 因为我之前没有测试过,只使用了历史记录或者我自己作为用户。

一种解决方法是使用 channel.history 代替它返回的消息 支持 .content 和类似内容。

可能有类似的东西

@bot.event
async def on_message(message):
    async for message in message.channel.history(limit=1):
        print(message.content)

我也尝试过(严重地)让 discord.py 总是从历史中获取它,这似乎对我有用。 (对于 v1.x)

From cbbd51bf17bb19ea4835365e08266d06a27c1459 Mon Sep 17 00:00:00 2001
From: Example User <user@example.com>
Date: Fri, 7 May 2021 13:37:50 +0300
Subject: [PATCH] add workaround for on_message on self bots

Recently, now the messages that self bots get in events are broken.
In the case of on_message, .content and .embeds don't work.

However, this isn't the case if the message is retrieved with
channel.history()

This workarounds the issue for on_message by retrieving it from history
always

NOTE: I made the parse call async, didnt seem to break anything (yet)
---
 discord/gateway.py | 6 +++++-
 discord/state.py   | 9 ++++++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/discord/gateway.py b/discord/gateway.py
index 210a8822..019693db 100644
--- a/discord/gateway.py
+++ b/discord/gateway.py
@@ -30,6 +30,7 @@ import concurrent.futures
 import json
 import logging
 import struct
+import inspect
 import sys
 import time
 import threading
@@ -506,7 +507,10 @@ class DiscordWebSocket:
         except KeyError:
             log.debug('Unknown event %s.', event)
         else:
-            func(data)
+            if inspect.iscoroutinefunction(func):
+                await func(data)
+            else:
+                func(data)
 
         # remove the dispatched listeners
         removed = []
diff --git a/discord/state.py b/discord/state.py
index da1212c1..7c713e39 100644
--- a/discord/state.py
+++ b/discord/state.py
@@ -485,9 +485,16 @@ class ConnectionState:
     def parse_resumed(self, data):
         self.dispatch('resumed')
 
-    def parse_message_create(self, data):
+    async def parse_message_create(self, data):
         channel, _ = self._get_guild_channel(data)
         message = Message(channel=channel, data=data, state=self)
+        # This is a workaround for messages not working on self bots
+        async for temp_msg in message.channel.history(limit=1):
+            if temp_msg.id != message.id:
+                log.warning("retrieved on_message from history is not correct one")
+                break
+            
+            message = temp_msg
         self.dispatch('message', message)
         if self._messages is not None:
             self._messages.append(message)
-- 
2.30.2

编辑:现在看到别人的回答

答案 3 :(得分:0)

有解决此问题的 Node.js 模块 (discord.js-self)