Как переделать код из aiogram на Telebot?

Рейтинг: 0Ответов: 2Опубликовано: 11.03.2023

Подскажите как переделать код, который писал и он работает c aiogram, но проблема в том, что хостинг мой не устанавливал нужную версию Python. У них версия 3.6, а нужно не менее 7. Думаю Telebot поможет решить проблему, но я не знаю как сделать этот код для Telebot. Вот часть кода, которую переписать бы под Telebot^

@dp.message_handler(commands=['1'])     # /1 Старт бота
async def hello(message: types.Message):
    await bot.send_message(message.chat.id, 'str')


async def jokes():
    for i in range(7):
        await asyncio.sleep(60) # выдавать результат каждые 60 сек 
        await bot.send_message(-1001865623196, list_of_jokes[0], disable_notification=True)
        del list_of_jokes[0]     # удалить полученный результат, чтоб потом получить новый


if __name__ == "__main__":
    loop = asyncio.get_event_loop()  # зациклить поиск результата
    loop.create_task(jokes())
    executor.start_polling(dp)

Ответы

▲ 1Принят

Вроде так должно работать

import telebot
import time

bot = telebot.TeleBot('YOUR_TELEGRAM_BOT_TOKEN')

@bot.message_handler(commands=['1'])
def hello(message):
    bot.send_message(message.chat.id, 'str')

def jokes():
    for i in range(7):
        time.sleep(60) # выдавать результат каждые 60 сек 
        bot.send_message(-1001865623196, list_of_jokes[0], disable_notification=True)
        del list_of_jokes[0]     # удалить полученный результат, чтоб потом получить новый

if __name__ == "__main__":
    loop = asyncio.get_event_loop()  # зациклить поиск результата
    loop.create_task(jokes())
    bot.polling(none_stop=True)
▲ 0

Пока писал в ответ Max Watson, обнаружил, что был не внимателен и создал проект с интерпритатором Python3.11. Изменил интерпритатор на 3.6 и код посыпался. PyCharm в коде ошибок не видит, но при запуске кода сразу выскакивают ошибки:

 Traceback (most recent call last):
File "E:\pythonProjects\BotAnekdotTelebot2\main.py", line 1, in <module>
    import telebot
  File "C:\Users\alexr\venv\lib\site-packages\telebot\__init__.py", line 13, in <module>
    import telebot.util
  File "C:\Users\alexr\venv\lib\site-packages\telebot\util.py", line 14, in <module>
    from telebot import types
  File "C:\Users\alexr\venv\lib\site-packages\telebot\types.py", line 2
    from __future__ import annotations
    ^
SyntaxError: future feature annotations is not defined

Я так понимаю не получается импортировать Телебот. хотя его и остальное я установил в проект с помощью pip install .... Приведу полный код, который запустил по ошибке в версии 3.11 и он работал.

import telebot
import asyncio                
import requests
import random
import logging
import time
from conf import API_KEY
from bs4 import BeautifulSoup as b

logging.basicConfig(level=logging.INFO)
bot = telebot.TeleBot(API_KEY)                        
URL_UTR = ['https://anekdotov.net/ancomp/', 'https://anekdotov.net/anekdot/week/',
           'https://anekdotov.net/anekdot/blonde/', 'https://anekdotov.net/anekdot/family/',
           'https://anekdotov.net/anekdot/today/', 'https://anekdotov.net/intim/', 'https://anekdotov.net/anekdot/gai/',
           'https://anekdotov.net/anwar/', 'https://anekdotov.net/anekdot/narkom/', 'https://anekdotov.net',
           'https://anekdotov.net/vovochka/', 'https://anekdotov.net/anekdot/vk/', 'https://anekdotov.net/anekdot/skazka/']
URL = random.choice(URL_UTR)


def parser(url):
    r = requests.get(URL)
    soup = b(r.text, 'html.parser')
    anekantavada = soup.find_all('div', class_='anekdot')
    return [c.text for c in anekantavada]


list_of_jokes = parser(URL)
random.shuffle(list_of_jokes)



@bot.message_handler(commands=['1'])     # /1 Старт бота
def hello(message):
    bot.send_message(message.chat.id, 'str')


def jokes():
    for i in range(3):
        time.sleep(10)
        bot.send_message(-1001584223752, list_of_jokes[0], disable_notification=True)
        del list_of_jokes[0]


if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.create_task(jokes())
    bot.polling(none_stop=True)