Example #1
0
def setup_routes(dp):
    handler = views.HandlerProductSubscription()

    dp.register_message_handler(handler.handle_url,
                                regexp=r'(https?://[^\s]*)',
                                state="*")
    dp.register_callback_query_handler(handler.choice_type_step,
                                       state=views.Choice.wait_type_choice,
                                       regexp=r'first_(.*)')
    dp.register_callback_query_handler(handler.choice_option_step,
                                       state=views.Choice.wait_option_choice,
                                       regexp=r'option_(.*)')
    dp.register_callback_query_handler(handler.edit_subscription,
                                       regexp=r'edit_sub_([0-9]*)',
                                       state="*")
    dp.register_callback_query_handler(handler.delete_subscription,
                                       regexp=r'delete_sub_([0-9]*)',
                                       state="*")
    dp.register_message_handler(views.commands, commands=['start'], state="*")
    dp.register_message_handler(views.supported_shops,
                                commands=['shops'],
                                state="*")
    dp.register_message_handler(views.subscriptions_user,
                                commands=['subs'],
                                state="*")

    dp.register_message_handler(
        views.manage_subscription,
        filters.RegexpCommandsFilter(regexp_commands=[r'sub_([0-9]*)']),
        state="*")
    dp.register_callback_query_handler(views.subscriptions_user,
                                       regexp=r'subs_page_([0-9]*)',
                                       state="*")
    dp.register_message_handler(views.handle_other, state="*")
Example #2
0
def setup(dp: Dispatcher):
    # Commands handlers
    dp.register_message_handler(start_message, commands='start')
    # Answers
    dp.register_message_handler(cancel_answer,
                                commands='cancel',
                                state=OrderAnswer.answer_text)
    dp.register_message_handler(
        answer_step_1,
        filters.RegexpCommandsFilter(regexp_commands=['to_([0-9]*)']),
        state='*')
    dp.register_message_handler(answer_step_2, state=OrderAnswer.answer_text)
    # Messages
    dp.register_message_handler(all_messages,
                                content_types=types.ContentType.ANY,
                                state='*')
Example #3
0
    answer_message += messages.portfolios(message.from_user)
    await bot.send_message(message.chat.id, answer_message, reply_markup=kb.cancel_kb)


""" When choosing portfolio message doesn't start with /port """
@dp.message_handler(lambda message: not message.text.startswith('/port_'), state=PaperFSM.portfolio)
async def wrong_input(message: types.Message):
    return await message.reply("Choose portfolio by clicking on /port_ command",
                               reply_markup=kb.cancel_kb)


"""
Selecting portfolio by message /port_id, id in database 'portfolios' table. Checking is portfolio owned by user.
Then choosing stock by keyboard
""" 
@dp.message_handler(filters.RegexpCommandsFilter(regexp_commands=['port_\d+$']), state=PaperFSM.portfolio)
async def paper_setportfolio_getstock(message: types.Message, state: FSMContext):
    new_paper.portfolio_id = re.search(r'\d+', message.text).group(0)
    new_paper.holder_id = message.from_user.id
    await PaperFSM.next()
    if stock.is_user_holds_portfolio(new_paper.holder_id, new_paper.portfolio_id):
        await bot.send_message(message.chat.id,
                               "Portfolio selected.\nChoose stock", reply_markup=kb.stock_kb)
    else:
        await message.reply("Choose YOUR portfolio")


""" Setting ticker """
@dp.message_handler(state=PaperFSM.stock)
async def paper_setportfolio_getticker(message: types.Message, state: FSMContext):
    if message.text in kb.stocks_dict.keys():
Example #4
0
import yahoo
from models import Paper
import re
import handlers.keyboard as kb


class PaperEditFSM(StatesGroup):
    amount = State()
    price = State()


class DeletePaperFSM(StatesGroup):
    confirm = State()


@dp.message_handler(filters.RegexpCommandsFilter(regexp_commands=['^\D{1,5}(?:\_\d+){1}$']))
async def ticker_page(message: types.Message, state: FSMContext):
    ticker = re.search(r'[a-zA-Z]{1,5}', message.text).group(0)
    port_id = re.search(r'\d+', message.text).group(0)
    async with state.proxy() as data:
        data['ticker'] = ticker
        data['port_id'] = port_id
    await message.reply(messages.paper(ticker, port_id, message.from_user), reply_markup=kb.paper_kb)


