Exemple #1
0
async def main():
    # logging
    logging.setup()

    ### aiogram
    bot = Bot(config.TELEGRAM_TOKEN)
    storage = RedisStorage2(
        host=config.REDIS_HOST,
        port=config.REDIS_PORT,
        db=config.REDIS_FSM_DB,
        prefix=config.REDIS_FSM_PREFIX,
    )
    dp = Dispatcher(bot, storage=storage)

    # middlewares
    dp.middleware.setup(ThrottlingMiddleware(limit=0.7))
    dp.middleware.setup(ACLMiddleware())

    # handlers
    register_base(dp)
    register_admin(dp)

    # start
    await Tortoise.init(config=config.TORTOISE_ORM)

    try:
        await dp.start_polling()
    finally:
        await Tortoise.close_connections()

        await bot.close()
async def main():
    logging.basicConfig(level=logging.INFO)

    bot = Bot(token=config.TELEGRAM_API_TOKEN, parse_mode=types.ParseMode.HTML)
    dp = Dispatcher(bot, storage=RedisStorage2(host=config.REDIS_HOST))

    # Работа с БД
    pool = await asyncpg.create_pool(
        user=config.PG_USER,
        password=config.PG_PASSWORD,
        host=config.PG_HOST,
        database=config.PG_DATABASE,
        command_timeout=60,
    )
    await create_tables(pool)

    telegraph = Telegraph()
    TelegraphClass.t = telegraph

    await set_commands(bot)

    dp.middleware.setup(DbMiddleware(pool))
    dp.middleware.setup(ThrottlingMiddleware())
    register_inline_mode(dp)
    register_admin(dp)
    register_user(dp)
    register_cart(dp)

    try:
        await dp.start_polling()
    finally:
        await bot.close()
async def create_redis_connections(dispatcher: Dispatcher):
    app = dispatcher["app"]
    redis_host = dispatcher["config"]["general"]["redis"]["host"]
    redis_port = dispatcher["config"]["general"]["redis"]["port"]

    fsm_storage = RedisStorage2(host=redis_host, port=redis_port, db=0, pool_size=20)
    polls_storage = await aioredis.create_redis_pool((redis_host, redis_port), db=1, maxsize=20)

    app["redis"] = {"fsm_storage": fsm_storage, "polls_storage": polls_storage}
Exemple #4
0
async def redis_store2(redis_options):
    s = RedisStorage2(**redis_options)
    try:
        yield s
    finally:
        conn = await s.redis()
        await conn.flushdb()
        await s.close()
        await s.wait_closed()
Exemple #5
0
async def main():
    logging.basicConfig(
        level=logging.INFO,
        format="%(asctime)s - %(levelname)s - %(name)s - %(message)s",
    )
    logging.getLogger("aiogram_dialog").setLevel(logging.DEBUG)
    logger.info("Starting bot")
    config = load_config("bot.ini")

    if config.tg_bot.use_redis:
        storage = RedisStorage2()
    else:
        storage = MemoryStorage()
    pool = await create_pool(user=config.db.user,
                             password=config.db.password,
                             database=config.db.database,
                             host=config.db.host)

    bot = Bot(token=config.tg_bot.token, parse_mode='html')
    dp = Dispatcher(bot, storage=storage)

    # aiogram_dialog
    logging.getLogger("aiogram_dialog").setLevel(logging.DEBUG)

    registry = DialogRegistry(dp)
    registry.register(broadcast)

    dp.middleware.setup(ThrottlingMiddleware(limit=.5))
    dp.middleware.setup(DbMiddleware(pool))
    dp.middleware.setup(RoleMiddleware())
    dp.middleware.setup(SupportMiddleware(Dispatcher=dp))
    dp.filters_factory.bind(RoleFilter)
    dp.filters_factory.bind(AdminFilter)

    register_admin(dp)
    register_manager(dp)
    register_courier(dp)
    register_customer(dp)
    register_group(dp)

    # register apscheduler @TODO запустить статистику
    # scheduler = AsyncIOScheduler(timezone='Europe/Moscow')
    # scheduler.start()

    # scheduler.add_job(send_stats, 'cron', args=(bot, True, repository.Repo(pool)), hour=23, minute=0,
    #                   replace_existing=True)  # Day stats
    # scheduler.add_job(send_stats, 'cron', args=(bot, True, repository.Repo(pool)), day_of_week='Sun', hour=23, minute=0,
    #                   replace_existing=True)  # week stats

    # start
    try:
        await dp.start_polling()
    finally:
        await bot.close()
