summaryrefslogtreecommitdiff
path: root/AyaBot/plugins/chat.py
diff options
context:
space:
mode:
Diffstat (limited to 'AyaBot/plugins/chat.py')
-rw-r--r--AyaBot/plugins/chat.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/AyaBot/plugins/chat.py b/AyaBot/plugins/chat.py
new file mode 100644
index 0000000..38a4759
--- /dev/null
+++ b/AyaBot/plugins/chat.py
@@ -0,0 +1,80 @@
+# -*- coding:utf-8 -*-
+import time
+import httpx
+import string
+import nonebot
+import hashlib
+from AyaBot.plugins import *
+from random import randint
+from urllib.parse import urlencode
+from nonebot.helpers import context_id, render_expression
+from nonebot import on_command, CommandSession, on_natural_language, NLPSession, IntentCommand
+
+bot = nonebot.get_bot()
+
+ERROR_REPLY = (
+ '吾辈不是很能理解主人的意思...',
+ '(。´・ω・)ん?',
+ 'ん?',
+ 'あつ...脑子坏了..理解不能',
+ '吾辈想听主人再说一次...'
+)
+
+class Chat(object):
+ URL = 'https://api.ai.qq.com/fcgi-bin/nlp/nlp_textchat'
+ app_id = bot.config.TX_APP_ID
+ app_key = bot.config.TX_APPKEY
+ print(app_id, app_key)
+ nonce_str_example = 'fa577ce340859f9fe'
+ ct = lambda: time.time()
+
+ @classmethod
+ def get_nonce_str(self):
+ nonce_str = ''
+ len_str = string.digits + string.ascii_letters
+ for i in range(len(self.nonce_str_example)):
+ nonce_str += len_str[randint(0, len(len_str) - 1)]
+ return nonce_str
+
+ @classmethod
+ def sign(self, req_data):
+ new_list = sorted(req_data.items())
+ encode_list = urlencode(new_list)
+ req_data = encode_list + "&" + "app_key" + "=" + self.app_key
+ md5 = hashlib.md5()
+ md5.update(req_data.encode('utf-8'))
+ data = md5.hexdigest()
+ return data.upper()
+
+ @classmethod
+ async def request(self, text):
+ req_data = {
+ 'app_id': self.app_id,
+ 'time_stamp': int(self.ct()),
+ 'nonce_str': self.get_nonce_str(),
+ 'session': 10000,
+ 'question': text,
+ }
+ print(req_data)
+ req_data['sign'] = self.sign(req_data)
+ req_data = sorted(req_data.items())
+ requests = httpx.AsyncClient()
+ result = await requests.get(self.URL, params=req_data)
+ await requests.aclose()
+ result = result.json()
+ print(result)
+ if result['ret'] == 0:
+ return result['data']['answer']
+ return render_expression(ERROR_REPLY)
+
+
+@on_command('chat')
+async def chat(session: CommandSession):
+ msg = session.state.get('msg')
+ reply = await Chat.request(msg)
+ await session.finish(reply)
+ return
+
+@on_natural_language
+async def _(session: NLPSession):
+ return IntentCommand(60.0, ('chat'), {'msg': session.msg_text}) \ No newline at end of file