@dp.message_handler(lambda m: m.text in ['Add shares', 'Sell shares'])
async def add_sell_shares(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['command'] = message.text
        if not stock.get_paper(data['ticker'], data['port_id'], message.from_user.id):
            return
Example #5
0
async def star_poi(query: types.CallbackQuery, callback_data: Dict[str, str]):
    user = query.from_user
    poi = await db.get_poi_by_id(int(callback_data['id']))
    action = callback_data['action']
    if action == 'set':
        await db.set_star(user.id, poi.id, True)
    elif action == 'del':
        await db.set_star(user.id, poi.id, False)
    kbd = await make_poi_keyboard(user, poi)
    await bot.edit_message_reply_markup(user.id,
                                        query.message.message_id,
                                        reply_markup=kbd)


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['poi([0-9]+)']), state='*')
async def print_specific_poi(message: types.Message, regexp_command,
                             state: FSMContext):
    poi = await db.get_poi_by_id(int(regexp_command.group(1)))
    if not poi:
        await message.answer('Нет заведения с таким номером.')
    else:
        await PoiState.poi.set()
        await state.set_data({'poi': poi.id})
        await print_poi(message.from_user, poi)


@dp.callback_query_handler(POI_HOUSE_CB.filter(), state='*')
async def in_house_callback(query: types.CallbackQuery,
                            callback_data: Dict[str, str], state: FSMContext):
    house = callback_data['house']
Example #6
0
import messages
from misc import dp
from aiogram import types
from aiogram.dispatcher import filters
import re
import stock
import handlers.keyboard as kb


@dp.message_handler(commands=['start'])
async def start_bot(message: types.Message):
    await message.reply(messages.start(message.from_user),
                        reply_markup=types.ReplyKeyboardRemove())


@dp.message_handler(commands=['portfolios'])
async def show_portfolios(message: types.Message):
    await message.reply(messages.portfolios(message.from_user))


@dp.message_handler(filters.RegexpCommandsFilter(regexp_commands=['port_\d+']))
async def portfolio(message: types.Message):
    port_id = re.search(r'\d+', message.text).group(0)
    if stock.is_user_holds_portfolio(message.from_user.id, port_id):
        await message.reply(messages.portfolio(port_id))
Example #7
0
                saved_btc = 0
            changes = round(100 * (p - saved) / saved, 2)
            await bot.send_message(
                chat_id=message.chat.id,
                text=
                f"<pre>You marked at ${saved} and {saved_btc}BTC, changed by {changes}%</pre>",
                parse_mode="HTML")
        await fibs_chart_extended(message, regexp_command)
    except Exception as e:
        logging.warn("Could convert saved point:" + str(e))


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=[
        'whenlambo([\s0-9a-zA-Z]*)', 'lambo([\s0-9a-zA-Z]*)',
        'prices([\s0-9a-zA-Z]*)', '\$([\s0-9a-zA-Z]*)', '\┬Б([\s0-9a-zA-Z]*)',
        '\Рѓг([\s0-9a-zA-Z]*)'
    ]))
async def sorted_prices(message: types.Message, regexp_command):
    try:
        order_by = regexp_command.group(1)
        order_by = order_by.lower().strip()
        if order_by is None or order_by == "":
            order_by = "price"
    except:
        order_by = "price"

    if "1" in order_by:
        order_by = "percent_change_1h"
    elif "24" in order_by:
        order_by = "percent_change_24h"