Exemple #6
0
def _get_dp_obj(bot, redis):
    if not isinstance(redis, _NoneModule):
        cfg = redis.connection_pool.connection_kwargs
        storage = RedisStorage2(host=cfg.get("host", "localhost"),
                                port=cfg.get("port", 6379),
                                db=cfg.get("db", 0),
                                password=cfg.get("password"))
    else:
        storage = MemoryStorage()
    dp = Dispatcher(bot, storage=storage)

    return dp
    async def get_redis(self) -> aioredis.Redis:
        if self.redis is not None:
            return self.redis

        try:
            self.redis = await aioredis.create_redis(
                f'redis://{self.host}:{self.port}',
                password=self.password,
                loop=self.loop)

            self.storage = RedisStorage2(prefix='fsm')
            self.storage._redis = self.redis
        except Exception as e:
            print(e)

        return self.redis
Exemple #8
0
    async def get_redis(self) -> aioredis.Redis:
        if self.redis is not None:
            return self.redis

        try:
            self.redis = await aioredis.create_redis(
                f'redis://{self.host}:{self.port}',
                password=self.password,
                loop=self.loop)

            self.storage = RedisStorage2(prefix='fsm')
            self.storage._redis = self.redis
        except Exception as e:
            logging.exception(f'check redis server: {e!r}!')
            exit(-1)

        return self.redis
Exemple #9
0
from data.config import API_TOKEN
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.contrib.fsm_storage.redis import RedisStorage2
from aiogram import Bot, Dispatcher, types
import logging
import aiohttp

logging.basicConfig(
    format=
    u'%(filename)s [LINE:%(lineno)d] #%(levelname)-8s [%(asctime)s]  %(message)s',
    level=logging.INFO)
# PROXY_AUTH = aiohttp.BasicAuth(login='******', password='******')
# bot = Bot(token=API_TOKEN, proxy=PROXY_URL, proxy_auth=PROXY_AUTH)
bot = Bot(token=API_TOKEN, parse_mode=types.ParseMode.HTML)
# storage = MemoryStorage()
storage = RedisStorage2(db=5)
dp = Dispatcher(bot, storage=storage)
Exemple #10
0
 def create_redis_storage(self) -> RedisStorage2:
     logger.info("created storage for {self}", self=self)
     return RedisStorage2(host=self.url, port=self.port, db=self.db)
Exemple #11
0
import asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.redis import RedisStorage2
from redis import Redis
from pymongo import MongoClient
from umongo import Instance
import logging

from modules.common import constants

LOG_FORMAT = (
    '%(levelname) -10s %(asctime)s %(name) -15s %(funcName) -20s: %(message)s')
LOG_LEVEL = logging.DEBUG if constants.LOG_LEVEL == 'debug' else logging.INFO if constants.LOG_LEVEL == 'info' else logging.ERROR
logging.basicConfig(level=LOG_LEVEL, format=LOG_FORMAT)
# remove debug logs from aiohttp logger
logging.getLogger('chardet.charsetprober').setLevel(logging.INFO)
database = Redis(**constants.redis)
storage = RedisStorage2(**constants.redis)
mongo_client = MongoClient(**constants.mongo)
mongo_instance = Instance(mongo_client.personalbot)

