def addtext(bot, update): text = update.message.text var.set('blogarticle', var.get('blogarticle', '') + text + '\n') update.message.reply_text( '(%d)\n%s' % (len(var.get('blogarticle', '')), var.get('blogarticle', '')[-500:] + '...\n/preview 命令来预览发送\n/cancel 命令退出写作模式')) return WM
def confirm(bot, update): var.set('blogarticlepos', 0) update.message.reply_text('(%d/%d)\n%s' % ( 1, (len(var.get('blogarticle', '')) - 1) // 500 + 1, var.get('blogarticle', '')[:500] + '...\n/yes [title] [ascii title] 确认发送\n/no 继续编辑\n/prevpage 上一页 \n/nextpage 下一页' )) return READY
def httpcallback(bot, update): if not check_admin(update.message.from_user.id): return text = 'PORT: {}\nTOKEN: {}\nCHANNEL: {}\nMAXLEN: {}\n'.format( var.get('httpcallback_port',None), var.get('httpcallback_token',None), var.get('httpcallback_channel',None), var.get('httpcallback_maxlen',None)) bot.send_message(chat_id=update.message.chat_id, text=text)
def callback_rss(bot, job): unreadnum = var.get('rssunreadnum', 0) lastid = var.get('rsslatestid', 0) if unreadnum >= const.MINIFLUX_MAXUNREAD: return entries = miniflux_client.get_entries(lastid) for x in entries: send_entry(bot, x) lastid = max(lastid, x['id']) var.set('rsslatestid', lastid) var.set('rssunreadnum', unreadnum + len(entries))
def confirm_yes(bot, update, args): if len(args) != 2: update.message.reply_text('usage: /yes [title] [ascii title]') return READY article = var.get('blogarticle', '') article += '\n\n> via [msbot](https://github.com/zrt/bot)\n' thread = articlemanager.create(args[0], args[1], article, var.get('blogarticleimg', [])) var.set('blogarticlethread', thread) update.message.reply_text('发送中...\n/check 检查发送进度\n/cancel 退出写作模式') return SENT
def nextpage(bot, update): pos = var.get('blogarticlepos', 0) if pos >= (len(var.get('blogarticle', '')) - 1) // 500: update.message.reply_text('没有下一页qwq') else: pos = pos + 1 var.set('blogarticlepos', pos) update.message.reply_text('(%d/%d)\n%s' % ( pos + 1, (len(var.get('blogarticle', '')) - 1) // 500 + 1, var.get('blogarticle', '')[pos * 500:(pos + 1) * 500] + '...\n/yes [title] [ascii title] 确认发送\n/no 继续编辑\n/prevpage 上一页 \n/nextpage 下一页\n/cancel 命令退出写作模式' )) return READY
def addimg(bot, update): file_id = update.message.photo[-1] newFile = bot.get_file(file_id) file_name = 'blog_img_%s.png' % randstr() newFile.download(file_name) var.get('blogarticleimg', []).append(file_name) var.set('blogarticle', var.get('blogarticle', '') + '![photo](/img/%s)\n' % file_name) update.message.reply_text( '(%d)\n%s' % (len(var.get('blogarticle', '')), var.get('blogarticle', '')[-500:] + '...\n/preview 命令来预览发送\n/cancel 命令退出写作模式')) return WM
def cancel(bot, update): update.message.reply_text('canceled', reply_markup=ReplyKeyboardRemove()) # 清空下载的图片 for x in var.get('blogarticleimg'): if x.startswith('blog_img_'): os.sytem('rm %s' % x) return ConversationHandler.END
def check(bot, update): thread = var.get('blogarticlethread', None) if thread == None or thread.isAlive() == False: var.set('blogarticlethread', None) update.message.reply_text('发送完成\n/wm 开启新的一篇文章') return ConversationHandler.END else: update.message.reply_text('发送中...\n/check 检查发送进度\n/cancel 退出写作模式') return SENT
def rss(bot, update): if not check_admin(update.message.from_user.id): return # show info and help text = '''Miniflux url: {} user: {} feeds num: {} bind channel: {} lastest entry id: {} unread num: {} max unread num: {} --- /rssadd add a new rss feed /rsssetlatestentryid <id> set latest entry id '''.format(const.MINIFLUX_URL, const.MINIFLUX_USER, miniflux_client.get_feeds_num(), const.MINIFLUX_CHANNEL_ID, var.get('rsslatestid', None), var.get('rssunreadnum', None), const.MINIFLUX_MAXUNREAD) update.message.reply_text(text)
def check_admin(check_id): admin_list = var.get('admin_list', []) if check_id in admin_list: return True return False
# 总未读数量限制 0 or 20 import const, var import miniflux_client import telegram from telegram import InlineKeyboardButton, InlineKeyboardMarkup import re # MINIFLUX_MAXUNREAD var.get('rssunreadnum', 0) htmltag = re.compile(r'</?\w+[^>]*>') def escapehtml(s): return htmltag.sub('', s) def get_info(entry): ret = '' ret += "%s\n" % entry['title'] ret += '%s\n' % entry['author'] ret += entry['url'] + '\n' ret += '%s, .%d\n' % (entry['published_at'], entry['id']) s = escapehtml(entry['content']) s = s.replace('\r\n', '\n') while '\n\n' in s: s = s.replace('\n\n', '\n') if len(s) < 500: ret += s else: ret += s[:500] + '...' return ret
from telegram.ext import (CommandHandler, ConversationHandler, RegexHandler, MessageHandler, Filters) def check_admin(check_id): admin_list = var.get('admin_list', []) if check_id in admin_list: return True return False def rsssetlatestentryid(bot, update, args): if not check_admin(update.message.from_user.id): return # show info and help result = '' entryid = -1 try: entryid = int(args[0]) var.set('rsslatestid', entryid) result = 'ok ' + str(entryid) except Exception as e: result = 'error ' + str(e) update.message.reply_text(result) var.get('rsslatestid', miniflux_client.get_latest_entry_id()) _handler = CommandHandler('rsssetlatestentryid', rsssetlatestentryid, pass_args=True)
def confirm_no(bot, update): update.message.reply_text( '(%d)\n%s' % (len(var.get('blogarticle', '')), var.get('blogarticle', '')[-500:] + '...\n/preview 命令来预览发送\n/cancel 命令退出写作模式')) return WM
def callback_query(bot, update): if not check_admin(update.callback_query.from_user.id): return callback_data = update.callback_query.data origin_message_id = update.callback_query.message.message_id text = update.callback_query.message.text chat_id = update.callback_query.message.chat_id args = callback_data.split(',') entryid = int(args[1]) isread = int(args[2]) isstar = int(args[3]) motd_keyboard = None callbackanswer = '' if args[0] == 'rssmarkread': motd_keyboard = [[ InlineKeyboardButton('📦 ✅', callback_data="rssmarkunread,%d,%d,%d" % (entryid, 1, isstar)), InlineKeyboardButton( '✨' + ['', ' ✅'][isstar], callback_data="%s,%d,%d,%d" % (("rssmarkstar", "rssmarkunstar")[isstar], entryid, 1, isstar)) ]] callbackanswer = 'å·²æ ‡è®°ä¸ºå·²è¯»' elif args[0] == 'rssmarkstar': motd_keyboard = [[ InlineKeyboardButton( '📦 ✅', callback_data="%s,%d,%d,%d" % (("rssmarkread", "rssmarkunread")[1], entryid, isread, 1)), InlineKeyboardButton('✨ ✅', callback_data="rssmarkunstar,%d,%d,%d" % (entryid, isread, 1)) ]] callbackanswer = 'å·²æ˜Ÿæ ‡' elif args[0] == 'rssmarkunread': motd_keyboard = [[ InlineKeyboardButton('📦', callback_data="rssmarkread,%d,%d,%d" % (entryid, 0, isstar)), InlineKeyboardButton( '✨' + ['', ' ✅'][isstar], callback_data="%s,%d,%d,%d" % (("rssmarkstar", "rssmarkunstar")[isstar], entryid, 0, isstar)) ]] callbackanswer = 'å·²æ ‡è®°ä¸ºæœªè¯»' elif args[0] == 'rssmarkunstar': motd_keyboard = [[ InlineKeyboardButton('📦' + ['', ' ✅'][isread], callback_data="%s,%d,%d,%d" % (("rssmarkread", "rssmarkunread")[isread], entryid, isread, 0)), InlineKeyboardButton('✨', callback_data="rssmarkstar,%d,%d,%d" % (entryid, isread, 0)) ]] callbackanswer = 'å·²åŽ»æŽ‰æ˜Ÿæ ‡' else: return motd_markup = InlineKeyboardMarkup(motd_keyboard) bot.edit_message_text(chat_id=chat_id, message_id=origin_message_id, text=text, reply_markup=motd_markup) bot.answer_callback_query(callback_query_id=update.callback_query.id, text=callbackanswer) if args[0] == 'rssmarkread': var.set('rssunreadnum', var.get('rssunreadnum', 1) - 1) miniflux_client.markread(entryid) elif args[0] == 'rssmarkstar': miniflux_client.markread(entryid) miniflux_client.markstar(entryid) elif args[0] == 'rssmarkunread': miniflux_client.markunread(entryid) elif args[0] == 'rssmarkunstar': miniflux_client.markunstar(entryid) else: return