Example #8
0
    try:
        user = message.from_user.mention
        saves = r.scan_iter(str(message.chat.id) + "_score_*")
        for key in saves:
            key = key.decode('utf-8')
            r.set(key, 0)
        await message.reply(
            f'Sup. Welcome to a NEW season for trade scores for this chat.')
    except Exception as e:
        await message.reply(
            f'{message.from_user.first_name} Failed to reset score. Contact... meh'
        )


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['hodl([\sa-zA-Z]*)']))
async def send_balance(message: types.Message, regexp_command):
    try:
        if regexp_command is not None:
            bysymbol = regexp_command.group(1)
        else:
            bysymbol = None
        saves = r.scan_iter("At_*_" + message.from_user.mention)
        out = "HODLing:\n"
        in_prices = get_user_price_config(message.from_user.mention)
        out = out + "<pre>       Buy At   |  Price   |  +/-  \n"
        total_change = float(0.00)
        counter = 0
        for key in saves:
            symbol = key.decode('utf-8').replace("At_", "").replace(
                "_" + message.from_user.mention, "")
Example #9
0
            fill=True, interpolate='cubic',
            style=DefaultStyle)  # Setting style here is not necessary
        chart.add('BTC', points)
        chart.render_sparkline(width=500, height=25, show_dots=False)
        chart.render_to_png('chart.png')

        await bot.send_photo(chat_id=chat_id, photo=InputFile('chart.png'))
    except Exception as e:
        logging.error("ERROR Making chart:" + str(e))
        await bot.send_message(chat_id=chat_id,
                               text="Failed to create chart",
                               parse_mode="HTML")


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['chart ([a-zA-Z]*)']))
async def candle(message: types.Message, regexp_command):
    chat_id = message.chat.id
    try:
        coin = regexp_command.group(1)
        trades = get_ohcl_trades(coin, 180)
        trades = trades[-60:]
        df = pd.DataFrame(
            trades, columns='time open high low close volume amount'.split())
        df['time'] = pd.DatetimeIndex(df['time'] * 10**9)
        df.set_index('time', inplace=True)

        df['MA20'] = df['close'].rolling(window=20).mean()
        df['20dSTD'] = df['close'].rolling(window=20).std()

        df['Upper'] = df['MA20'] + (df['20dSTD'] * 2)
Example #10
0
    user = query.from_user
    poi = await db.get_poi_by_id(int(callback_data['id']))
    action = callback_data['action']
    if action == 'set':
        await db.set_star(user.id, poi.id, True)
    elif action == 'del':
        await db.set_star(user.id, poi.id, False)
    kbd = await make_poi_keyboard(user, poi)
    try:
        await bot.edit_message_reply_markup(
            user.id, query.message.message_id, reply_markup=kbd)
    except MessageNotModified:
        pass


@dp.message_handler(filters.RegexpCommandsFilter(regexp_commands=['poi([0-9]+)']), state='*')
async def print_specific_poi(message: types.Message, regexp_command, state: FSMContext):
    poi = await db.get_poi_by_id(int(regexp_command.group(1)))
    if not poi:
        await message.answer(tr('no_poi_key'))
    else:
        await PoiState.poi.set()
        await state.set_data({'poi': poi.id})
        await print_poi(message.from_user, poi)


@dp.callback_query_handler(POI_HOUSE_CB.filter(), state='*')
async def in_house_callback(query: types.CallbackQuery, callback_data: Dict[str, str],
                            state: FSMContext):
    house = callback_data['house']
    floor = callback_data['floor']
Example #11
0
from dateutil import parser
from aiogram import Bot, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.dispatcher import Dispatcher, filters
from aiogram.utils.executor import start_webhook
from aiogram.dispatcher.webhook import SendMessage
from aiogram.utils.markdown import escape_md
from bot.settings import (TELEGRAM_BOT, HEROKU_APP_NAME, WEBHOOK_URL,
                          WEBHOOK_PATH, SCORE_KEY, WEBAPP_HOST, WEBAPP_PORT,
                          REDIS_URL)

