import logging from telegram.ext import MessageHandler from telegram import ChatAction from bot.overrides import Filters from bot import u from bot import StickerFile logger = logging.getLogger(__name__) @u.restricted @u.action(ChatAction.UPLOAD_DOCUMENT) @u.failwithmessage def on_sticker_receive(bot, update): logger.info('%d: user sent a stciker to convert', update.effective_user.id) sticker = StickerFile(update.message.sticker) sticker.download(update, prepare_png=True) update.message.reply_document(sticker.png_bytes_object, quote=True) sticker.delete() HANDLERS = (MessageHandler(Filters.sticker & Filters.status(''), on_sticker_receive), )
update.message.reply_html( s.PACK_CREATION_ERROR_GENERIC.format(e.message)) return # do not continue db.save_pack(update.effective_user.id, full_name, title) pack_link = u.name2link(full_name) update.message.reply_html(s.PACK_CREATION_PACK_CREATED.format(pack_link)) sticker.delete() # remove sticker files user_data['status'] = 'adding_stickers' # wait for other stickers user_data['pack']['name'] = full_name # do not remove temporary data (user_data['pack']) because we are still adding stickers HANDLERS = (CommandHandler(['create', 'new', 'n'], on_create_command, filters=Filters.status(''), pass_user_data=True), MessageHandler(Filters.status('waiting_pack_title'), on_pack_title_receive, pass_user_data=True), MessageHandler(Filters.status('waiting_pack_name'), on_pack_name_receive, pass_user_data=True), MessageHandler((Filters.sticker | Filters.png) & Filters.status('waiting_pack_first_sticker'), on_first_sticker_receive, pass_user_data=True))
message_to_edit.reply_text(s.EXPORT_PACK_UPLOADING, quote=True) logger.info('creating zip file...') zip_path = 'tmp/{}_{}'.format(update.message.message_id, sticker_set.name) make_archive(zip_path, 'zip', dir_path) zip_path += '.zip' logger.debug('sending zip file %s', zip_path) with open(zip_path, 'rb') as f: update.message.reply_document(f, caption='<a href="{}">{}</a>'.format( u.name2link(sticker_set.name), html_escape(sticker_set.title) ), parse_mode=ParseMode.HTML, quote=True) logger.info('cleaning up export files') try: os.remove(zip_path) # remove the zip file rmtree(dir_path) # remove the png dir except Exception as e: logger.error('error while cleaning up the export files: %s', str(e)) user_data['status'] = '' # reset the user status, do not implicitly wait for new packs to export HANDLERS = ( CommandHandler(['export', 'e'], on_export_command, filters=Filters.status(''), pass_user_data=True), MessageHandler(Filters.sticker & Filters.status('exporting_pack_waiting_sticker'), on_sticker_receive, pass_user_data=True) )
import logging from telegram.ext import MessageHandler from telegram import ChatAction from bot.overrides import Filters from bot import u from bot import StickerFile logger = logging.getLogger(__name__) @u.restricted @u.action(ChatAction.UPLOAD_DOCUMENT) @u.failwithmessage def on_sticker_receive(bot, update): logger.info('%d: user sent a stciker to convert', update.effective_user.id) sticker = StickerFile(update.message.sticker) sticker.download(prepare_png=True) update.message.reply_document(sticker.png_bytes_object, quote=True) sticker.delete() HANDLERS = ( MessageHandler(Filters.sticker & Filters.status(''), on_sticker_receive), )
elif error == 11: # pack name invalid or that pack has been deleted: delete it from the db deleted_rows = db.delete_pack(update.effective_user.id, name) logger.debug('rows deleted: %d', deleted_rows or 0) # get the remaining packs' titles pack_titles = db.get_pack_titles(update.effective_user.id) if not pack_titles: # user doesn't have any other pack to chose from, reset his status update.message.reply_html(s.ADD_STICKER_PACK_NOT_VALID_NO_PACKS.format(pack_link)) user_data['status'] = '' else: # make the user select another pack from the keyboard markup = rm.get_markup_from_list(pack_titles) update.message.reply_html(s.ADD_STICKER_PACK_NOT_VALID.format(pack_link), reply_markup=markup) user_data.pop('pack', None) # remove temporary data user_data['status'] = 'adding_waiting_pack_title' else: update.message.reply_html(s.ADD_STICKER_GENERIC_ERROR.format(pack_link, error), quote=True) sticker.delete() HANDLERS = ( CommandHandler(['add', 'a'], on_add_command, filters=Filters.status(''), pass_user_data=True), MessageHandler(Filters.text & Filters.status('adding_waiting_pack_title'), on_pack_title, pass_user_data=True), MessageHandler(Filters.text & Filters.status('adding_waiting_pack_name'), on_pack_name, pass_user_data=True), MessageHandler((Filters.sticker | Filters.png) & Filters.status('adding_stickers'), on_sticker_receive, pass_user_data=True) )
zip_path += '.zip' logger.debug('sending zip file %s', zip_path) with open(zip_path, 'rb') as f: update.message.reply_document(f, caption='<a href="{}">{}</a>'.format( u.name2link(sticker_set.name), html_escape(sticker_set.title)), parse_mode=ParseMode.HTML, quote=True) logger.info('cleaning up export files') try: os.remove(zip_path) # remove the zip file rmtree(dir_path) # remove the png dir except Exception as e: logger.error('error while cleaning up the export files: %s', str(e)) user_data[ 'status'] = '' # reset the user status, do not implicitly wait for new packs to export HANDLERS = (CommandHandler(['export', 'e'], on_export_command, filters=Filters.status(''), pass_user_data=True), MessageHandler(Filters.sticker & Filters.status('exporting_pack_waiting_sticker'), on_sticker_receive, pass_user_data=True))
logger.info('%d: /remove', update.effective_user.id) update.message.reply_text(s.REMOVE_STICKER_SELECT_STICKER) user_data['status'] = 'removing_stickers' @u.action(ChatAction.TYPING) @u.failwithmessage def on_sticker_receive(bot, update, user_data): logger.info('%d: user sent the stciker to add', update.effective_user.id) sticker = StickerFile(update.message.sticker) error = sticker.remove_from_set(bot) pack_link = u.name2link(update.message.sticker.set_name) if not error: update.message.reply_html(s.REMOVE_STICKER_SUCCESS.format(pack_link), quote=True) elif error == 11: update.message.reply_html(s.REMOVE_STICKER_FOREIGN_PACK.format(u.name2link(update.message.sticker.set_name)), quote=True) elif error == 12: update.message.reply_html(s.REMOVE_STICKER_ALREADY_DELETED.format(pack_link), quote=True) else: update.message.reply_html(s.REMOVE_STICKER_GENERIC_ERROR.format(pack_link, error), quote=True) HANDLERS = ( CommandHandler(['remove', 'rem', 'r'], on_remove_command, filters=Filters.status(''), pass_user_data=True), MessageHandler(Filters.sticker & Filters.status('removing_stickers'), on_sticker_receive, pass_user_data=True) )
addpack_name_stickerset = bot.getStickerSet(addpack_name) except (BadRequest, TelegramError) as e: logger.error('Telegram error while trying to get the sticker set: %s', e.message) error_code = u.get_exception_code(e.message) if error_code == 13: update.message.reply_text(s.PACK_CREATION_ERROR_INVALID_NAME) user_data['status'] = 'waiting_addpack_name' else: update.message.reply_html( s.PACK_CREATION_ERROR_GENERIC.format(e.message)) return # do not continue db.save_pack(update.effective_user.id, addpack_name_stickerset.name, addpack_name_stickerset.title) pack_link = u.name2link(addpack_name_stickerset.name) update.message.reply_html(s.PACK_ADDED.format(pack_link)) user_data['status'] = '' HANDLERS = (CommandHandler(['addpack', 'ap'], on_addpack_command, filters=Filters.status(''), pass_user_data=True), MessageHandler(Filters.status('waiting_addpack_name'), on_addpack_name_receive, pass_user_data=True))
@u.action(ChatAction.TYPING) @u.restricted @u.failwithmessage def on_transparency_state_receive(bot, update, user_data): logger.info('%d: received possible transparency state', update.effective_user.id) if 'on' not in update.message.text and 'off' not in update.message.text: logger.info('unknown transparency state value') update.message.reply_html( s.UNKNOWN_CURRENT_USER_TRANSPARENCY_STATE.format( update.message.text)) return logger.info('passed transparency state value') db.update_transparency_state(update.effective_user.id, update.message.text) update.message.reply_html( s.CURRENT_USER_TRANSPARENCY_STATE_UPDATE.format(update.message.text)) return HANDLERS = (CommandHandler(['transparency', 'tr'], on_transparency_command, filters=Filters.status(''), pass_user_data=True), MessageHandler(Filters.status('waiting_user_transparency'), on_transparency_state_receive, pass_user_data=True))
markup = rm.get_markup_from_list(pack_titles) update.message.reply_html( s.ADD_STICKER_PACK_NOT_VALID.format(pack_link), reply_markup=markup) user_data.pop('pack', None) # remove temporary data user_data['status'] = 'adding_waiting_pack_title' else: update.message.reply_html(s.ADD_STICKER_GENERIC_ERROR.format( pack_link, error), quote=True) sticker.delete() HANDLERS = (CommandHandler(['add', 'a'], on_add_command, filters=Filters.status(''), pass_user_data=True), MessageHandler(Filters.text & Filters.status('adding_waiting_pack_title'), on_pack_title, pass_user_data=True), MessageHandler(Filters.text & Filters.status('adding_waiting_pack_name'), on_pack_name, pass_user_data=True), MessageHandler((Filters.sticker | Filters.png) & Filters.status('adding_stickers'), on_sticker_receive, pass_user_data=True))