Telegram бот не присылает сообщения
я делаю парсер из дискорда в телеграм (парсит с обычного аккаунта абсолютно все сообщения в нужном канале и перенаправляет их в телеграм бот в личку/канал). сам парсер работает отлично, а вот бот не отправляет ничего. ошибки в консоли не пишет, за исключением тех, что выводятся уже после отключения кода. прилагаю код:
import json
import discord
import telebot
import requests
from multiprocessing import Pool
TOKEN_TG = ''
TOKEN_DS = ''
NUM_PROCESSES = 4
MAX_TIMESTAMPS = 1000
CHANNEL_IDS = []
USER_IDS = ['']
intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)
bot = telebot.TeleBot(TOKEN_TG)
session = requests.Session()
session.headers['authorization'] = TOKEN_DS
def is_message(obj):
res = "timestamp" in obj and (
(
"embeds" in obj and
isinstance(obj["embeds"], list) and
all(["description" in x for x in obj["embeds"]])
) or
"content" in obj)
return res
def extract_timestamped_content(message) -> [str, str]:
timestamp = message["timestamp"]
content_parts = []
if ("embeds" in message):
content_parts.extend([x["description"] for x in message["embeds"]])
if ("content" in message):
content_parts.append(message["content"])
content = "\n\n".join(content_parts)
return [timestamp, content]
def get_new_contents(session: requests.Session, channel_id: str, old_timestamps: list[any]) -> list[str]:
response = session.get(
f'https://discord.com/api/v9/channels/{str(channel_id)}/messages?limit=10')
data = json.loads(response.text)
if (not isinstance(data, list)):
print(f"Server returned malformed data: {response.text}")
return []
timestamped_contents = [extract_timestamped_content(
x) for x in data if is_message(x)]
new_timestamped_contents = [
x for x in timestamped_contents if x[0] not in old_timestamps]
if len(new_timestamped_contents) == 0:
print(f"No new messages on channel {channel_id}")
return []
print(new_timestamped_contents)
old_timestamps.extend([x[0] for x in new_timestamped_contents])
return [x[1] for x in new_timestamped_contents]
def send_messages(bot: telebot.TeleBot, user_ids: list[str], payload: str):
try:
for user_id in user_ids:
bot.send_message(user_id, payload)
except KeyError:
print("Can't send")
def runner(channel_id: str):
print(f"runner on {channel_id} started")
old_timestamps = []
while True:
new_contents = get_new_contents(session, channel_id, old_timestamps)
for new_content in new_contents:
send_messages(bot, USER_IDS, new_content)
if len(old_timestamps) > MAX_TIMESTAMPS:
old_timestamps.pop(0)
time.sleep(20)
def main():
with Pool(NUM_PROCESSES) as p:
p.map(runner, CHANNEL_IDS)
if __name__ == "__main__":
main()```
Источник: Stack Overflow на русском