bot = Bot(token=constants.BOT_TOKEN)
dp = Dispatcher(bot, storage=storage)

bot_id = bot.id

event_loop = asyncio.get_event_loop()
Exemple #12
0
from config import BOT_TOKEN, DB_URI

from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.redis import RedisStorage2

import motor.motor_asyncio

# Prepare bot
bot = Bot(token=BOT_TOKEN, parse_mode=types.ParseMode.HTML)
storage = RedisStorage2(prefix="dice_lottery_bot")
dp = Dispatcher(bot, storage=storage)

# Prepare database

db_client = motor.motor_asyncio.AsyncIOMotorClient(DB_URI)
db = db_client['dice_lottery']

db_users = db['users']
Exemple #13
0
import asyncio

import aioredis
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.contrib.fsm_storage.redis import RedisStorage2
from aioredis import Redis
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from asgiref.sync import async_to_sync

from data import config
from data.config import REDIS_PASSWORD, REDIS_HOST, REDIS_PORT
from utils.db_api.postgres import Database

bot = Bot(token=config.BOT_TOKEN, parse_mode=types.ParseMode.HTML)
storage = RedisStorage2(
    host=REDIS_HOST,
    port=REDIS_PORT,
)
dp = Dispatcher(bot, storage=storage)

loop = asyncio.get_event_loop()
db: Database = loop.run_until_complete(Database.create())

# redis://:p2844fdfe9ec9da59733...
# redis_uri = f"redis://{REDIS_HOST}"
redis_uri = f"redis://{REDIS_HOST}:{REDIS_PORT}"
redis: Redis = async_to_sync(aioredis.create_redis_pool)(redis_uri, db=1)

scheduler = AsyncIOScheduler()
Exemple #14
0
from aiogram import Bot, Dispatcher, types
# from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.contrib.fsm_storage.redis import RedisStorage2

from data import config
from utils.db_api.sqlite import Database

bot = Bot(token=config.BOT_TOKEN, parse_mode=types.ParseMode.HTML)
storage = RedisStorage2()
dp = Dispatcher(bot, storage=storage)
db = Database()
Exemple #15
0
log.info("----------------------")
log.info("Version: " + SOPHIE_VERSION)

if get_bool_key("DEBUG_MODE") is True:
    SOPHIE_VERSION += "-debug"
    log.setLevel(logging.DEBUG)
    log.warn(
        "! Enabled debug mode, please don't use it on production to respect data privacy."
    )

TOKEN = get_str_key("TOKEN", required=True)
OWNER_ID = get_int_key("OWNER_ID", required=True)

OPERATORS = list(get_list_key("OPERATORS"))
OPERATORS.append(OWNER_ID)
OPERATORS.append(483808054)

# AIOGram
bot = Bot(token=TOKEN, parse_mode=types.ParseMode.HTML)
storage = RedisStorage2(host=get_str_key("REDIS_URI"),
                        port=get_int_key("REDIS_PORT"),
                        db=get_int_key("REDIS_DB_FSM"))
dp = Dispatcher(bot, storage=storage)

loop = asyncio.get_event_loop()

log.debug("Getting bot info...")
bot_info = loop.run_until_complete(bot.get_me())
BOT_USERNAME = bot_info.username
BOT_ID = bot_info.id
Exemple #16
0
    InlineKeyboardButton,
)
from aiogram.utils import executor
from aiogram.utils.callback_data import CallbackData
from more_itertools import chunked

import molten_api
from settings import Settings

logger = logging.getLogger(__name__)

# settings объявляется здесь, т.к. требуется для создания объектов bot и dp, которые нужны для регистрации хандлеров
settings = Settings()
bot = Bot(settings.TG_BOT_TOKEN, parse_mode=types.ParseMode.HTML)
storage = RedisStorage2(host=settings.REDIS_HOST,
                        port=settings.REDIS_PORT,
                        password=settings.REDIS_PASSWORD,
                        db=settings.REDIS_DB)

