def __init__(self, config_path, config_private_path):
     with open(config_path, encoding = 'utf-8') as json_file:
         config = json.load(json_file)
     with open(config_private_path, encoding = 'utf-8') as json_file:
         config_private = json.load(json_file)
     self.config_path      = config_path
     self.week_index       = config.get("week_index")
     self.folder           = config.get("folder")
     self.filename         = config.get("filename")
     self.lesson_end_time  = config.get("lesson_end_time")
     self.greetings        = config.get("greetings")
     self.day_of_week      = config.get("day_of_week")
     self.lessons_schedule = config.get("lessons_schedule")
     self.bot_token        = config_private.get("bot_token")
     self.db_url           = config_private.get("db_url")
     self.timetable        = dict()
     self.bot              = aiogram.Bot(self.bot_token)
     self.dp               = aiogram.Dispatcher(self.bot)
     self.xls              = XlsHandler("../{}/{}".format(
                                     self.folder,
                                     self.filename
                                 ),
                                 self.day_of_week
                             )
     self.db               = dbHandler(self.db_url)
Exemple #2
0
 async def CheckingQueue():
     """
     """
     telebot = aiogram.Bot(token=Settings.TOKEN)
     while True:
         Queue = Settings.Queue.copy()
         #   If Queue isn't empty
         if Queue:
             #   If status of document is 'Очередь'
             if Queue[0][4] == 'Очередь':
                 #   Change status to 'В работе'
                 Template.ChangeStatus()
                 #   Get content in file
                 with open(Queue[0][3], 'r') as File:
                     Content = File.read()
                 await Template.UploadFile(Queue, Content, telebot)
                 time.sleep(1)
                 FilePath = ''.join([
                     str(pathlib.Path(__file__).parents[2]),
                     '\\FileSystem\\', Queue[0][0],
                     f'\\PDF\\{Queue[0][2][:-4]}.pdf'
                 ])
                 await Template.DownloadFile(Queue, FilePath, telebot)
                 time.sleep(1)
                 #   Delete line in queue
                 Template.DeleteLineInQueue()
                 time.sleep(1)
                 #   Lowwering of queue
                 Template.LowweringOfQueue()
                 #   Read document
                 with open(FilePath, 'rb') as File:
                     #   Send document to user
                     await telebot.send_document(Queue[0][0], document=File)
         time.sleep(2)
Exemple #3
0
    def __init__(self, config_path: str, environ: Dict[str, str]):
        self.config = config.load_config(config_path, environ)
        self.db = db.Db(self.config['db_path_inside_container'])
        self.authorizer = authorizer.Authorizer(self.db, self.config)
        self.http_client = http_client.HttpClient(self.config)

        self.aio_loop = asyncio.get_event_loop()
        self.bot = aiogram.Bot(token=self.config['telegram_api_token'],
                               loop=self.aio_loop)

        print(self.config['telegram_api_token'])
async def send_notifications():
    env = read_env()
    bot = aiogram.Bot(token=env.str('TOKEN'), parse_mode='HTML')

    while True:
        async with YooMoneyExchange() as ex:
            rates = await ex.get_rates()
            await bot.send_message(
                env.str('ADMIN_CHAT'),
                '\n'.join(f'<pre>{str(el)}</pre>' for el in rates))

            await asyncio.sleep(10 * 60)
Exemple #5
0
    def __init__(self, token: str, chat_service: services.ChatService):
        self.bot = aiogram.Bot(token)
        self.dp = aiogram.Dispatcher(self.bot, storage=memory.MemoryStorage())
        self.chat_service = chat_service

        self.dp.register_message_handler(self.welcome, commands=['start'])
        self.dp.register_message_handler(self.start_set_min_price,
                                         commands=['set_min_price'])
        self.dp.register_message_handler(self.set_min_price,
                                         state=PriceState.wait_for_min_price)
        self.dp.register_message_handler(self.start_set_max_price,
                                         commands=['set_max_price'])
        self.dp.register_message_handler(self.set_max_price,
                                         state=PriceState.wait_for_max_price)
