Есть бот, который сканирует дискорд каналы на наличие сообщений с медиа, записывает айди последнего сообщения в текстовик и при получении нового сообщения - записывает его айди в текстовик вместо другого и отправляет медиафайл в телеграм канал.
Извиняюсь за такое сухое описание бота, но если будут вопросы о работе - отвечу.
Проблемы: во-первых, нельзя добавить два канала сразу же, в текстовике добавляется только одна строка с айдишником сообщения только из одного канала.
Во-вторых, в 38 строке появляется ошибка "invalid literal for int() with base 10: '' ". При повторном запуске бота, через некоторое время, показывает точно такую же ошибку, даже если изменить айди каналов.
Сам код:
import requests
import telebot
import time
import os
bot=telebot.TeleBot("Здесь токен бота в тг")
token="Юзер токен дискорда"
group_id=Айди группы, в которую отправляется медиа
admin_id=Айди пользователя в дискорде
id=["Айди", "каналов"]
def get_messages(token:str,chatid:str,howmsg:str):
headers = {
"authorization": token
}
a=requests.get(f"https://discord.com/api/v9/channels/{chatid}/messages?limit={howmsg}", headers=headers)
return a.json()
def check():
while True:
lastid = open('lastid.txt','r')
lastids = []
for line in lastid.readlines():
lastids.append(str(line.strip()).split('&'))
lastid.close()
if lastids == []:
for ch_id in id:
msg=get_messages(token,ch_id,1)
try:
lastids.append([ch_id,msg[0]['id']])
except:
lastids.append([ch_id,'0'])
for ch_id in id:
msg=reversed(get_messages(token,ch_id,50))
for j in msg:
mesid = str(j["id"])
ok = False
for i in lastids:
if int(i[0])==int(ch_id) and int(mesid)>int(i[1]):
ok=True
if ok:
if j["attachments"]==[]:
for i in j["embeds"]:
content_type = i['type']
url = i['url']
try:
requests.get(f'https://api.telegram.org/bot5467486622:AAGNd5uz-w0rJOruFKGthuKMJKcALiZOyOs/sendVideo?chat_id={group_id}&video={url}')
except:
bot.send_message(admin_id, f"Возникла ошибка при отправке или загрузки файла {filename}")
continue
if j["attachments"]!=[]:
for i in j["attachments"]:
filename='videos/'+i["filename"]
content_type = i['content_type'].split('/')[0]
response=requests.get(i["url"])
try:
if response.status_code==200:
with open(filename,'wb') as imgfile:
imgfile.write(response.content)
if content_type == "video":
bot.send_video(group_id,open(filename, 'rb'), supports_streaming=True)
else:
bot.send_photo(group_id, photo=open(filename, 'rb'))
except:
bot.send_message(admin_id, f"Возникла ошибка при отправке или загрузки файла {filename}")
continue
try:
os.remove(filename)
except:
bot.send_message(admin_id, f"Возникла ошибка при удалении файла {filename}")
continue
for i in lastids:
if i[0]==ch_id:
i[1]=mesid
f = open('lastid.txt','w')
for i in lastids:
f.writelines(i[0]+'&'+i[1]+'\n')
f.close()
time.sleep(5)
check()
Ошибка:
Скриншот фрагмента кода удалён модератором.