def reaction(bot, update, chat_id, origin_message_id, user_id, args):
    channel_id = int(args[1])
    msg_id = int(args[2])
    like_id = int(args[3])
    config = helper_database.get_channel_config(channel_id)
    if config is None:
        return
    channel_lang, mode = config[1], config[2]
    buttons = helper_database.get_button_options(channel_id, msg_id)
    helper_database.add_reaction(channel_id, msg_id, user_id, like_id)
    private_msg.update_dirty_msg(channel_id, msg_id, update_mode=(2 if mode == 3 else 0))
    bot.answer_callback_query(
        callback_query_id=update.callback_query.id,
        text=helper_global.value("like_recorded", "", lang=channel_lang) % buttons[like_id]
    )
Ejemplo n.º 2
0
def update_comments(bot, channel_id, msg_id, update_mode):
    logger = Logger.logger
    config = helper_database.get_channel_config(channel_id)
    if config is None:
        return
    channel_lang = config[1]
    mode = config[2]
    recent = config[3]
    logger.msg(
        {
            "channel_id": channel_id,
            "msg_id": msg_id,
            "update_mode": update_mode
        },
        tag="private",
        log_level=80)

    # update comments in channel
    comment_id = helper_database.get_comment_id(channel_id, msg_id)
    if comment_id is None:
        # If no comment message, just update Like buttons
        buttons = helper_database.get_button_options(channel_id, msg_id)
        stat = helper_database.get_reaction_stat(channel_id, msg_id)
        # Prepare Keyboard
        motd_keyboard = [[
            InlineKeyboardButton(value +
                                 (" (%d)" % stat[idx] if idx in stat else ""),
                                 callback_data="like,%s,%s,%d" %
                                 (channel_id, msg_id, idx))
            for idx, value in enumerate(buttons)
        ]] + [[
            InlineKeyboardButton(
                helper_global.value(
                    "add_comment", "Add Comment", lang=channel_lang),
                url="http://telegram.me/%s?start=add_%d_%d" %
                (helper_global.value('bot_username', ''), channel_id, msg_id)),
            InlineKeyboardButton(
                helper_global.value(
                    "show_all_comments", "Show All", lang=channel_lang),
                url="http://telegram.me/%s?start=show_%s_%d" %
                (helper_global.value('bot_username', ''), channel_id, msg_id))
        ]]
        motd_markup = InlineKeyboardMarkup(motd_keyboard)
        bot.edit_message_reply_markup(chat_id=channel_id,
                                      message_id=msg_id,
                                      reply_markup=motd_markup)
        return

    # Otherwise
    # Update Like buttons
    if update_mode == 0:
        buttons = helper_database.get_button_options(channel_id, msg_id)
        stat = helper_database.get_reaction_stat(channel_id, msg_id)
        # Prepare Keyboard
        motd_keyboard = [[
            InlineKeyboardButton(
                value + (" (%d)" % stat[idx] if idx in stat else ""),
                callback_data="like,%s,%s,%d" % (channel_id, msg_id, idx))
            for idx, value in enumerate(buttons)
        ]]
        motd_markup = InlineKeyboardMarkup(motd_keyboard)
        bot.edit_message_reply_markup(chat_id=channel_id,
                                      message_id=msg_id,
                                      reply_markup=motd_markup)
        return

    # Update comment message
    records = helper_database.get_recent_records(channel_id, msg_id, recent)

    # Prepare Keyboard
    motd_keyboard = [[
        InlineKeyboardButton(
            helper_global.value("add_comment",
                                "Add Comment",
                                lang=channel_lang),
            url="http://telegram.me/%s?start=add_%d_%d" %
            (helper_global.value('bot_username', ''), channel_id, msg_id)),
        InlineKeyboardButton(
            helper_global.value("show_all_comments",
                                "Show All",
                                lang=channel_lang),
            url="http://telegram.me/%s?start=show_%s_%d" %
            (helper_global.value('bot_username', ''), channel_id, msg_id))
    ]]
    motd_markup = InlineKeyboardMarkup(motd_keyboard)

    bot.edit_message_text(text=helper_global.records_to_str(
        records, channel_lang),
                          chat_id=channel_id,
                          message_id=comment_id,
                          parse_mode=telegram.ParseMode.HTML,
                          reply_markup=motd_markup)