Exemple #6
0
def main():
    set_logging()

    bot = aiogram.Bot(BOT_TOKEN)
    dispatcher = aiogram.Dispatcher(bot)

    aggregator = Aggregator(rapidapi_key=RAPIDAPI_KEY)
    asyncio.run(aggregator.load_sources())
    dispatcher.loop.create_task(aggregator.update_periodically())

    communicator = Communicator(aggregator)
    register_handlers(communicator, dispatcher)

    run(dispatcher)
Exemple #7
0
def start_main_bot(library, token):
    parameter = 'w'
    directory = os.listdir('.')
    text = 'Начало записи лога ' + log_time() + '\n' + \
        'Номер главного _thread: ' + str(_thread.get_ident()) + '\n' + '-' * 50
    if log_file_name in directory:
        parameter = 'a'
        text = '\n' + '-' * 50 + '\n' + text
    file = open(log_file_name, parameter)
    file.write(text)
    file.close()
    if library == 'async':
        return aiogram.Bot(token)
    else:
        return telebot.TeleBot(token)
    def __init__(self, config_path: str, environ: Dict[str, str]):
        self.config = config.load_config(config_path, environ)
        self.authorizer = authorizer.Authorizer(self.config)
        self.share = share.Share(self.config['share_dir'])
        self.db = db.Db(self.config['db_path'])

        self.google_sheets_client = google_sheets_client.GoogleSheetsClient(
            self.config, )

        self.settings = settings.Settings(self.db)

        self.aio_loop = asyncio.get_event_loop()
        self.bot = aiogram.Bot(
            token=self.config['telegram_api_token'],
            loop=self.aio_loop,
        )
        self.bot_wrapper = bot_wrapper.BotWrapper(self.bot, self.share)
        self.dp = _create_dispatcher(self.bot)
Exemple #9
0
    def __init__(self, logger, zalgo_text, token: str):
        super().__init__(logger, zalgo_text, token)
        self.client = aiogram.Bot(token)
        self.dp = aiogram.Dispatcher(self.client)

        @self.dp.message_handler(commands=['start'])
        async def start(message: aiogram.types.Message):
            self.logger.log_to_console_and_file("Telegram: /start")
            await message.answer(
                "Hello there! Type /help to know how to use me.\n"
                "F E E L  F R E E T O  A B U S E  T H I S  W O R L D.(c)@@%!&")

        @self.dp.message_handler(commands=['help'])
        async def helper(message: aiogram.types.Message):
            self.logger.log_to_console_and_file("Telegram: /help")
            await message.answer(self.help_message)

        @self.dp.message_handler(commands=['zalgo'])
        async def zalgofy(message: aiogram.types.Message):
            self.logger.log_to_console_and_file("Telegram: /zalgo")

            source = message.get_args()
            if source:
                await message.answer(self.zalgo_text.zalgofy(source))
            else:
                await message.answer(
                    "Write text to be zalgofied after the /zalgo")

        @self.dp.message_handler(lambda message: message.chat.type == 'private'
                                 )
        async def zalgofy_pm(message: aiogram.types.Message):
            self.logger.log_to_console_and_file("Telegram: PM's")
            await message.answer(self.zalgo_text.zalgofy(message.text))

        @self.dp.inline_handler(lambda query: len(query.query) > 0)
        async def zalgofy_inline(query: aiogram.types.InlineQuery):
            self.logger.log_to_console_and_file("Telegram: Inline")
            zalgofied_text = self.zalgo_text.zalgofy(query.query)
            answer = aiogram.types.InlineQueryResultArticle(
                id='1',
                title=zalgofied_text,
                input_message_content=aiogram.types.InputTextMessageContent(
                    zalgofied_text))
            await query.answer([answer], cache_time=0)