from .bot import r, dp


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['userprices ([a-zA-Z]*)']))
async def set_user_prices(message: types.Message, regexp_command):
    try:
        type = regexp_command.group(1)
        if type is None:
            await message.reply(
                f'{message.from_user.first_name} Fail. You Idiot. /userprices btc   or /userprices usd'
            )
            return
        if type.lower() == "btc" or type.lower() == "usd":
            user = message.from_user.mention
            r.set("prices_" + user, type.lower())
            await message.reply(f'Gotit. Prices in {type} for {user}')
        else:
            await message.reply(
                f'{message.from_user.first_name} Fail. You Idiot. We only accept btc or usd prices. /userprices btc   or /userprices usd'
Example #12
0
            await bot.send_media_group(chat_id=chat_id, media=media)
            return await bot.send_message(
                chat_id=chat_id,
                text="GHOST EXPIRES IN 24 HOURS, USE IT OR LOSE IT. " + name +
                "!!!")
        else:
            return await bot.send_media_group(chat_id=chat_id, media=media)

    except Exception as e:
        return await bot.send_message(chat_id=chat_id,
                                      text="PROBLEM GETTING PRIZE for " +
                                      name + " ... " + str(e))


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['swayze([\s@0-9a-zA-Z]*)']))
async def add_ghost_card_to_user(message: types.Message, regexp_command):
    to_user = regexp_command.group(1).strip()
    saves = r.scan_iter(
        SCORE_KEY.format(chat_id=BETS_GAME_CHAT_ID, user_id="*"))
    for key in saves:
        key = key.decode('utf-8')
        to_user_id = key.replace(BETS_GAME_CHAT_ID + "_bagscore_", "")
        user_member = await bot.get_chat_member(BETS_GAME_CHAT_ID, to_user_id)
        mention_name = user_member.user.mention
        logging.error("Trying to find " + to_user + "  current attempt:" +
                      mention_name)
        if to_user == mention_name:
            add_random_prize_for_user(to_user_id,
                                      BETS_GAME_CHAT_ID,
                                      ghost_override=True)
Example #13
0
    markup.add('Cancel')

    await message.answer('Выбери неделю', reply_markup=markup)


@dp.message_handler(state=states.Plan.week_choosing)
async def plan2(message: types.Message, state: FSMContext):
    markup = types.ReplyKeyboardRemove()
    dishes_list = services.get_plan(message.text == 'Next')
    await message.answer('\n'.join([str(d) for d in dishes_list]),
                         reply_markup=markup)
    await state.finish()


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['^/dish([0-9]*)']))
async def item(message: types.Message, regexp_command):
    dish = models.Dish[regexp_command.group(1)]

    await message.answer(f"<b>{dish.link}</b>", parse_mode=ParseMode.HTML)
    recipe = ['\nСостав:']
    for r in dish.recipe:
        recipe.append(str(r))
    await message.answer('\n'.join(recipe))


