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] )
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)
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)