Exemple #10
0
def init():
    evloop = asyncio.new_event_loop()
    asyncio.set_event_loop(evloop)

    logger.info("Don't forget to check proxy settings!")

    bot_extra_settings = {}
    if settings.TELEGRAM_PROXY:
        bot_extra_settings['proxy'] = settings.TELEGRAM_PROXY

    bot = aiogram.Bot(settings.MASTERMIND_BOT_CONFIG["token"], **bot_extra_settings,)

    dsp = Dispatcher(bot)
    register_handlers(dsp)

    # check connection
    me = evloop.run_until_complete(dsp.bot.me)
    logger.info(me)

    init_rpc(evloop, bot)
    executor.start_polling(dsp)
Exemple #11
0
def main():
    global Bot

    args = parse_args()

    logging.basicConfig(
        filename=args.logfile,
        format='%(asctime)s %(levelname)-8s %(message)s',
        level=logging.INFO,
        datefmt='%Y-%m-%d %H:%M:%S',
    )

    cfg = config.load_config(args.config, os.environ)

    aio_loop = asyncio.get_event_loop()

    Bot = aiogram.Bot(token=cfg['bot_token'], loop=aio_loop)
    dispatcher = aiogram.Dispatcher(Bot)

    dispatcher.register_message_handler(handle_start, commands=['start'])

    aio_loop.create_task(watch_file_changes(cfg['watched_file']))
    aiogram.executor.start_polling(dispatcher, skip_updates=True)
Exemple #12
0
Config.Load()

import logging
# import requests
# import asyncio
import aiogram
import Dialogues
import DialogueManager
import Templates
import ChatManager
import GoogleForm
import traceback

logging.basicConfig(level=logging.INFO)

bot = aiogram.Bot(token=Config.data['TELEGRAM']['TOKEN'])
dp = aiogram.Dispatcher(bot)


async def CheckUserForbidden(user,
                             message: aiogram.types.Message,
                             silence=False):
    if message.chat.type == "group":
        if "forbidden" in user and user["forbidden"]:
            if "forbidden-text" in user:
                if not silence:
                    await message.reply(
                        f'Извините, я не могу выполнить вашу команду в этом чате.\nПричина:\n\n{user["forbidden-text"]}'
                    )
            return True
    return False
Exemple #13
0

# Возвращает медиагруппу по группе ссылок
async def create_media_group(links: list[str], caption=None):
    # Создаем медиагруппу
    group = aiogram.types.MediaGroup()
    # Добавляем туда каждое изображение по ссылке, получая в i номер картинки
    for i, link in enumerate(links):
        # Если есть описание и картинка первая, то добавляем описание ей
        if caption and i == 0:
            group.attach_photo(await get_image(link), caption)
        # Иначе добавляем просто картинку
        else:
            group.attach_photo(await get_image(link))
    # Возвращаем группу
    return group


links = [
    'https://avatars.mds.yandex.net/get-zen_gallery/2369070/pub_606d6a6ebccd1a5a1ae60688_606d6acde2daae2990d36bc2/scale_720',
    'https://avatars.mds.yandex.net/get-zen_gallery/1989171/pub_606d6a6ebccd1a5a1ae60688_606d6acd01bd4224ca917f63/scale_720',
    'https://avatars.mds.yandex.net/get-zen_gallery/3129491/pub_606d6a6ebccd1a5a1ae60688_606d6acd743fae54808adb36/scale_720'
]

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    bot = aiogram.Bot(token=garrip91_TOKEN, loop=loop)
    dp = aiogram.dispatcher.Dispatcher(bot=bot)

    media = loop.run_until_complete(create_media_group(links, caption="123"))
    loop.run_until_complete(bot.send_media_group(CHANNEL_ID, media))