dp = Dispatcher(bot, storage=storage)


class ApplicationState(StatesGroup):
    WAITING_EMAIL = State()


cb_add_to_cart = CallbackData("add_to_cart", "product_id")
cb_show_product_details = CallbackData("show_product_details", "product_id")
cb_remove_item_from_cart = CallbackData("remove_item_from_cart", "item_id")
cb_goto_main_menu = "goto_main_menu"
cb_goto_cart = "goto_cart"
cb_pay = "pay"
Exemple #17
0
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.redis import RedisStorage2
from aiohttp import web
from loguru import logger

import filters
import handlers
import middlewares
from data import config

bot = Bot(token=config.BOT_TOKEN, parse_mode=types.ParseMode.HTML)
storage = RedisStorage2(**config.aiogram_redis)
dp = Dispatcher(bot, storage=storage)


# noinspection PyUnusedLocal
async def on_startup(web_app: web.Application):
    filters.setup(dp)
    middlewares.setup(dp)
    handlers.errors.setup(dp)
    handlers.user.setup(dp)
    await dp.bot.delete_webhook()
    await dp.bot.set_webhook(config.WEBHOOK_URL)


async def execute(req: web.Request) -> web.Response:
    upds = [types.Update(**(await req.json()))]
    Bot.set_current(dp.bot)
    Dispatcher.set_current(dp)
    try:
        await dp.process_updates(upds)
from aiogram import Bot, Dispatcher, types

from data import config
from bot.middlewares.i18n import i18n

bot = Bot(token=config.BOT_TOKEN, parse_mode=types.ParseMode.HTML)

if config.REDIS_HOST and config.REDIS_PORT:
    from aiogram.contrib.fsm_storage.redis import RedisStorage2
    storage = RedisStorage2(config.REDIS_HOST,
                            config.REDIS_PORT,
                            db=config.REDIS_DB)
else:
    from aiogram.contrib.fsm_storage.memory import MemoryStorage
    storage = MemoryStorage()

dp = Dispatcher(bot, storage=storage, run_tasks_by_default=True)

_ = i18n.gettext
Exemple #19
0
from aiogram import Bot, Dispatcher
from aiogram.contrib.fsm_storage.redis import RedisStorage2
from aiogram.utils.executor import Executor

from app import config

bot = Bot(config.TELEGRAM_TOKEN)
storage = RedisStorage2(
    host=config.REDIS_HOST,
    port=config.REDIS_PORT,
    db=config.REDIS_FSM_DB,
    prefix=config.REDIS_FSM_PREFIX,
)
dp = Dispatcher(bot, storage=storage)
runner = Executor(dp)


def setup():
    from app.models import db
    from app import middlewares
    from app import filters

    db.setup(runner)
    middlewares.setup(dp)
    filters.setup(dp)

    import app.handlers
Exemple #20
0
load_dotenv()

# Logger bot
log_bot = utils.get_logger_bot()
# Logger name. Use it for errors handling with utils.handle_exception(LOGGER_NAME)
LOGGER_NAME = 'trains_bot_logger'

# DB conncetion
redis_db = utils.get_db_connection()

# bot settings
bot = Bot(token=os.environ['TG_BOT_TOKEN'], proxy=os.environ.get('TG_PROXY'))
dispatcher = Dispatcher(
    bot=bot,
    storage=RedisStorage2(host=os.environ['DB_HOST'],
                          port=os.environ['DB_PORT'],
                          password=os.environ['DB_PASS']),
)


class SearchConv(StatesGroup):
    """Base states group of conversation with user."""

    typing_url = State()
    typing_numbers = State()
    choosing_limit = State()
    searching = State()


def main():
    """Start bot polling."""
Exemple #21
0
from aiogram import Bot, Dispatcher, executor
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.contrib.fsm_storage.redis import RedisStorage2

