Beispiel #1
0
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()
Beispiel #2
0
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"
        )
Beispiel #3
0
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')
Beispiel #4
0
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:
Beispiel #5
0
# 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(
Beispiel #7
0
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()
Beispiel #8
0
        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()
Beispiel #9
0
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)
Beispiel #10
0
        # # С помощью ключевого слова 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)"
    )
    # Записываем изменения таблицы в файл
Beispiel #11
0

# Создаем класс для представления данных из таблицы с названием, описанием, ссылкой
@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(