Exemple #14
0
    key = 'is_admin'

    def __init__(self, is_admin):
        self.is_admin = is_admin

    async def check(self, message):
        member = await bot.get_chat_member(chat_id=message.chat.id,
                                           user_id=message.from_user.id)
        return member.is_chat_admin()


KICKING = False
REPORTING = True
USERS_TO_REPORT = [410584052]
TOKEN = "753583216:AAGCRN7IcAoD0licGbqw4dvhPTjwaJNu_Vc"
bot = aiogram.Bot(token=TOKEN)
dp = aiogram.Dispatcher(bot)

dp.filters_factory.bind(MyFilter)

button_click = CallbackData("Click", "action")


def get_keyboad():
    return InlineKeyboardMarkup().row(
        InlineKeyboardButton("Click",
                             callback_data=button_click.new(action="done")))


async def check_for_old_messages(time_diff):
    messages_db = SQLmessages()
Exemple #15
0
import sys
import pathlib
sys.path.insert(0, str(pathlib.Path(__file__).parent))

from helpers import *
from models import *
from config import *
from consts import *
import aiogram
import asyncio

bot = aiogram.Bot(BOT_HASH)


async def send():
    TEST = 0
    msg = 'всем ку ескул опять забанил айпишник моего сервера, так что пока я не улажу этот вопрос с их поддержкой или не перееду на другой сервер, бот лежит🤷‍♂️'
    if not TEST:
        users = get_all_users()
        for user_id in users:
            try:
                await bot.send_message(user_id, msg, parse_mode="HTML")
            except:
                pass
    else:
        await bot.send_message(410821501, msg, parse_mode="HTML")


asyncio.run(send())
import io

import requests
import aiogram
import asyncio

from config import garrip91_TOKEN, CHANNEL_ID

from aiogram import Bot, Dispatcher, executor, filters, types

logging.basicConfig(
    format=
    u'%(filename)s [LINE:%(lineno)d] #%(levelname)-8s [%(asctime)s]  %(message)s',
    level=20)

bot = aiogram.Bot(token=garrip91_TOKEN)
dp = aiogram.dispatcher.Dispatcher(bot=bot)

# @dp.message_handler()
# async def answer_link(message: aiogram.types.Message):
# try:
# # Получение данных из интернета (байты)
# image_bytes = requests.get(message.text).content
# # Преобразование байтов в поток
# image_stream = io.BytesIO(image_bytes)
# # Преобразование потока в изображение для телеграма
# telegram_image = aiogram.types.InputFile(image_stream)

# # Отправка картинки пользователю
# await message.answer_photo(telegram_image)
# except Exception as e:
import aiogram
from aiogram.contrib.fsm_storage.memory import MemoryStorage

from src.core.settings import Settings

bot = aiogram.Bot(Settings.TOKEN)
bot.parse_mode = "HTML"
dp = aiogram.dispatcher.Dispatcher(bot, storage=MemoryStorage())
import aiogram
import asyncio
import tgdbassbot.config
import tgdbassbot.messages
import json
from tgdbassbot.downloader import SongsDownloader
import tgdbassbot.keyboards

bot = aiogram.Bot(token=tgdbassbot.config.API_TOKEN,
                  parse_mode=aiogram.types.ParseMode.HTML)
loop = asyncio.get_event_loop()
dp = aiogram.Dispatcher(bot, loop=loop)

users = {}


