def task_function(__name__='__main__'): if __name__ == '__main__': # Настраиваем подключение к базе данных conn = sqlite3.connect('cards.db') # Настраиваем "курсор" с помощью которого будем обращаться к БД cursor = conn.cursor() # Получаем цикл событий asyncio (это понимать не надо, я сам до конца не понимаю) loop = asyncio.get_event_loop() # Создаем бота bot = Bot(token=BOT_TOKEN) # Указываем ссылку на канал input_link = 'https://zen.yandex.ru/id/601d76de40f32972e4d8ce59?clid=101&country_code=ru' # Запрашиваем идентификатор канала по которому будем записывать статьи input_filename = 'DATA' # Создаем таблицу по идентификатору, если ее не существует cursor.execute(f"CREATE TABLE IF NOT EXISTS {input_filename} (" "id INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 1," "title TEXT NOT NULL," "desc TEXT," "url TEXT NOT NULL)") # Записываем изменения таблицы в файл conn.commit() # Получаем html с помощью функции описанной выше get_whole_page(input_link, input_filename) # Проходимся по обработанным объектам, содержащим в себе название, описание и ссылку for card_data in get_page_data(input_filename): # Проверяем есть ли ссылка в БД if cursor.execute(f"SELECT * FROM {input_filename} WHERE url=?", [card_data.url]).fetchone(): # Если ссылка есть, то ничего не делаем pass else: # Если запись новая, то отправляем в канал сообщение со статьей loop.run_until_complete( bot.send_message( CHANNEL_ID, f'<b>{card_data.title}</b>\n\n{card_data.desc or ""}\n<a href="{card_data.url}">Ссылка</a>', parse_mode='HTML')) # Ждём 3 секунды, чтобы телегграм не забанил бота за чрезмерную активность sleep(3) # Пишем в консоль, что отправили сообщение print(f"Отправлено сообщение с постом {card_data.url}") # Добавляем статью, которой в БД не было в базу, чтобы в следующий раз ее не обрабатывать cursor.execute( f"INSERT INTO {input_filename} (title, desc, url) VALUES (?, ?, ?)", [card_data.title, card_data.desc, card_data.url]) # Сохраняем изменения в базе данных conn.commit()
async def send_message_to_admins(message: str) -> None: if NOTIFICATION_BOT_TOKEN: bot = Bot(token=NOTIFICATION_BOT_TOKEN) for user in NOTIFICATION_USERS: logger.info(f"Sended notification to {user}") await bot.send_message(user, message, parse_mode='Markdown') await bot.close() else: logger.warning( f"Notificator bot token not setted. Skipping send notifications to admin" )
async def send_message_to_admins(message: str): bot = Bot(token=NOTIFICATION_BOT_TOKEN) for user in NOTIFICATION_USERS: logger.info(f"Sended notification to {user}") await bot.send_message(user, message, parse_mode='Markdown')
from aiogram.bot import Bot from aiogram.dispatcher import Dispatcher from config import TOKEN import logging from aiogram import types, executor bot = Bot(token=TOKEN) dp = Dispatcher(bot) logging.basicConfig(level=logging.INFO) @dp.callback_query_handler(lambda call: call.data in ['verified']) async def call_one(call): try: if call.data == 'verified': await bot.send_message( call.message.chat.id, 'You are now verified my friend,\nwelcome to the Ready Telegram 🎉' ) except Exception as e: print(repr(e)) @dp.message_handler(commands=['chart']) async def helo(message: types.Message): try: await bot.send_message( message.chat.id, '📈 The Ready chart is here my friend!: \nhttps://poocoin.app/tokens/0x264a603A40B7FF7B41dF141f836A38Dc93341eb3' ) except Exception as e:
# Standard library imports # Third party imports from aiogram import executor from aiogram.bot import Bot from aiogram.dispatcher import Dispatcher, storage from aiogram.types import Message, CallbackQuery, ParseMode import asyncio import uvloop from configs import BotStates, TOKEN, storage uvloop.install() loop = asyncio.get_event_loop() bot = Bot(TOKEN, loop=loop) dp = Dispatcher(bot=bot, loop=loop, storage=storage) @dp.message_handler(commands=['start'], state='*') async def start(message: Message): ''' The first function that the User interacts with. After the User pressed the /start command - he will be offered to choose a language for interaction. ''' await message.answer(text='Здравствуйте, чем могу помочь?') return await BotStates.start_state.set()
url: str # Ссылка # Создаем класс для представления данных из таблицы с названием, описанием, ссылкой @dataclass class Galleries: url: str images: list[str] # Указываем ID канала и токен бота CHANNEL_ID = CHANNEL_ID BOT_TOKEN = garrip91_TOKEN # Создаем бота bot = Bot(token=BOT_TOKEN) # Функция получения HTML-кода страницы def get_whole_page(page_link: str, filename: str): # Открываем chrome with webdriver.Chrome(executable_path="./chromedriver") as chrome: # Переходим на страницу канала в Дзене chrome.get(page_link) # Записываем положение вертикальной прокрутки страницы offset = chrome.execute_script("return window.pageYOffset;") while True: # Опускаем ползунок прокрутки до максимально нижнего состояния chrome.execute_script(
async def _main_task(params): try: bot = Bot(params['BOT_TOKEN']) msg = params['message'] chat_id = msg['chat']['id'] msg_txt = msg.get('text') print(msg) if not msg_txt: await bot.send_message(chat_id, 'Please send me url to image') return if msg_txt == '/start': await bot.send_message( chat_id, 'Send me url to image and i\'ll upload it to telegram') return if msg_txt == '/version': await bot.send_message(chat_id, 'gallery-dl version: ' + gdl_version) return cmd = cmd_from_message(msg) if cmd is not None: if cmd == 'all': # retrieve all avalibale links config.unset(("extractor", ), "image-range") elif cmd == 'p': # granular image links extraction pic_range_re = re.compile('([0-9]+)(-([0-9]+))?') pic_range_match = pic_range_re.search(msg_txt) if pic_range_match is None: await bot.send_message( chat_id, 'Wrong command, correct example: /p 3-10 manga.com/chapter1' ) return start, _, end = pic_range_match.groups() if end is None: config.set(("extractor", ), "image-range", start) elif int(start) > int(end): await bot.send_message( chat_id, 'Start number bigger then end, correct example: /p 3-10 manga.com/chapter1' ) return else: config.set(("extractor", ), "image-range", start + '-' + end) try: await handle_request(bot, chat_id, msg_txt) except NoUrlError: if msg['chat']['type'] == 'private': if cmd is not None: if cmd == 'all': await bot.send_message( chat_id, 'Wrong command, correct example: /all manga.com/chapter1' ) elif cmd == 'p': await bot.send_message( chat_id, 'Wrong command, correct example: /p 3-10 manga.com/chapter1' ) else: await bot.send_message( chat_id, 'Couldn\'t find any url in message, send me one') print('No url in message') finally: config.set(("extractor", ), "image-range", "1") except asyncio.CancelledError: try: if msg['chat']['type'] == 'private': await bot.send_message(chat_id, 'Request timeout') except TelegramAPIError as e: print(e.__class__.__name__ + ': ' + str(e)) raise except exception.NoExtractorError: try: if msg['chat']['type'] == 'private': await bot.send_message(chat_id, 'ERROR: Unsupported URL') except TelegramAPIError as e: print(e.__class__.__name__ + ': ' + str(e)) except Exception as e: try: if msg['chat']['type'] == 'private': await bot.send_message(chat_id, 'ERROR: ' + str(e)) except TelegramAPIError as e: print(e.__class__.__name__ + ': ' + str(e)) traceback.print_exc()
yield Card(title, desc, link) #def task_function(__name__='__main__'): # if __name__ == '__main__': # Настраиваем подключение к базе данных conn = sqlite3.connect('cards.db') # Настраиваем "курсор" с помощью которого будем обращаться к БД cursor = conn.cursor() # Получаем цикл событий asyncio (это понимать не надо, я сам до конца не понимаю) loop = asyncio.get_event_loop() # Создаем бота bot = Bot(token=BOT_TOKEN) # Указываем ссылку на канал input_link = 'https://zen.yandex.ru/id/601d76de40f32972e4d8ce59?clid=101&country_code=ru' # Запрашиваем идентификатор канала по которому будем записывать статьи input_filename = 'DATA' # Создаем таблицу по идентификатору, если ее не существует cursor.execute(f"CREATE TABLE IF NOT EXISTS {input_filename} (" "id INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 1," "title TEXT NOT NULL," "desc TEXT," "url TEXT NOT NULL)") # Записываем изменения таблицы в файл conn.commit()
import asyncio from aiogram.types import Message from aiogram.bot import Bot from aiogram.dispatcher import Dispatcher from aiogram.dispatcher.middlewares import BaseMiddleware from aiogram.dispatcher.webhook import SendMessage from anon_talks import config from anon_talks.integrations.botlytics import BotlyticsClient from anon_talks.models import TelegramUser from anon_talks.services import BotService bot = Bot(token=config.BOT_API_TOKEN) # Initialize bot and dispatcher dispatcher = Dispatcher(bot) @dispatcher.message_handler(commands=['start']) async def register_user(message: Message): await BotService(bot).register_user(user_id=message.from_user.id, chat_id=message.chat.id) @dispatcher.message_handler(commands=['help']) async def display_help(message: Message): return SendMessage(message.chat.id, BotService.HELP_TEXT) @dispatcher.message_handler() async def handle_custom_message(message: Message): await BotService(bot).handle_message(message)
# # С помощью ключевого слова yield мы возвращаем не сразу весь список, а элементы по очереди (оптимизация) # # Здесь мы превращаем три наши переменные в объект Card, описанный выше # yield Card(title, desc, link) ################################################################ if __name__ == '__main__': # Настраиваем подключение к базе данных conn = sqlite3.connect('cards.db') # Настраиваем "курсор" с помощью которого будем обращаться к БД cursor = conn.cursor() # Получаем цикл событий asyncio (это понимать не надо, я сам до конца не понимаю) loop = asyncio.get_event_loop() # Создаем бота bot = Bot(token=BOT_TOKEN) # Указываем ссылку на канал input_link = 'https://zen.yandex.ru/id/601d76de40f32972e4d8ce59?clid=101&country_code=ru' # Запрашиваем идентификатор канала по которому будем записывать статьи input_filename = 'DATA' # Создаем таблицу по идентификатору, если ее не существует cursor.execute( f"CREATE TABLE IF NOT EXISTS {input_filename} (" "id INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 1," "title TEXT NOT NULL," "desc TEXT," "url TEXT NOT NULL)" ) # Записываем изменения таблицы в файл
# Создаем класс для представления данных из таблицы с названием, описанием, ссылкой @dataclass() class g_Card: g_url: str # Главная ссылка ### img_url: str # Ссылка на изображение # Указываем ID канала и токен бота CHANNEL_ID = CHANNEL_ID BOT_TOKEN = garrip91_TOKEN # Создаем бота bot = Bot(token=BOT_TOKEN) # Функция получения HTML-кода страницы def get_whole_page(page_link: str, filename: str): # Открываем chrome with webdriver.Chrome(executable_path="./chromedriver") as chrome: # Переходим на страницу канала в Дзене chrome.get(page_link) # Записываем положение вертикальной прокрутки страницы offset = chrome.execute_script("return window.pageYOffset;") while True: # Опускаем ползунок прокрутки до максимально нижнего состояния chrome.execute_script(