Ejemplo n.º 3
0
def update_comments(bot, channel_id, msg_id, update_mode):
    logger = Logger.logger
    config = helper_database.get_channel_config(channel_id)
    if config is None:
        return
    channel_lang = config[1]
    mode = config[2]
    recent = config[3]
    logger.msg(
        {
            "channel_id": channel_id,
            "msg_id": msg_id,
            "update_mode": update_mode
        },
        tag="private",
        log_level=80)

    # update comments in channel
    comment_id = helper_database.get_comment_id(channel_id, msg_id)
    if comment_id is None:
        # If no comment message, just update Like buttons
        buttons = helper_database.get_button_options(channel_id, msg_id)
        stat = helper_database.get_reaction_stat(channel_id, msg_id)
        # Prepare Keyboard
        motd_keyboard = [[
            InlineKeyboardButton(value +
                                 (" (%d)" % stat[idx] if idx in stat else ""),
                                 callback_data="like,%s,%s,%d" %
                                 (channel_id, msg_id, idx))
            for idx, value in enumerate(buttons)
        ]] + [[
            InlineKeyboardButton(
                helper_global.value(
                    "add_comment", "Add Comment", lang=channel_lang),
                url="http://telegram.me/%s?start=add_%d_%d" %
                (helper_global.value('bot_username', ''), channel_id, msg_id)),
            InlineKeyboardButton(
                helper_global.value(
                    "show_all_comments", "Show All", lang=channel_lang),
                url="http://telegram.me/%s?start=show_%s_%d" %
                (helper_global.value('bot_username', ''), channel_id, msg_id))
        ]]
        motd_markup = InlineKeyboardMarkup(motd_keyboard)
        bot.edit_message_reply_markup(chat_id=channel_id,
                                      message_id=msg_id,
                                      reply_markup=motd_markup)
        return

    # Otherwise
    # Update Like buttons
    if update_mode == 0:
        buttons = helper_database.get_button_options(channel_id, msg_id)
        stat = helper_database.get_reaction_stat(channel_id, msg_id)
        # Prepare Keyboard
        motd_keyboard = [[
            InlineKeyboardButton(
                value + (" (%d)" % stat[idx] if idx in stat else ""),
                callback_data="like,%s,%s,%d" % (channel_id, msg_id, idx))
            for idx, value in enumerate(buttons)
        ]]
        motd_markup = InlineKeyboardMarkup(motd_keyboard)
        bot.edit_message_reply_markup(chat_id=channel_id,
                                      message_id=msg_id,
                                      reply_markup=motd_markup)
        return

    # Update comment message
    records = helper_database.get_recent_records(channel_id, msg_id, recent)

    # Prepare Keyboard
    motd_keyboard = [[
        InlineKeyboardButton(
            helper_global.value("add_comment",
                                "Add Comment",
                                lang=channel_lang),
            url="http://telegram.me/%s?start=add_%d_%d" %
            (helper_global.value('bot_username', ''), channel_id, msg_id)),
        InlineKeyboardButton(
            helper_global.value("show_all_comments",
                                "Show All",
                                lang=channel_lang),
            url="http://telegram.me/%s?start=show_%s_%d" %
            (helper_global.value('bot_username', ''), channel_id, msg_id))
    ]]
    motd_markup = InlineKeyboardMarkup(motd_keyboard)

    rev_records = records[:]
    rev_records.reverse()

    scope = {"BOT_TOKEN": "", "FILES_GROUP": 0}

    with open(sys.path[0] + "/helper_const.py", "r") as f:
        lines = f.readlines()
        for line in lines:
            if line.strip().startswith("BOT_TOKEN") or line.strip().startswith(
                    "FILES_GROUP"):
                # trusted file
                exec(line, scope)

    infos = []

    render_as_text_records = []

    for record in rev_records:
        name = record[3]
        ftype = "text" if record[4] == "text" else "unsupported"
        if record[4] == "photo":
            ftype = "image"
        elif record[4] == "sticker":
            ftype = "sticker"
        content = record[5]
        fid = record[6]
        timestr = record[7]
        uid = record[8]
        reply_to = record[10]
        url = ""
        if fid != "":
            ctx = f"https://api.telegram.org/bot{scope['BOT_TOKEN']}/getFile?file_id={fid}"
            with urllib.request.urlopen(ctx) as resp:
                result = resp.read()
                url = "https://api.telegram.org/file/"
                url += "bot" + scope["BOT_TOKEN"] + "/" + json.loads(
                    result)["result"]["file_path"]
        info = {
            "name": name,
            "type": ftype,
            "content": content,
            "timeStr": timestr,
            "uid": uid,
            "url": url,
            "replyTo": reply_to
        }
        infos.append(info)
        if ftype == "text":
            if len(render_as_text_records) < 5:
                render_as_text_records.append(record)
            else:
                render_as_text_records.remove(render_as_text_records[0])
                render_as_text_records.append(record)
        else:
            render_as_text_records = []

    render_as_text_records.reverse()
    infos = infos[0:len(infos) - len(render_as_text_records)]

    remote = "http://127.0.0.1:6899/render/" + urllib.parse.quote(
        json.dumps(infos), safe='')
    with urllib.request.urlopen(remote) as resp:
        fpath = json.loads(resp.read())["path"]
        with open(fpath, "rb") as f:
            photo_message = bot.send_photo(
                chat_id=scope["FILES_GROUP"],
                photo=f,
                caption=helper_global.records_to_str(render_as_text_records,
                                                     channel_lang),
                parse_mode=telegram.ParseMode.HTML).result()
            photo = photo_message.photo[0]
            comment_text = helper_global.records_to_str(
                render_as_text_records, channel_lang)
            media = telegram.InputMediaPhoto(
                photo.file_id,
                caption=comment_text,
                parse_mode=telegram.ParseMode.HTML)
            bot.edit_message_media(
                # text=helper_global.records_to_str(render_as_text_records, channel_lang),
                media=media,
                chat_id=channel_id,
                message_id=comment_id,
                parse_mode=telegram.ParseMode.HTML,
                reply_markup=motd_markup)