@dp.message_handler(commands=['start'])
async def start_message(message: aiogram.types.Message):
    if str(message.from_user.id) in users.keys():
        start_message_lang = tgdbassbot.messages.start_messages[users[str(
            message.from_user.id)]['language']]
        await bot.send_message(message.chat.id, start_message_lang)

    elif str(message.from_user.id) not in users.keys():
        keyb = tgdbassbot.keyboards.Keyboards().select_lang()
        await bot.send_message(
            message.chat.id,
            "Выбери язык\nChoose a language\nElige un idioma",
            reply_markup=keyb)
        users[str(message.from_user.id)] = {
            "language": "",
Exemple #19
0
import os
import time
from datetime import datetime as dt
from functools import wraps

import aiogram
from aiogram import types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.filters.state import StatesGroup, State
from aiogram.utils import exceptions

from creds import TELEGRAM_TOKEN, BOT_PROXY

# bot = telebot.TeleBot(TELEGRAM_TOKEN)
log = logging.getLogger('ohaioposter')
bot = aiogram.Bot(TELEGRAM_TOKEN, proxy=BOT_PROXY)
storage = MemoryStorage()

dp = aiogram.Dispatcher(bot, storage=storage)
bot.start_time = dt.fromtimestamp(time.perf_counter())
bot.users = {}
bot.paginators = {}
bot.error_msg = None


class NewNameSetup(StatesGroup):
    new_name = State()


class LimitSetup(StatesGroup):
    user = State()
Exemple #20
0
import dotenv
import aiogram
import tinydb
from aiogram import types
from aiogram.utils import executor
from loguru import logger
from tinydb import Query
from tinydb.operations import set as set_
import parse

env = dotenv.dotenv_values()

db = tinydb.TinyDB("botdb.json")

bot = aiogram.Bot(env["BOT_TOKEN"], proxy=env["PROXY"])
dp = aiogram.Dispatcher(bot)

HELP_TEXT = """Мои комманды:

`/add <имя>` - добавляет ученика в список
`/list` - показывает список учеников
`/edit "<старое_имя>" "<новое_имя>"` - изменяет имя ученика
`/delete <имя>` - удаляет ученика из списка
`/choose` - выдает случайный список учеников
"""


@dp.message_handler(commands=["help", "start"])
async def help_(message: types.Message):
    await message.reply(HELP_TEXT, parse_mode="markdown")
Exemple #21
0
import aiogram
import pathlib
import urllib
import os
import typing
import asyncio
import time

from aiogram.contrib.fsm_storage import memory

from .Settings import Settings
from .BotChecks import Checks
from .Builder import Builder

bot = aiogram.Bot(token=Settings.TOKEN)
dispatcher = aiogram.Dispatcher(bot, storage=memory.MemoryStorage())


class Template:
    def CreateKeyboardByInsert(
            Data: list, Option: str) -> aiogram.types.InlineKeyboardMarkup:
        """
        Creat InlineKeyboardMarkup.

        :param list Data: [[callback_data, text], ...],
        :param str Option: choosen type of keyboard 
        :return [InlineKeyboardMarkup, ReplyKeyboardMarkup]:
        """
        #   Check type of data and parametr
        if isinstance(Data, list) and Option == 'Inline':
            #   Create object InlineKeyboardMarkup
Exemple #22
0
import aiogram
import time
from bs4 import BeautifulSoup
import requests
import asyncio
from aiogram.types import ReplyKeyboardRemove, \
    ReplyKeyboardMarkup, KeyboardButton, \
    InlineKeyboardMarkup, InlineKeyboardButton

dayly_list = []
bot = aiogram.Bot(token='934119066:AAHSxlgxljwjZYT88lL2d7JOby_MfIc27ec')
dp = aiogram.Dispatcher(bot)

html_response = requests.get('https://yandex.ru/pogoda/staraya-russa')
soup = BeautifulSoup(html_response.text, 'html.parser')
day_parsing = soup.find('div', class_="b-page__container").find(
    'div', class_="content__row content__row_with-right-margin").find(
        'ul', class_="swiper-wrapper")


async def one_time_forecast():

    while True:
        html_response = requests.get('https://yandex.ru/pogoda/staraya-russa')
        soup = BeautifulSoup(html_response.text, 'html.parser')
        search_parsing = soup.find(
            'div', class_="temp fact__temp fact__temp_size_s").find(
                'span', class_='temp__value')
        await bot.send_message(
            chat_id=543176947,
            text='Температура в данный момент: ' +
Exemple #23
0
import aiogram as ai
import logging
import random
TOKEN = '1133381423:AAEytfr8xb5xoB9iewgDWPAwKZlMgkArW_w'

logging.basicConfig(level=logging.INFO)
bot = ai.Bot(token=TOKEN)
dp = ai.Dispatcher(bot)
menu = ai.types.ReplyKeyboardMarkup(
    keyboard=[[ai.types.KeyboardButton(text="Да")],
              [ai.types.KeyboardButton(text="Нет")]],
    resize_keyboard=True)


@dp.message_handler(commands=['start'])
async def send_mes(message: ai.types.message):
    text = "Привет, тебе " + str(random.randint(1, 100)) + "?"
    await message.answer(text, reply_markup=menu)


@dp.message_handler(ai.dispatcher.filters.Text(equals=["Да", "Нет"]))
async def ans(message: ai.types.message):
    if (message.text == "Да"):
        await message.answer("Хорошо!",
                             reply_markup=ai.types.ReplyKeyboardRemove())
    else:
        await message.answer("Ну и пошёл вон!",
                             reply_markup=ai.types.ReplyKeyboardRemove())


if __name__ == '__main__':
Exemple #24
0
import aiogram
import asyncio
import settings

from converters import convert_audio_format, text_to_speech
from helpers import (
    clean_files,
    is_valid_clean_text,
    is_valid_conversion_result,
    get_clean_text_with_fname,
    get_validated_msg_text,
    queue_task,
)
from middlewares import AccessMiddleware

bot = aiogram.Bot(token=settings.API_TOKEN)
dp = aiogram.Dispatcher(bot)
dp.middleware.setup(AccessMiddleware(settings.ACCESS_ID))  # your TG ID

logger = logging.getLogger('article_bot')
file_handler = logging.FileHandler('logs.log')
formatter = logging.Formatter('%(asctime)s %(message)s', '%Y-%m-%d %H:%M:%S')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

queue = asyncio.PriorityQueue()


@dp.message_handler(commands=['start', 'help'])
async def send_welcome(message: aiogram.types.message.Message) -> None:
    '''Welcome msg from bot on first use.'''
Exemple #25
0
 def __init__(self, token, repository):
     self.bot = aiogram.Bot(token=token)
     self.repository = repository
Exemple #26
0
import aiogram
import asyncio
import tgdbassbot.config
import tgdbassbot.messages
import json
from tgdbassbot.downloader import SongsDownloader
import tgdbassbot.keyboards

bot = aiogram.Bot(token="1615610481:AAHPlLTfaFHYBo2h9Ot4IoxDG-W8avU6wnQ",
                  parse_mode=aiogram.types.ParseMode.HTML)
loop = asyncio.get_event_loop()
dp = aiogram.Dispatcher(bot, loop=loop)

users = {}


@dp.message_handler(commands=['start'])
async def start_message(message: aiogram.types.Message):
    if message.from_user.id in users.keys():
        start_message_lang = tgdbassbot.messages.start_messages[users[
            message.from_user.id]['language']]
        await bot.send_message(message.chat.id, start_message_lang)

    elif message.from_user.id not in users.keys():
        keyb = tgdbassbot.keyboards.Keyboards().select_lang()
        await bot.send_message(
            message.chat.id,
            "Выбери язык\nChoose a language\nElige un idioma",
            reply_markup=keyb)
        users[message.from_user.id] = {
            "language": "",
Exemple #27
0
from aiogram.dispatcher import FSMContext
from aiogram.utils.executor import start_webhook
from aiogram.types import ContentType


BOT_TOKEN = os.getenv("BOT_TOKEN")
STIKER_SETS = os.getenv("STIKER_SETS").split(', ')
WORDS = os.getenv("WORDS").split(', ')
HOST = "0.0.0.0"
PORT = os.getenv("PORT")
HEROKU_APP_NAME = os.getenv("HEROKU_APP_NAME")
WEBHOOK_URL = f"https://{HEROKU_APP_NAME}.herokuapp.com/{BOT_TOKEN}"

STIKERS = list()

bot = aiogram.Bot(token=BOT_TOKEN)
state_storage = MemoryStorage()
telegram_api_dispatcher = aiogram.Dispatcher(bot=bot, storage=state_storage)


def get_with_probability(probability=10):
    return random.randint(0, 100) <= probability


def translate(text: str, target="uk"):
    text = text.replace(' ', '|')

    new_text = ts.translate_html(
        text,
        translator=ts.google,
        to_language=target
Exemple #28
0
def build_bot(app):
    # pylint: disable=unused-variable

    bot = aiogram.Bot(token=BOT_TOKEN)
    dp = aiogram.Dispatcher(bot)
    dp.middleware.setup(LoggingMiddleware())

    async def get_page(user_id, page=1):
        keyboard = aiogram.types.InlineKeyboardMarkup()

        async with get_database_connection(user_id) as db:
            async with db.execute(
                    f'SELECT question FROM questions ORDER BY id LIMIT 6 OFFSET {(page - 1) * 6}'
            ) as cursor:
                async for row in cursor:
                    keyboard.row(
                        aiogram.types.InlineKeyboardButton(
                            text=row[0], callback_data=row[0][:32]))

        keyboard.row(*[
            aiogram.types.InlineKeyboardButton(text=wrap_if(
                f'{opage * 6 - 5}–{opage * 6}', page == opage),
                                               callback_data=f'page:{opage}')
            for opage in range(1, 4)
        ])

        return keyboard

    @dp.inline_handler()
    async def search(inline_query: aiogram.types.InlineQuery):
        if not inline_query.query:
            return AnswerInlineQuery(inline_query.id, [])

        user_id = inline_query.from_user.id

        if not database_exists(user_id):
            return AnswerInlineQuery(
                inline_query.id, [],
                is_personal=True,
                cache_time=3,
                switch_pm_text='Авторизуйтесь с персональной ссылкой')

        results = []
        try:
            async with get_database_connection(user_id) as db:
                if "'" in inline_query.query:
                    print("support: hacking attempt",
                          user_id,
                          inline_query.query.encode(),
                          flush=True)
                async with db.execute(
                        'SELECT * FROM questions WHERE question LIKE \'%' +
                        inline_query.query + '%\' LIMIT 50') as cursor:
                    async for row in cursor:
                        if len(results) == 50:
                            break

                        results.append(
                            aiogram.types.InlineQueryResultArticle(
                                id=f'{user_id}-{gen_id(row)}',
                                title=row[1],
                                input_message_content=aiogram.types.
                                InputTextMessageContent(
                                    f'\u2753 *{row[1]}*\n\n\U0001F4AC {row[2]}',
                                    parse_mode='Markdown'),
                                reply_markup=aiogram.types.
                                InlineKeyboardMarkup(inline_keyboard=[[
                                    aiogram.types.InlineKeyboardButton(
                                        text='\U0001F44D Спасибо!',
                                        callback_data='like')
                                ]]),
                                description=truncate(row[2])))
        except aiosqlite.OperationalError:
            pass

        return AnswerInlineQuery(inline_query.id,
                                 results,
                                 is_personal=True,
                                 cache_time=20)

    @dp.callback_query_handler()
    async def navigate(callback_query: aiogram.types.CallbackQuery):
        user_id = callback_query.from_user.id

        if callback_query.data == 'like':
            return AnswerCallbackQuery(callback_query.id,
                                       text='Ваше мнение очень важно для нас!',
                                       show_alert=True)

        if callback_query.data.startswith('page:'):
            try:
                page = int(callback_query.data[5:])
            except ValueError:
                return AnswerCallbackQuery(callback_query.id,
                                           text='Нет такой страницы',
                                           show_alert=True)

            questions = await get_page(user_id, page)

            try:
                await bot.edit_message_text(
                    'Выберите интересующий вас вопрос:',
                    user_id,
                    callback_query.message.message_id,
                    reply_markup=questions)
            except aiogram.utils.exceptions.MessageNotModified:
                pass
        else:
            async with get_database_connection(user_id) as db:
                async with db.execute(
                        'SELECT * FROM questions WHERE question LIKE \'' +
                        callback_query.data + '%\' LIMIT 1') as cursor:
                    async for row in cursor:
                        await bot.edit_message_text(
                            f'\u2753 *{row[1]}*\n\n\U0001F4AC {row[2]}',
                            user_id,
                            callback_query.message.message_id,
                            parse_mode='Markdown',
                            reply_markup=aiogram.types.InlineKeyboardMarkup(
                                inline_keyboard=[[
                                    aiogram.types.InlineKeyboardButton(
                                        text='\U0001F44D Спасибо!',
                                        callback_data='like')
                                ]]))

        return AnswerCallbackQuery(callback_query.id)

    @dp.message_handler()
    async def echo(message: aiogram.types.Message):
        user_id = message.from_user.id

        if message.get_command() == '/start' and message.get_args() != '':
            try:
                token = message.get_args()
            except ValueError:
                return SendMessage(
                    user_id,
                    'Пожалуйста, используйте вашу персональную ссылку для входа.'
                )

            if not verify_token(token):
                return SendMessage(
                    user_id,
                    'Ваша персональная ссылка устарела. Обратитесь в центр Клиентской Поддержки.'
                )

            await init_database(user_id, token)

            text = 'Добро пожаловать в Департамент клиентской поддержки! Выберите интересующий вас вопрос:'
        else:
            text = 'К сожалению, все операторы отсутствуют. Ваш вопрос очень важен для нас, поэтому ответ на него наверняка найдётся ниже:'

        if not database_exists(user_id):
            return SendMessage(
                user_id,
                'Пожалуйста, используйте вашу персональную ссылку для входа.')

        questions = await get_page(user_id)

        return SendMessage(user_id, text, reply_markup=questions)

    async def startup(_):
        await bot.set_webhook(f'{HOST}{WEBHOOK_PATH}')

    async def shutdown(_):
        await bot.delete_webhook()

    aiogram.utils.executor.set_webhook(dp,
                                       WEBHOOK_PATH,
                                       on_startup=startup,
                                       on_shutdown=shutdown,
                                       skip_updates=True,
                                       web_app=app)
from functools import singledispatchmethod

import aiogram
from aiogram.contrib.fsm_storage.memory import MemoryStorage

from core.config import config

__all__ = ["telegram_api_dispatcher", "state_storage"]

from core.inbox.messages import DocumentMessage, TextMessage, PhotoMessage, EditTextMessage

_API_TOKEN = config["API_TOKEN"]

_bot = aiogram.Bot(token=_API_TOKEN)
state_storage = MemoryStorage()


class CustomDispatcher(aiogram.Dispatcher):
    @singledispatchmethod
    async def send(self, message):
        ...

    @send.register
    async def _send_document(self, message: DocumentMessage):
        return await self.bot.send_document(**message.get_params_to_sent())

    @send.register
    async def _send_text(self, message: TextMessage):
        return await self.bot.send_message(**message.get_params_to_sent())

    @send.register
Exemple #30
0
def readJSON(path='config.json'):
    with open(path, 'rb') as f:
        return json.load(f)
    return None


def dumpJSON(cfg, path='config.json'):
    with open(path, 'wb') as f:
        f.truncate()
        return json.dump(cfg, f)
    return None


config = readJSON()
TGBot = aiogram.Bot(token="")
TwApp = CamTweet.CamTweet()


async def poll(pollList: list):

    while (true):
        asyncio.wait()


async def _poll(search: str, ):

    if True:
        await TGBot.send_message()