@dp.message_handler(state='*', commands='cancel')
@dp.message_handler(Text(equals='cancel', ignore_case=True), state='*')
async def cancel_handler(message: types.Message, state: FSMContext):
    """
    Allow user to cancel any action
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher, filters
from aiogram.utils import executor

bot = Bot(token='TOKEN')
dp = Dispatcher(bot)


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['item_([0-9]*)']))
async def send_welcome(message: types.Message, regexp_command):
    await message.reply("You have requested an item with number: {}".format(
        regexp_command.group(1)))


if __name__ == '__main__':
    executor.start_polling(dp)
Example #15
0
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher, filters
from aiogram.utils import executor

bot = Bot(token='TOKEN')
dp = Dispatcher(bot)


@dp.message_handler(filters.RegexpCommandsFilter(regexp_commands=['item_([0-9]*)']))
async def send_welcome(message: types.Message):
    regexp_command = message.conf['regexp_command']
    await message.reply("You have requested an item with number: {}".format(regexp_command.group(1)))


if __name__ == '__main__':
    executor.start_polling(dp)
Example #16
0
    buy_or_sell = State()
    buying_coin = State()
    selling_coin = State()
    exchange_symbol = State()
    buying_price_usd = State()
    buying_price_btc = State()
    selling_price_usd = State()
    selling_price_btc = State()
    oco = State()
    tsl = State()
    balance = State()
    spent = State()  # Will be represented in storage as 'Form:spent'


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['mock ([\s0-9.,a-zA-Z]*)']))
async def test_bn_order(message: types.Message, regexp_command):
    try:
        logging.error("CHAT:" + str(message.chat.id))
        all = regexp_command.group(1)
        symbols, price, amount = all.strip().split()
        bn_order.create_test_order(message.chat.id, symbols, price, amount)
        bn_order.get_wallet(message.chat.id)
    except Exception as e:
        logging.error("START UP ERROR:" + str(e))
        await bot.send_message(chat_id=message.chat.id,
                               text="Failed to Start Stream")


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['limit ([\s0-9.,a-zA-Z]*)']))
Example #17
0
            mains = config["shop_list"]
    except Exception as ex:
        logging.info("no config found, ignore")

    out = f"<pre>       Pickup\n"
    totes = 0

    for l in mains:
        l = l.ljust(25, ' ')
        out = out + f"{l} \n"
    out = out + "</pre>"
    await bot.send_message(chat_id=chat_id, text=out, parse_mode="HTML")


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['\+([\s0-9,.a-zA-Z]*)']))
async def add_to_shop(message: types.Message, regexp_command):
    try:
        new_coin = regexp_command.group(1).strip()
        logging.info("config")
        config = r.get(message.chat.id)
        if config is None:
            config = {}
        else:
            config = json.loads(config)
        logging.info(json.dumps(config))

        if "shop_list" not in config:
            config["shop_list"] = []

        new_coin = new_coin.lower()
Example #18
0
	if current_state is None:
		return

	async with state.proxy() as data:
		try:
			if data['pic']:
				remove(data['pic'])
		except:
			pass

	await state.finish()
	await message.answer('Отменено.')


@dp.message_handler(filters.Text(equals="Демотиватор"), state="*")
@dp.message_handler(filters.RegexpCommandsFilter(regexp_commands=[r'(?i)demotivator|demo|демо|демотиватор$']), state="*")
async def demoCallingHandler(message: Message, state: FSMContext):
	current_state = await state.get_state()
	if current_state is not None:
		return

	markup = getDefaultReplyKeyboard()

	await DemoFSM.pic.set()
	await message.answer("Отправь картинку, которую хотел бы видеть в демотиваторе", reply_markup=markup)


@dp.message_handler(content_types=['photo'], state=DemoFSM.pic)
async def picDemoHandler(message: Message, state: FSMContext):
	async with state.proxy() as data:
		photoName = str(time()) + ".jpg"
Example #19
0

@dp.message_handler(commands=['cate', 'cat'])
async def sendCatImage(message: types.Message):
    url = getTheApiUrl('cat')
    await bot.send_photo(chat_id=message.chat.id, photo=url)


@dp.message_handler(commands=['fox', 'foxy'])
async def sendFoxImage(message: types.Message):
    url = get_a_fox()
    await bot.send_photo(chat_id=message.chat.id, photo=url)


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['pix ([\s0-9.,a-zA-Z]*)']))
async def get_pix(message: types.Message, regexp_command):
    name = regexp_command.group(1)
    url = search_pix(name)
    if url is None:
        await bot.send_message(chat_id=message.chat.id,
                               text=f'Sorry Nothing Found.')
    else:
        await bot.send_photo(chat_id=message.chat.id, photo=url)


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['red([a-zA-Z]*)']))
async def send_red(message: types.Message, regexp_command):
    await bot.send_sticker(
        chat_id=message.chat.id,
Example #20
0
        await bot.send_message(chat_id=chat_id,
                               text="\n".join(out[:50]) + "</pre>",
                               parse_mode="HTML")
        out2 = [f"<pre>{in_prices}    1hr   24hr  ATH-days   ATH%"]
        out2.extend(out[50:])
        await bot.send_message(chat_id=chat_id,
                               text="\n".join(out2) + "</pre>",
                               parse_mode="HTML")
    else:
        await bot.send_message(chat_id=chat_id,
                               text="\n".join(out) + "</pre>",
                               parse_mode="HTML")


@dp.message_handler(
    filters.RegexpCommandsFilter(regexp_commands=['watch ([a-zA-Z]*)']))
async def add_to_prices_alts(message: types.Message, regexp_command):
    try:
        new_coin = regexp_command.group(1)
        config = r.get(message.chat.id)
        if config is None:
            config = {}
        else:
            config = json.loads(config)
        a = get_bn_price(new_coin)
        if "watch_list_alts" not in config:
            config["watch_list_alts"] = []
        if a == 0:
            arr = get_ohcl_trades(new_coin, 60)
            if arr is None:
                await message.reply(