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)
Ejemplo n.º 2
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)
Ejemplo n.º 3
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)
Ejemplo n.º 4
0
def main():
    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',
    )

    ctx = context.Context(args.config, os.environ)

    dp = aiogram.Dispatcher(ctx.bot)
    _register_handlers(ctx, dp)

    ctx.aio_loop.create_task(_periodic_main(ctx))
    aiogram.executor.start_polling(dp, skip_updates=True)
Ejemplo n.º 5
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)
Ejemplo n.º 6
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)
Ejemplo n.º 7
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=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": "",
Ejemplo n.º 8
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")
Ejemplo n.º 9
0
def _create_dispatcher(bot: aiogram.Bot):
    storage = aiogram.contrib.fsm_storage.memory.MemoryStorage()
    return aiogram.Dispatcher(bot, storage=storage)
Ejemplo n.º 10
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)
Ejemplo n.º 11
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
Ejemplo n.º 12
0
#!/usr/bin/env python3
import aiogram as telegram
import asyncio
import logging
import os
import re

from aiohttp import web
from textwrap import dedent

TG_TOKEN = os.environ['TG_TOKEN']
PORT = os.environ.get('PORT', 8080)

bot = telegram.Bot(token=TG_TOKEN)
dispatcher = telegram.Dispatcher(bot)

subscribers = {}

repositories_full = ['nekit2-002/dummy', 'nekit2-002/dummy2']


@dispatcher.message_handler()
async def handle_message(message):
    chat = message.chat.id
    username = message['from'].username
    txt = message.text
    repositories_to_listen = []

    logging.info(f'got new TG message from {username}, chat: {chat}')

    async def do_listen(array):
Ejemplo n.º 13
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__':
Ejemplo n.º 14
0
                reply_to_message_id=reply_to_message_id,
                reply_markup=None,
            )
        return await super().send_message(
            chat_id,
            messages[-1],
            parse_mode=parse_mode,
            disable_web_page_preview=disable_web_page_preview,
            disable_notification=disable_notification,
            reply_to_message_id=reply_to_message_id,
            reply_markup=reply_markup,
        )


formatter: logging.Formatter = logging.Formatter(
    fmt=
    "%(asctime)s [%(filename)15s:%(lineno)4s - %(funcName)20s() ] - %(message)s",
    datefmt="%d-%b-%y %H:%M:%S",
)
handler_stdout: logging.Handler = logging.StreamHandler(sys.stdout)
handler_stdout.setFormatter(formatter)
handler_file: logging.Handler = logging.FileHandler(
    filename=config.LOG_FILENAME, mode="a")
handler_file.setFormatter(formatter)
logging.getLogger().setLevel(config.LOG_LEVEL)
logging.getLogger().addHandler(handler_stdout)
logging.getLogger().addHandler(handler_file)

bot = Bot(token=config.TELEGRAM_TOKEN, parse_mode="HTML")
dp = aiogram.Dispatcher(bot, storage=dbhelper.DBHelper(config.DB_FILE))
Ejemplo n.º 15
0
 def __init__(self, token: str):
     self.bot = aiogram.Bot(token)
     self.dp = aiogram.Dispatcher(self.bot)
Ejemplo n.º 16
0
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
    )
    return new_text.replace('|', ' ')
Ejemplo n.º 17
0
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()
    limit = State()

Ejemplo n.º 18
0
from data.weather_API import WeatherCheck
from data.dialog_module import AI_chatting
from data.db import UsersTable, ReminderTable
from data import Sticers as sticers
import data.keyboard as kb
import os
import aiogram
from datetime import datetime as dt
import asyncio
import logging


# ----------------------bot init------------------------ #

bot = aiogram.Bot(token=token)
dp = aiogram.Dispatcher(bot, storage=MemoryStorage())
dp.middleware.setup(LoggingMiddleware())
loop = asyncio.get_event_loop()
logging.basicConfig(filename='logs.txt', encoding='utf-8', level=logging.INFO)
logging.info('Я запустився')

path = os.path.abspath('data/Answers/tardis-isbv-a8b739ce96e6.json')
print(os.getenv("GOOGLE_APPLICATION_CREDENTIALS"))

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = path
print(os.getenv("GOOGLE_APPLICATION_CREDENTIALS"))

# --------------------other params----------------------- #

state = ''