Discord.py входит в систему несколько раз при перезапускеPython

Программы на Python
Ответить
Anonymous
 Discord.py входит в систему несколько раз при перезапуске

Сообщение Anonymous »

Я работаю над проектом, в котором клиент Discord работает в фоновом потоке для прослушивания входящих сообщений. Я заметил, что каждый раз, когда клиент останавливается и перезапускается, он входит в систему еще 1 раз, как показано ниже.
Идентификатор сеанса одинаков для каждой группы входов в систему, но различается между группами.

Код: Выделить всё

[2025-11-30 13:39:56] [INFO    ] discord.client: Logging in using static token.
[2025-11-30 13:39:56] [INFO    ] discord.http: Found user agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36, build number 472914.
[2025-11-30 13:39:57] [INFO    ] discord.gateway: Connected to Gateway (Session ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx).
Ready. 4 sessions, 0 connections, 10 relationships
Closed
[2025-11-30 13:40:05] [INFO    ] discord.client: Logging in using static token.
[2025-11-30 13:40:05] [INFO    ] discord.client: Logging in using static token.
[2025-11-30 13:40:05] [INFO    ] discord.http: Found user agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36, build number 472914.
[2025-11-30 13:40:05] [INFO    ] discord.http: Found user agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36, build number 472914.
[2025-11-30 13:40:06] [INFO    ] discord.gateway: Connected to Gateway (Session ID: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy).
[2025-11-30 13:40:06] [INFO    ] discord.gateway: Connected to Gateway (Session ID: yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy).
Ready. 4 sessions, 0 connections, 10 relationships
Closed
[2025-11-30 13:40:13] [INFO    ] discord.client: Logging in using static token.
[2025-11-30 13:40:13] [INFO    ] discord.client: Logging in using static token.
[2025-11-30 13:40:13] [INFO    ] discord.client: Logging in using static token.
[2025-11-30 13:40:13] [INFO    ] discord.http: Found user agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36, build number 472914.
[2025-11-30 13:40:13] [INFO    ] discord.http: Found user agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36, build number 472914.
[2025-11-30 13:40:13] [INFO    ] discord.http: Found user agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36, build number 472914.
[2025-11-30 13:40:14] [INFO    ] discord.gateway: Connected to Gateway (Session ID: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz).
[2025-11-30 13:40:14] [INFO    ] discord.gateway: Connected to Gateway (Session ID: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz).
[2025-11-30 13:40:14] [INFO    ] discord.gateway: Connected to Gateway (Session ID: zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz).
Ready. 4 sessions, 0 connections, 10 relationships
Closed
Ниже приведен базовый код, который я написал, чтобы проверить эту ошибку и получить приведенный выше результат. У меня установлены discord.py и discord.py-self.

Код: Выделить всё

import discord
from discord.ext import tasks
import threading
import time

USER_TOKEN = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'

class BgThread(threading.Thread):
def run(self):
self.client = self.DiscordClient()
try:
self.client.run(USER_TOKEN) # blocking
except Exception as ex:
print('The DiscordClient errored.')
print(str(type(ex)))
print(str(ex))
print(str(traceback.format_exc()))
print('Closed')

class DiscordClient(discord.Client):
def __init__(self):
super().__init__()
self.shouldStop = False

async def on_ready(self):
print('Ready.  ' + str(len(self.sessions)) + ' sessions, ' + str(len(self.connections)) + ' connections, ' + \
str(len(self.relationships)) + ' relationships')
self.checkShouldStop.start()

@tasks.loop(seconds=1.0)
async def checkShouldStop(self):
if self.shouldStop:
await self.close()

if __name__ == '__main__':
while True:
# Make and run a new background thread.
bgThread = BgThread()
bgThread.start()
time.sleep(5)

# Stop the background thread.
bgThread.client.shouldStop = True
while (bgThread.is_alive()):
time.sleep(0.5)
time.sleep(3)
Вот отфильтрованный снимок Wireshark, полученный при запуске приведенного выше кода. По сути, это фильтр (ip.src==anyOfDiscordsIPs || ip.dst==anyOfDiscordsIps) && (tcp.connection.syn || tcp.connection.fin || tls.handshake.type==1 || tls.handshake.type==2). Согласно полученному мной ответу DNS, Discord имеет 10 IP-адресов, поэтому фильтр достаточно длинный.
Захват Wireshark выглядит одинаково для каждого из трех подключений клиента Discord. Это, а также количество сеансов, которые каждый раз не увеличиваются в выводе «Готово» моей программы, говорят мне, что это, скорее всего, просто проблема с журналированием, а не настоящая проблема «многократного входа в систему». Однако я не уверен в этом выводе.
Изображение

Кто-нибудь знает, почему возникает эта ошибка? Я каждый раз создаю новый объект BgThread, поэтому каждый раз создается новый объект discord.Client.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -restarted
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»