async def process_photo(chat, match, logger): logger.info("Getting photo from %s", chat.sender) chat.message['photo'][1]['file_id'] if not await user_has_draft(chat.bot.pg_pool, chat.sender.get('id')): info = format_text(''' {name}, расм юборишдан аввал эълон ёзишингиз керак. ''') logger.info('%s user sent photo with no draft', chat.sender) await chat.send_text(info.format(name=chat.sender['first_name']), parse_mode='Markdown', disable_web_page_preview=True) await create_sale_ad_command(chat, match, logger) return admins = await get_all_admins(chat.bot.pg_pool) import time start = time.time() # Make template ad_template = format_text(''' 🚗 {name} сотилади! ⚙️ Йили: {year} 🏃 Пробег: {mileage} 🔦 Ҳолати: {status} 💰 Нархи: {price} 📞 Мурожаат: {contact} ''') draft = await get_draft(chat.bot.pg_pool, chat.sender.get('id')) d = dict(draft) ad_str = d.get('data') ad_dict = ast.literal_eval(ad_str) ad_text = ad_template.format(**ad_dict) url = await insert_watermark(chat, match, logger) for admin in admins: logger.info('Sending to %s (%s)', admin['first_name'], admin['username']) private = chat.bot.private(admin['id']) try: await private.send_photo(url, caption=ad_text) except: logger.info('Cannot send photo to %s', admin['first_name']) logger.info( '{0:0.4f} time spent to broadcast message to {1} admins'.format( (time.time() - start), len(admins))) await send_ad_acceptance_message(chat, match, logger)
async def create_sale_ad_vehicle_command(chat, match, logger): if await user_has_draft(chat.bot.pg_pool, chat.sender.get('id')): denied = format_text(''' {name}, авто-улов ҳақида эълон бергандиз. У эълон ҳали каналга қўйилгани йўқ. У эълонни бекор қилайликми? ''') keyboard = [ ['Эълонни бекор қилиш'], ['Менюга қайтиш'], ] reply_keyboard_markup = { 'keyboard': keyboard, 'resize_keyboard': True, 'one_time_keyboard': False } await chat.send_text(denied.format(name=chat.sender['first_name']), parse_mode='Markdown', disable_web_page_preview=True, reply_markup=json.dumps(reply_keyboard_markup)) return question = format_text(''' Авто-улов ҳақида қисқа маълумот беринг. Эълонни бундай форматда вергул билан ажратиб ёзинг: ``` Авто: Номи, йили, пробег, ҳолати, нархи, телефон рақам ``` Масалан: ``` Авто: Lacetti, 2015, 35000, яхши, 7000, +998931234567 ``` Бошига `Авто:` сўзини қўшиш эсдан чиқмасин. ''') logger.info('Vehicle create ad requested by %s', chat.sender) await chat.send_text(question, parse_mode='Markdown', disable_web_page_preview=True)
async def attach_no_image_to_ad_command(chat, match, logger): text = format_text(''' {ok} ''') logger.info('%s says no image', chat.sender) await chat.send_text(text.format(ok=random.choice(ok_text))) admins = await get_all_admins(chat.bot.pg_pool) import time start = time.time() # Make template ad_template = format_text(''' 🚗 *{name}* сотилади! ⚙️ *Йили:* {year} 🏃 *Пробег:* {mileage} 🔦 *Ҳолати:* {status} 💰 *Нархи:* {price} 📞 *Мурожаат учун:* {contact} [Водий бозор](https://t.me/vodiybozor) ''') draft = await get_draft(chat.bot.pg_pool, chat.sender.get('id')) logger.info('------- %s', type(draft)) d = dict(draft) ad_str = d.get('data') ad_dict = ast.literal_eval(ad_str) ad_text = ad_template.format(**ad_dict) for admin in admins: logger.info('Sending to %s (%s)', admin['first_name'], admin['username']) private = chat.bot.private(admin['id']) try: await private.send_text(ad_text, parse_mode='Markdown', disable_web_page_preview=True) except: logger.info('Cannot send message to %s', admin['first_name']) logger.info( '{0:0.4f} time spent to broadcast message to {1} admins'.format( (time.time() - start), len(admins))) await send_ad_acceptance_message(chat, match, logger)
async def cancel_ad_command(chat, match, logger): if not await user_has_draft(chat.bot.pg_pool, chat.sender.get('id')): message = format_text(''' {name}, ҳали янги эълон ёзганингиз йўқ. ''') await chat.send_text(message.format(name=chat.sender['first_name']), parse_mode='Markdown', disable_web_page_preview=True) return await delete_draft(chat.bot.pg_pool, chat.sender.get('id')) message = format_text(''' Эълон бекор қилинди. ''') await chat.send_text(message) await create_sale_ad_vehicle_command(chat, match, logger)
async def process_contact(chat, match, logger): logger.info("Getting contact from %s", chat.sender) logger.info(chat.message['contact']) await insert_contact(chat.bot.pg_pool, chat.message['contact']) info = format_text(''' Телефон рақам қабул қилинди. Раҳмат. ''') logger.info('Received contact from %s', chat.sender) await chat.send_text(info, parse_mode='Markdown', disable_web_page_preview=True)
async def create_ad_command(chat, match, logger): question = format_text(''' {ok} Қандай эълон бермоқчисиз? ''') keyboard = [ ['Сотмоқчиман', 'Олмоқчиман'], ['Хизмат ва таклифлар'], ] reply_keyboard_markup = { 'keyboard': keyboard, 'resize_keyboard': True, 'one_time_keyboard': False } logger.info('%s ads requested by', chat.sender) await chat.send_text(question.format(ok=random.choice(ok_text)), parse_mode='Markdown', disable_web_page_preview=True, reply_markup=json.dumps(reply_keyboard_markup))
async def process_ads_command(chat, match, logger): info = format_text(''' {name}, эълон бермоқчимисиз ёки эълонларни кўрмоқчимисиз? ''') keyboard = [ ['Эълон бермоқчиман', 'Эълонларни кўрмоқчиман'], ['Менюга қайтиш'], ] reply_keyboard_markup = { 'keyboard': keyboard, 'resize_keyboard': True, 'one_time_keyboard': False } logger.info('%s ads requested by', chat.sender) await chat.send_text(info.format(name=chat.sender['first_name']), parse_mode='Markdown', disable_web_page_preview=True, reply_markup=json.dumps(reply_keyboard_markup))
async def create_sale_ad_command(chat, match, logger): question = format_text(''' Нима сотмоқчисиз? ''') keyboard = [ ['🚗 Авто-улов', '🏠 Кўчмас-мулк'], ['📺 Маиший техника', '🚪 Уй-рўзғор буюмлари'], ['👕 Кийим-кечак', '🚴 Спорт анжомлари'], ['📱 Телефон', ''], ] reply_keyboard_markup = { 'keyboard': keyboard, 'resize_keyboard': True, 'one_time_keyboard': False } logger.info('%s ads requested by', chat.sender) await chat.send_text(question, parse_mode='Markdown', disable_web_page_preview=True, reply_markup=json.dumps(reply_keyboard_markup))
async def make_self_ad(chat, match): ad_text = format_text(''' 🔱*Водий* *eBozor*🔱 🇺🇿 *Автосалондаги* *нархлар* (2017 йил 25 февраль) 🇷🇺 *Цены* *автомобилей* *в* *автосалоне* (за 25 февраля 2017 года) ➥ [Nexia 3 Ravon(evro)](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) ➥ [Isuzu -3](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) ➥ [Damas (1-2pozitsiya)](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) ➥ [Matiz (1-4pozitsiya)](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) ➥ [Matiz Best(1-3pozitsiya)](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) ➥ [Spark Ravon(1-4pozitsiya)](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) ➥ [Nexia-2 SOHC(1-4pozitsiya)](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) ➥ [Nexia-2 DOHC(1-4pozitsiya)](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) ➥ [Cobalt(1-4pozitsiya)](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) ➥ [Gentra(1-4pozitsiya)](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) ➥ [Orlando(1-3pozitsiya)](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) ➥ [Captiva 3](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) ➥ [Malibu (1-3pozitsiya)](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) [➖➖➖➖➖➖➖➖➖➖➖](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) 👉 [Moshina narhlari 2017](https://telegram.me/joinchat/AAPpnD_lW9-Co3Erc8tR-Q) 👈 ''') await chat.send_text(ad_text, parse_mode='Markdown', disable_web_page_preview=True)
async def send_ad_acceptance_message(chat, match, logger): accepted_text = format_text(''' Эълон қабул қилинди ва админларга юборилди. Тез орада каналга чоп этиб, бу ҳақда сизга хабар берамиз. ''') await chat.send_text(accepted_text)
async def attach_image_to_ad_command(chat, match, logger): ask_image = format_text(''' Юборинг расмни. ''') logger.info('Image file sent by %s', chat.sender) await chat.send_text(ask_image)
async def create_sale_ad_vehicle_accept_command(chat, match, logger): logger.info('Vehicle create ad requested by %s', chat.sender) if await user_has_draft(chat.bot.pg_pool, chat.sender.get('id')): denied = format_text(''' {name}, авто-улов ҳақида эълон бергандиз. У эълон ҳали каналга қўйилгани йўқ. У эълонни бекор қилайликми? ''') keyboard = [ ['Эълонни бекор қилиш'], ['Менюга қайтиш'], ] reply_keyboard_markup = { 'keyboard': keyboard, 'resize_keyboard': True, 'one_time_keyboard': False } await chat.send_text(denied.format(name=chat.sender['first_name']), parse_mode='Markdown', disable_web_page_preview=True, reply_markup=json.dumps(reply_keyboard_markup)) return text = chat.message['text'] keys = ['name', 'year', 'mileage', 'status', 'price', 'contact'] __, values = text.split(':') values = [v.strip() for v in values.split(',')] ad_dict = dict(zip(keys, values)) logger.info('----------------------') logger.info(ad_dict) logger.info('Inserting draft ...') await insert_draft(chat.bot.pg_pool, chat.sender['id'], ad_dict) ad_template = format_text(''' 🚗 *{name}* сотилади! ⚙️ *Йили:* {year} 🏃 *Пробег:* {mileage} 🔦 *Ҳолати:* {status} 💰 *Нархи:* {price} 📞 *Мурожаат учун:* /contact [Водий бозор](https://t.me/vodiybozor) ''') ad_text = ad_template.format(**ad_dict) await chat.send_text(ad_text, parse_mode='Markdown', disable_web_page_preview=True) question = format_text(''' Эълон ёзиб олинди. Расми борми йўқми? ''') keyboard = [ ['✅ Расм бор', '❌ Расм йўқ'], ] reply_keyboard_markup = { 'keyboard': keyboard, 'resize_keyboard': True, 'one_time_keyboard': False } logger.info('Vehicle ad accepted from %s', chat.sender) await chat.send_text(question, parse_mode='Markdown', disable_web_page_preview=True, reply_markup=json.dumps(reply_keyboard_markup))