From 059ce6228bc3887e4617da492ab9f417003eb8d7 Mon Sep 17 00:00:00 2001 From: midoks Date: Wed, 15 Mar 2023 15:09:03 +0800 Subject: [PATCH] Update receive_faq.py --- plugins/tgbot/startup/extend/receive_faq.py | 189 ++++++++++++++------ 1 file changed, 139 insertions(+), 50 deletions(-) diff --git a/plugins/tgbot/startup/extend/receive_faq.py b/plugins/tgbot/startup/extend/receive_faq.py index e1f12606d..4884e854f 100644 --- a/plugins/tgbot/startup/extend/receive_faq.py +++ b/plugins/tgbot/startup/extend/receive_faq.py @@ -7,6 +7,9 @@ import json import base64 import threading +sys.path.append(os.getcwd() + "/class/core") +import mw + import telebot from telebot import types from telebot.util import quick_markup @@ -31,76 +34,160 @@ def getReadCmd(cmd, msg): return real_msg -def searchFaq(bot, message, cmd_text): - # print(search_text) - return_msg = "你正在寻找【" + cmd_text + "】答案:\n" - return_msg += "此功能还在开发中...请持续关注!\n" - bot.reply_to(message, return_msg) - return True +def getFaqKw(cmd): + matchObj = re.match(r'寻找【(.*?)】问题如下', cmd, re.M | re.I) + data = matchObj.groups() + if len(data) > 0: + return True, data[0] + return False, '' -def searchDebugReply(bot, message, cmd_text): - markup = types.ReplyKeyboardMarkup(row_width=2) - itembtn1 = types.KeyboardButton('a') - itembtn2 = types.KeyboardButton('v') - itembtn3 = types.KeyboardButton('d') - markup.add(itembtn1, itembtn2, itembtn3) - bot.send_message(chat_id, "Choose one letter:", reply_markup=markup) - - # or add KeyboardButton one row at a time: - markup = types.ReplyKeyboardMarkup() - itembtna = types.KeyboardButton('a') - itembtnv = types.KeyboardButton('v') - itembtnc = types.KeyboardButton('c') - itembtnd = types.KeyboardButton('d') - itembtne = types.KeyboardButton('e') - markup.row(itembtna, itembtnv) - markup.row(itembtnc, itembtnd, itembtne) - bot.send_message(message.chat.id, "Choose one letter:", - reply_markup=markup) - - markup = types.ReplyKeyboardRemove(selective=False) - bot.send_message(message.chat.id, message, reply_markup=markup) - # bot.reply_to(message, "http://baidu.com") - return True +def searchHttpPage(kw='', p=1, size=1): + import urllib + kw = kw.strip() + kw = urllib.parse.quote_plus(kw) + + api = 'https://bbs.midoks.me/plugin.php?id=external_api&f=bbs_search&q=' + kw + \ + '&size=' + str(size) + '&p=' + str(p) + + # print('url', api) + data = mw.httpGet(api) + # print(data) + data = json.loads(data) + # print(data) + if data['code'] > -1: + alist = data['data']['list'] + r = [] + for x in alist: + tmp = {} + tmp['tid'] = x['tid'] + tmp['subject'] = x['subject'] + tmp['url'] = 'https://bbs.midoks.me/forum-' + x['tid'] + '-1.html' + r.append(tmp) + data['data']['list'] = r + return data -def searchDebugMsgInline(bot, message, cmd_text): - button = { - "如何在安装面板?": {"callback_data": "bbs_id_1"}, - "如何在安装面板2?": {"callback_data": "bbs_id_2"}, - "下一页": {"callback_data": "bbs_pre"}, - "上一页": {"url": "google.com"} - } - bot.reply_to(message, "Test", - reply_markup=quick_markup(button, row_width=2)) - # bot.send_message(message.chat.id, "Test",reply_markup=quick_markup(button, row_width=2)) +def searchFaq(bot, message, cmd_text): + # cmd_text = 'mw' + data = searchHttpPage(cmd_text, 1, 5) + if data['code'] == 0 and len(data['data']['list']) > 0: + keyboard = [] + + dlist = data['data']['list'] + for x in dlist: + keyboard.append([types.InlineKeyboardButton( + text=x['subject'], url=x['url'])]) + + keyboard.append([ + types.InlineKeyboardButton( + text="下一页", callback_data='bbs_next_page_2'), + types.InlineKeyboardButton( + text="第" + str(data['data']['p']) + "页,共" + str(data['data']['page_num']) + "页", callback_data='bbs_page_total') + ]) + + keyboard.append([types.InlineKeyboardButton( + text="关闭消息", callback_data='bbs_search_close')]) + + # print(keyboard) + markup = types.InlineKeyboardMarkup(keyboard) + bot.send_message(message.chat.id, "寻找【" + + cmd_text.strip() + "】问题如下:", reply_markup=markup) + else: + keyboard = [ + [ + types.InlineKeyboardButton( + text="论坛", url='https://bbs.midoks.me'), + types.InlineKeyboardButton( + text="搜索", url='https://bbs.midoks.me/search.php') + ], + [ + types.InlineKeyboardButton( + text="关闭消息", callback_data='bbs_search_close') + ] + + ] + markup = types.InlineKeyboardMarkup(keyboard) + bot.send_message( + message.chat.id, "未找到合适内容,请在官方论坛[bbs.midoks.me]提问!", reply_markup=markup) + return True def searchDebug(bot, message, cmd_text): - searchDebugMsgInline(bot, message, cmd_text) + searchFaq(bot, message, cmd_text) return True def answer_callback_query(bot, call): - print(call) - bot.send_message(call.message.chat.id, "Test Callback") - # bot.answer_callback_query(call.id) + + keyword = call.data + + if keyword == 'bbs_search_close': + bot.delete_message(chat_id=call.message.chat.id, + message_id=call.message.message_id) + return + + is_bbs_page = False + p = 1 + if keyword.startswith('bbs_next_page'): + is_bbs_page = True + p = keyword.replace('bbs_next_page_', '') + + if keyword.startswith('bbs_pre_page'): + is_bbs_page = True + p = keyword.replace('bbs_pre_page_', '') + + # print("p", p) + if is_bbs_page: + is_match, cmd_text = getFaqKw(call.message.text) + if not is_match: + bot.edit_message_text( + chat_id=call.message.chat.id, message_id=call.message.message_id, text="出现错误!") + return + + data = searchHttpPage(cmd_text, int(p), 5) + + dlist = data['data']['list'] + # print(data) + keyboard = [] + for x in dlist: + keyboard.append([types.InlineKeyboardButton( + text=x['subject'], url=x['url'])]) + + page_nav = [] + if int(data['data']['p']) > 1: + page_nav.append(types.InlineKeyboardButton( + text="上一页", callback_data='bbs_pre_page_' + str(int(p) - 1))) + + if data['data']['page_num'] != data['data']['p']: + page_nav.append(types.InlineKeyboardButton( + text="下一页", callback_data='bbs_next_page_' + str(int(p) + 1))) + + page_nav.append(types.InlineKeyboardButton( + text="第" + str(data['data']['p']) + "页,共" + str(data['data']['page_num']) + "页", callback_data='bbs_page_total')) + + keyboard.append(page_nav) + + keyboard.append([types.InlineKeyboardButton( + text="关闭消息", callback_data='bbs_search_close')]) + + markup = types.InlineKeyboardMarkup(keyboard) + bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, + text=call.message.text, reply_markup=markup) def run(bot, message): - print(message) text_body = message.text # print(text_body) if isThisCmd('/faq:', text_body): cmd_text = getReadCmd('/faq:', text_body) return searchFaq(bot, message, cmd_text) - if isThisCmd('/debug', text_body): - cmd_text = getReadCmd('/debug', text_body) - return searchDebug(bot, message, cmd_text) + # if isThisCmd('/debug', text_body): + # cmd_text = getReadCmd('/debug', text_body) + # return searchDebug(bot, message, cmd_text) if text_body.find('?') > -1 or text_body.find('?') > -1: return_msg = "你似乎在寻找【" + text_body + "】答案:\n" @@ -111,5 +198,7 @@ def run(bot, message): if __name__ == "__main__": - print(isThisCmd('/?:', '/?:如何在安装面板')) - print(getReadCmd('/?:', '/?:如何在安装面板')) + # print(isThisCmd('/?:', '/?:如何在安装面板')) + # print(getReadCmd('/?:', '/?:如何在安装面板')) + # print(searchHttpPage('mw')) + print(getFaqKw('寻找【mw】问题如下:'))