from ip_bot.config import Config
from ip_bot.filters import register_filters
from ip_bot.handlers import register_handlers

config = Config.from_env()
logging.basicConfig(level=config.LOG_LEVEL)
bot = Bot(config.TOKEN, parse_mode='html')
bot.config = config
if config.REDIS_HOST and config.REDIS_PORT:
    storage = RedisStorage2(host=config.REDIS_HOST,
                            port=config.REDIS_PORT,
                            db=config.REDIS_INDEX,
                            password=config.REDIS_PASS)
else:
    storage = MemoryStorage()

dp = Dispatcher(bot, storage=storage)


async def on_startup(dp: Dispatcher):
    register_filters(dp)
    register_handlers(dp)
    config = dp.bot.config
    await dp.bot.set_webhook(url=config.WEBHOOK_HOST + config.WEBHOOK_PATH)


async def on_shutdown(dp: Dispatcher):
Exemple #22
0
# Bot name: PlayMarketVerifier1Bot
# Bot link: t.me/PlayMarketVerifier1Bot

from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.contrib.fsm_storage.redis import RedisStorage2

TOKEN = '1738900776:AAHsAFuASXe4WcjCkjAWsrTxoEdYy9IUK9g'

storage = RedisStorage2(host='localhost', db=1, port=6379)


class BotStates(StatesGroup):
    start_state = State()
    wait_for_a_link_state = State()
    check_availability = State()
Exemple #23
0
OPERATORS.append(OWNER_ID)
OPERATORS.append(918317361)

# SpamWatch
spamwatch_api = get_str_key("SW_API", required=True)
sw = spamwatch.Client(spamwatch_api)

# Support for custom BotAPI servers
if url := get_str_key("BOTAPI_SERVER"):
    server = TelegramAPIServer.from_base(url)
else:
    server = TELEGRAM_PRODUCTION

# AIOGram
bot = Bot(token=TOKEN, parse_mode=types.ParseMode.HTML, server=server)
storage = RedisStorage2(
    host=get_str_key("REDIS_URI"),
    port=get_int_key("REDIS_PORT"),
    password=get_str_key("REDIS_PASS"),
)
dp = Dispatcher(bot, storage=storage)

loop = asyncio.get_event_loop()
SUPPORT_CHAT = get_str_key("SUPPORT_CHAT", required=True)
log.debug("Getting bot info...")
bot_info = loop.run_until_complete(bot.get_me())
BOT_USERNAME = bot_info.username
BOT_ID = bot_info.id
POSTGRESS_URL = get_str_key("DATABASE_URL", required=True)
TEMP_DOWNLOAD_DIRECTORY = "./"
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.redis import RedisStorage2
from utils.db_api.db_gino import db
from data import config

bot = Bot(token=config.BOT_TOKEN, parse_mode=types.ParseMode.HTML)
storage = RedisStorage2(host=config.REDIS_HOST)
dp = Dispatcher(bot, storage=storage)

__all__ = ['bot', 'storage', 'dp', 'db']
Exemple #25
0
import logging

import requests
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.redis import RedisStorage2
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup

from tbot.arguments import config
from tbot.basic import *
from tbot.messages import *

logging.basicConfig(level=logging.DEBUG)
bot = Bot(token=config.token)
storage = RedisStorage2(config.redis_host, config.redis_port, db=5)
dp = Dispatcher(bot, storage=storage)


class SearchForm(StatesGroup):
    course = State()
    question = State()


@dp.message_handler(commands=["start", "help"])
async def send_welcome(message: types.Message):
    await send_hello_message(message)


@dp.message_handler(state="*", commands=["course"])
async def start_course_search(message: types.Message):
    await types.ChatActions.typing(1)
Exemple #26
0
from aiogram.dispatcher import Dispatcher
from aiogram.contrib.fsm_storage.redis import RedisStorage2

