mirror of https://github.com/midoks/mdserver-web
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
217 lines
6.4 KiB
217 lines
6.4 KiB
import sys
|
|
import io
|
|
import os
|
|
import time
|
|
import re
|
|
import json
|
|
import base64
|
|
import threading
|
|
|
|
web_dir = os.getcwd() + "/web"
|
|
if os.path.exists(web_dir):
|
|
sys.path.append(web_dir)
|
|
os.chdir(web_dir)
|
|
|
|
import core.mw as mw
|
|
|
|
import telebot
|
|
from telebot import types
|
|
from telebot.util import quick_markup
|
|
|
|
|
|
def isThisCmd(cmd, msg):
|
|
clen = len(cmd)
|
|
msg_len = len(msg)
|
|
if msg_len < clen:
|
|
return False
|
|
|
|
check_msg = msg[0:clen]
|
|
if cmd == check_msg:
|
|
return True
|
|
return False
|
|
|
|
|
|
def getReadCmd(cmd, msg):
|
|
clen = len(cmd)
|
|
msg_len = len(msg)
|
|
real_msg = msg[clen:]
|
|
return real_msg
|
|
|
|
|
|
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 searchHttpPage(kw='', p=1, size=1):
|
|
import urllib
|
|
kw = kw.strip()
|
|
kw = urllib.parse.quote_plus(kw)
|
|
|
|
api = 'https://bbs.midoks.icu/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.icu/thread-' + \
|
|
x['tid'] + '-1-1.html'
|
|
r.append(tmp)
|
|
data['data']['list'] = r
|
|
return data
|
|
|
|
|
|
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.icu'),
|
|
types.InlineKeyboardButton(
|
|
text="搜索", url='https://bbs.midoks.icu/search.php')
|
|
],
|
|
[
|
|
types.InlineKeyboardButton(
|
|
text="关闭消息", callback_data='bbs_search_close')
|
|
]
|
|
|
|
]
|
|
markup = types.InlineKeyboardMarkup(keyboard)
|
|
bot.send_message(
|
|
message.chat.id, "未找到合适内容,请在官方论坛[bbs.midoks.icu]提问!", reply_markup=markup)
|
|
|
|
return True
|
|
|
|
|
|
def searchDebug(bot, message, cmd_text):
|
|
searchFaq(bot, message, cmd_text)
|
|
return True
|
|
|
|
|
|
def answer_callback_query(bot, call):
|
|
|
|
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):
|
|
text_body = message.text
|
|
|
|
# 过滤URL
|
|
is_has_url = re.search(
|
|
'(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]', text_body)
|
|
if is_has_url:
|
|
return bot
|
|
|
|
# print(text_body)
|
|
if isThisCmd('/?:', text_body):
|
|
cmd_text = getReadCmd('/?:', text_body)
|
|
cmd_text = cmd_text.strip().strip(":")
|
|
if cmd_text == "":
|
|
return bot.send_message(message.chat.id, "搜索内容不能为空, 例如:/?: 数据库")
|
|
return searchFaq(bot, message, cmd_text)
|
|
|
|
if isThisCmd('/faq', text_body):
|
|
cmd_text = getReadCmd('/faq', text_body)
|
|
cmd_text = cmd_text.strip().strip(":")
|
|
if cmd_text == "":
|
|
return bot.send_message(message.chat.id, "搜索内容不能为空, 例如:/faq 数据库")
|
|
return searchFaq(bot, message, cmd_text)
|
|
|
|
return bot
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# print(isThisCmd('/?:', '/?:如何在安装面板'))
|
|
# print(getReadCmd('/?:', '/?:如何在安装面板'))
|
|
# print(searchHttpPage('mw'))
|
|
print(getFaqKw('寻找【mw】问题如下:'))
|
|
|