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

Aiogram, как убрать ошибку Unclosed connector?

День добрый

Пишу небольшого бота который будет при запуске отправлять товар в канал телеграмма. То есть мне не нужно все время поддерживать сессию, а только отправлять пост (картинка + текст) в телегу 2-3 раза в день.
Сейчас код выглядит так.

from aiogram import Bot, types
import asyncio

API_TOKEN = '00000000000000000000000000'
CHANNEL_ID = -00000000000000000

bot = Bot(token=API_TOKEN, parse_mode=types.ParseMode.HTML)


async def send_good(chanel_id: int, text: str):
    await bot.send_message(chanel_id, text)


async def start_post():
    posted = False
    while not posted:
        await send_good(CHANNEL_ID, 'Some text')
        posted = True
        break

loop = asyncio.get_event_loop()
loop.run_until_complete(start_post())


При запуске я получаю ошибку, хотя текст в канал отправляется

Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x0000026709284F10>
Unclosed connector
connections: ['[(<aiohttp.client_proto.ResponseHandler object at 0x000002670928C340>, 18442.312)]']
connector: <aiohttp.connector.TCPConnector object at 0x0000026709284D90>


Я так понял это происходит из-за того что бот рассчитан на постоянное соединение и если запускаю скрипт повторно то предыдущая сессия остается открытой. Пробовал писать в конце loop.close() опять же - "вываливается" куча ошибок.
Подскажите как это обойти и еще одно, что передать картинку, подписанную ниже текстом мне нужно в bot.send_message(chanel_id, text) передавать фото 3 аргументом как текст в побитовом формате или это как то по другому можно сделать?
  • Вопрос задан
  • 6029 просмотров
Подписаться 1 Средний 6 комментариев
Пригласить эксперта
Ответы на вопрос 3
@Aleksandr_Mist
Можно так:
async def start_post():
    # ... ваш код
    s = await bot.get_session()
    await s.close()
Ответ написан
@coneenoc Автор вопроса
Если кому интересно переписал бота так

import telebot

class TelegramPost:
    TOKEN = settings.config['TOKEN']
    GROUP_ID = settings.config['GROUP_ID']
    bot = telebot.TeleBot(TOKEN, parse_mode='HTML')

    def post_channel(self, image_url, caption):
        photo = open(image_url, 'rb')
        self.bot.send_photo(self.GROUP_ID, photo=photo, caption=caption)
Ответ написан
Комментировать
@Jimroot
Можно было не переходить на другую библиотеку а почитать документацию: https://docs.aiogram.dev/en/latest/api/session/aio...

from aiogram import Bot
from aiogram.client.session.aiohttp import AiohttpSession

session = AiohttpSession()
bot = Bot('token', session=session)


Это решит вашу проблему. И да, сессию не нужно закрывать
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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