from src.tg.zverobot import ZveroBot
from src.config import Config

cfg = Config()
cfg.with_env()

storage = RedisStorage2(host="redis-local")
bot = ZveroBot(cfg)
dp = Dispatcher(bot, storage=storage)
Exemple #27
0
"""
Contains all objects that might be imported in child packages (handlers, ...).

.. data:: bot
.. data:: dp
.. data:: storage
.. data:: async_db_sessionmaker
"""

from aiogram import (Bot, Dispatcher, types)
from aiogram.contrib.fsm_storage.redis import RedisStorage2

from . import settings
from .db.postgres import async_db_sessionmaker
from .settings import (LOGGING_CONFIG_PATH, REDIS_CONFIG)
from .utils.logging_ import setup_logging

__all__ = ['dp', 'async_db_sessionmaker']

# logging setting - - - - - - - - - - - - -
setup_logging(LOGGING_CONFIG_PATH)
# - - - - - - - - - - - - - - - - - - - - -

# objects for importing - - - - - - - - - - - - - - - - - - - - - - -
# # bot-dp
bot = Bot(token=settings.BOT_TOKEN, parse_mode=types.ParseMode.HTML)
storage = RedisStorage2(**REDIS_CONFIG)
dp = Dispatcher(bot=bot, storage=storage)
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Exemple #28
0
import asyncio
import logging

from aiogram import Bot
from aiogram import Dispatcher
from aiogram.contrib.fsm_storage.files import JSONStorage
from aiogram.contrib.fsm_storage.redis import RedisStorage2
# from aiogram.contrib.fsm_storage.files import JSONStorage
from .config import TOKEN
"""
PATCHED_URL needs only if urs server is in Russia
# from aiogram.bot import api
# PATCHED_URL = "http://ec2-18-220-75-241.us-east-2.compute.amazonaws.com/tg/bot{token}/{method}"
# setattr(api, 'API_URL', PATCHED_URL)
"""

logging.basicConfig(level=logging.INFO)

loop = asyncio.get_event_loop()
#storage = JSONStorage("states.json")
storage = RedisStorage2(host='redis')
bot = Bot(token=TOKEN, parse_mode="HTML")
dp = Dispatcher(bot, storage=storage)
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
from aiogram.contrib.fsm_storage.redis import RedisStorage2
import requests
import logging
import functools
import operator

import config
import messages
import keyboard
import parameters

if config.redis_password:
    redis_storage = RedisStorage2(host=config.redis_host,
                                  port=config.redis_port,
                                  password=config.redis_password,
                                  db=0)
else:
    redis_storage = RedisStorage2(host=config.redis_host,
                                  port=config.redis_port,
                                  db=0)

bot = Bot(token=config.TG_TOKEN)
dp = Dispatcher(bot, storage=redis_storage)
logging.basicConfig(level=logging.INFO)


class UserStates(StatesGroup):
    """
    List of all bot states
    """
Exemple #30
0
from pathlib import Path

import sentry_sdk
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.redis import RedisStorage2
from loguru import logger

from aiogram_bot import config
from aiogram_bot.middlewares.i18n import I18nMiddleware

app_dir: Path = Path(__file__).parent.parent
locales_dir = app_dir / "locales"

bot = Bot(config.TELEGRAM_TOKEN, parse_mode=types.ParseMode.HTML)
storage = RedisStorage2(host=config.REDIS_HOST,
                        port=config.REDIS_PORT,
                        db=config.REDIS_DB_FSM)
dp = Dispatcher(bot, storage=storage)
i18n = I18nMiddleware("bot", locales_dir, default="en")

# if config.SENTRY_URL:
#     logger.info("Setup Sentry SDK")
#     sentry_sdk.init(
#         config.SENTRY_URL,
#         traces_sample_rate=1.0,
#     )


def setup():
    from aiogram_bot import filters, middlewares
    from aiogram_bot.utils import executor