Пример #1
0
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), )
Пример #2
0
            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))
Пример #3
0
    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)
)
Пример #4
0
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),
)
Пример #5
0
    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)
)
Пример #6
0
    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))
Пример #7
0
    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)
)
Пример #8
0
        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))
Пример #9
0
@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))
Пример #10
0
            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))