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="*")
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='*')
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():
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
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']
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))
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"
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, "")
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)
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']
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'
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)
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)
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)
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]*)']))
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()
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"
@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,
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(