Задать вопрос
@B3rn4dette

Ошибка с данными. invalid literal for int() with base 10: ''?

Есть бот, который сканирует дискорд каналы на наличие сообщений с медиа, записывает айди последнего сообщения в текстовик и при получении нового сообщения - записывает его айди в текстовик вместо другого и отправляет медиафайл в телеграм канал.
Извиняюсь за такое сухое описание бота, но если будут вопросы о работе - отвечу.

Проблемы: во-первых, нельзя добавить два канала сразу же, в текстовике добавляется только одна строка с айдишником сообщения только из одного канала.
Во-вторых, в 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()


Ошибка:
Скриншот фрагмента кода удалён модератором.
  • Вопрос задан
  • 73 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
fenrir1121
@fenrir1121
Начни с документации
Вам ошибка прямым текстом говорится, что пустая строка '' не может привестись к числу.
Соответственно принтуйте и смотрите что у вас лежит в i[0], ch_id, mesid, i[1].
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Вот здесь в скобочках
if int(i[0])==int(ch_id) and int(mesid)>int(i[1]):
идет попытка кастовать строку в число десятичной системы но неудачно. Видимо строковый литерал не похож на число.

Воспроизведение подобной ошибки
>>> int("555")
555
>>> int("555x")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '555x'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы