mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-07-20 21:57:14 +08:00
fix: optimize code format
This commit is contained in:
@@ -6,32 +6,22 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# -*- coding=utf-8 -*-
|
# -*- coding=utf-8 -*-
|
||||||
import uuid
|
|
||||||
|
|
||||||
import requests
|
|
||||||
import web
|
|
||||||
from channel.dingtalk.dingtalk_message import DingTalkMessage
|
from channel.dingtalk.dingtalk_message import DingTalkMessage
|
||||||
from bridge.context import Context
|
from bridge.context import Context
|
||||||
from bridge.reply import Reply, ReplyType
|
from bridge.reply import Reply
|
||||||
from common.log import logger
|
from common.log import logger
|
||||||
from common.singleton import singleton
|
from common.singleton import singleton
|
||||||
from config import conf
|
from config import conf
|
||||||
from common.expired_dict import ExpiredDict
|
from common.expired_dict import ExpiredDict
|
||||||
from bridge.context import ContextType
|
from bridge.context import ContextType
|
||||||
from channel.chat_channel import ChatChannel, check_prefix
|
from channel.chat_channel import ChatChannel
|
||||||
from common import utils
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import logging
|
import logging
|
||||||
from dingtalk_stream import AckMessage
|
from dingtalk_stream import AckMessage
|
||||||
import dingtalk_stream
|
import dingtalk_stream
|
||||||
|
|
||||||
|
|
||||||
@singleton
|
@singleton
|
||||||
class DingTalkChanel(ChatChannel,dingtalk_stream.ChatbotHandler):
|
class DingTalkChanel(ChatChannel, dingtalk_stream.ChatbotHandler):
|
||||||
dingtalk_client_id = conf().get('dingtalk_client_id')
|
dingtalk_client_id = conf().get('dingtalk_client_id')
|
||||||
dingtalk_client_secret = conf().get('dingtalk_client_secret')
|
dingtalk_client_secret = conf().get('dingtalk_client_secret')
|
||||||
|
|
||||||
@@ -43,34 +33,27 @@ class DingTalkChanel(ChatChannel,dingtalk_stream.ChatbotHandler):
|
|||||||
logger.addHandler(handler)
|
logger.addHandler(handler)
|
||||||
logger.setLevel(logging.INFO)
|
logger.setLevel(logging.INFO)
|
||||||
return logger
|
return logger
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
super(dingtalk_stream.ChatbotHandler, self).__init__()
|
super(dingtalk_stream.ChatbotHandler, self).__init__()
|
||||||
|
|
||||||
self.logger = self.setup_logger()
|
self.logger = self.setup_logger()
|
||||||
# 历史消息id暂存,用于幂等控制
|
# 历史消息id暂存,用于幂等控制
|
||||||
self.receivedMsgs = ExpiredDict(60 * 60 * 7.1)
|
self.receivedMsgs = ExpiredDict(60 * 60 * 7.1)
|
||||||
|
|
||||||
logger.info("[dingtalk] client_id={}, client_secret={} ".format(
|
logger.info("[dingtalk] client_id={}, client_secret={} ".format(
|
||||||
self.dingtalk_client_id, self.dingtalk_client_secret))
|
self.dingtalk_client_id, self.dingtalk_client_secret))
|
||||||
# 无需群校验和前缀
|
# 无需群校验和前缀
|
||||||
conf()["group_name_white_list"] = ["ALL_GROUP"]
|
conf()["group_name_white_list"] = ["ALL_GROUP"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def startup(self):
|
def startup(self):
|
||||||
|
credential = dingtalk_stream.Credential(self.dingtalk_client_id, self.dingtalk_client_secret)
|
||||||
credential = dingtalk_stream.Credential( self.dingtalk_client_id, self.dingtalk_client_secret)
|
|
||||||
client = dingtalk_stream.DingTalkStreamClient(credential)
|
client = dingtalk_stream.DingTalkStreamClient(credential)
|
||||||
client.register_callback_handler(dingtalk_stream.chatbot.ChatbotMessage.TOPIC,self)
|
client.register_callback_handler(dingtalk_stream.chatbot.ChatbotMessage.TOPIC, self)
|
||||||
client.start_forever()
|
client.start_forever()
|
||||||
|
|
||||||
def handle_single(self, cmsg:DingTalkMessage):
|
def handle_single(self, cmsg: DingTalkMessage):
|
||||||
# 处理单聊消息
|
# 处理单聊消息
|
||||||
#
|
|
||||||
|
|
||||||
if cmsg.ctype == ContextType.VOICE:
|
if cmsg.ctype == ContextType.VOICE:
|
||||||
|
|
||||||
logger.debug("[dingtalk]receive voice msg: {}".format(cmsg.content))
|
logger.debug("[dingtalk]receive voice msg: {}".format(cmsg.content))
|
||||||
elif cmsg.ctype == ContextType.IMAGE:
|
elif cmsg.ctype == ContextType.IMAGE:
|
||||||
logger.debug("[dingtalk]receive image msg: {}".format(cmsg.content))
|
logger.debug("[dingtalk]receive image msg: {}".format(cmsg.content))
|
||||||
@@ -78,20 +61,14 @@ class DingTalkChanel(ChatChannel,dingtalk_stream.ChatbotHandler):
|
|||||||
logger.debug("[dingtalk]receive patpat msg: {}".format(cmsg.content))
|
logger.debug("[dingtalk]receive patpat msg: {}".format(cmsg.content))
|
||||||
elif cmsg.ctype == ContextType.TEXT:
|
elif cmsg.ctype == ContextType.TEXT:
|
||||||
expression = cmsg.my_msg
|
expression = cmsg.my_msg
|
||||||
|
|
||||||
cmsg.content = conf()["single_chat_prefix"][0] + cmsg.content
|
cmsg.content = conf()["single_chat_prefix"][0] + cmsg.content
|
||||||
|
|
||||||
context = self._compose_context(cmsg.ctype, cmsg.content, isgroup=False, msg=cmsg)
|
context = self._compose_context(cmsg.ctype, cmsg.content, isgroup=False, msg=cmsg)
|
||||||
|
|
||||||
if context:
|
if context:
|
||||||
self.produce(context)
|
self.produce(context)
|
||||||
|
|
||||||
def handle_group(self, cmsg:DingTalkMessage):
|
def handle_group(self, cmsg: DingTalkMessage):
|
||||||
# 处理群聊消息
|
# 处理群聊消息
|
||||||
#
|
|
||||||
|
|
||||||
if cmsg.ctype == ContextType.VOICE:
|
if cmsg.ctype == ContextType.VOICE:
|
||||||
|
|
||||||
logger.debug("[dingtalk]receive voice msg: {}".format(cmsg.content))
|
logger.debug("[dingtalk]receive voice msg: {}".format(cmsg.content))
|
||||||
elif cmsg.ctype == ContextType.IMAGE:
|
elif cmsg.ctype == ContextType.IMAGE:
|
||||||
logger.debug("[dingtalk]receive image msg: {}".format(cmsg.content))
|
logger.debug("[dingtalk]receive image msg: {}".format(cmsg.content))
|
||||||
@@ -99,20 +76,14 @@ class DingTalkChanel(ChatChannel,dingtalk_stream.ChatbotHandler):
|
|||||||
logger.debug("[dingtalk]receive patpat msg: {}".format(cmsg.content))
|
logger.debug("[dingtalk]receive patpat msg: {}".format(cmsg.content))
|
||||||
elif cmsg.ctype == ContextType.TEXT:
|
elif cmsg.ctype == ContextType.TEXT:
|
||||||
expression = cmsg.my_msg
|
expression = cmsg.my_msg
|
||||||
|
|
||||||
cmsg.content = conf()["group_chat_prefix"][0] + cmsg.content
|
cmsg.content = conf()["group_chat_prefix"][0] + cmsg.content
|
||||||
context = self._compose_context(cmsg.ctype, cmsg.content, isgroup=True, msg=cmsg)
|
context = self._compose_context(cmsg.ctype, cmsg.content, isgroup=True, msg=cmsg)
|
||||||
context['no_need_at']=True
|
context['no_need_at'] = True
|
||||||
if context:
|
if context:
|
||||||
self.produce(context)
|
self.produce(context)
|
||||||
|
|
||||||
|
|
||||||
async def process(self, callback: dingtalk_stream.CallbackMessage):
|
async def process(self, callback: dingtalk_stream.CallbackMessage):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
||||||
incoming_message = dingtalk_stream.ChatbotMessage.from_dict(callback.data)
|
incoming_message = dingtalk_stream.ChatbotMessage.from_dict(callback.data)
|
||||||
dingtalk_msg = DingTalkMessage(incoming_message)
|
dingtalk_msg = DingTalkMessage(incoming_message)
|
||||||
if incoming_message.conversation_type == '1':
|
if incoming_message.conversation_type == '1':
|
||||||
@@ -124,41 +95,6 @@ class DingTalkChanel(ChatChannel,dingtalk_stream.ChatbotHandler):
|
|||||||
logger.error(e)
|
logger.error(e)
|
||||||
return self.FAILED_MSG
|
return self.FAILED_MSG
|
||||||
|
|
||||||
|
|
||||||
def send(self, reply: Reply, context: Context):
|
def send(self, reply: Reply, context: Context):
|
||||||
|
|
||||||
|
|
||||||
incoming_message = context.kwargs['msg'].incoming_message
|
incoming_message = context.kwargs['msg'].incoming_message
|
||||||
self.reply_text(reply.content, incoming_message)
|
self.reply_text(reply.content, incoming_message)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# def _compose_context(self, ctype: ContextType, content, **kwargs):
|
|
||||||
# context = Context(ctype, content)
|
|
||||||
# context.kwargs = kwargs
|
|
||||||
# if "origin_ctype" not in context:
|
|
||||||
# context["origin_ctype"] = ctype
|
|
||||||
|
|
||||||
# cmsg = context["msg"]
|
|
||||||
# context["session_id"] = cmsg.from_user_id
|
|
||||||
# context["receiver"] = cmsg.other_user_id
|
|
||||||
|
|
||||||
# if ctype == ContextType.TEXT:
|
|
||||||
# # 1.文本请求
|
|
||||||
# # 图片生成处理
|
|
||||||
# img_match_prefix = check_prefix(content, conf().get("image_create_prefix"))
|
|
||||||
# if img_match_prefix:
|
|
||||||
# content = content.replace(img_match_prefix, "", 1)
|
|
||||||
# context.type = ContextType.IMAGE_CREATE
|
|
||||||
# else:
|
|
||||||
# context.type = ContextType.TEXT
|
|
||||||
# context.content = content.strip()
|
|
||||||
|
|
||||||
# elif context.type == ContextType.VOICE:
|
|
||||||
# # 2.语音请求
|
|
||||||
# if "desire_rtype" not in context and conf().get("voice_reply_voice"):
|
|
||||||
# context["desire_rtype"] = ReplyType.VOICE
|
|
||||||
|
|
||||||
# return context
|
|
||||||
|
|||||||
@@ -24,5 +24,5 @@ class ChatClient(LinkAIClient):
|
|||||||
|
|
||||||
def start(channel):
|
def start(channel):
|
||||||
client = ChatClient(api_key=conf().get("linkai_api_key"),
|
client = ChatClient(api_key=conf().get("linkai_api_key"),
|
||||||
host="link-ai.chat", channel=channel)
|
host="testclient.link-ai.tech", channel=channel)
|
||||||
client.start()
|
client.start()
|
||||||
|
|||||||
@@ -19,9 +19,6 @@
|
|||||||
"ChatGPT测试群",
|
"ChatGPT测试群",
|
||||||
"ChatGPT测试群2"
|
"ChatGPT测试群2"
|
||||||
],
|
],
|
||||||
"group_chat_in_one_session": [
|
|
||||||
"ChatGPT测试群"
|
|
||||||
],
|
|
||||||
"image_create_prefix": [
|
"image_create_prefix": [
|
||||||
"画"
|
"画"
|
||||||
],
|
],
|
||||||
@@ -32,8 +29,7 @@
|
|||||||
"expires_in_seconds": 3600,
|
"expires_in_seconds": 3600,
|
||||||
"character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。",
|
"character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。",
|
||||||
"temperature": 0.7,
|
"temperature": 0.7,
|
||||||
"top_p": 1,
|
"subscribe_msg": "感谢您的关注!\n这里是AI智能助手,可以自由对话。\n支持语音对话。\n支持图片输入。\n支持图片输出,画字开头的消息将按要求创作图片。\n支持tool、角色扮演和文字冒险等丰富的插件。\n输入{trigger_prefix}#help 查看详细指令。",
|
||||||
"subscribe_msg": "感谢您的关注!\n这里是ChatGPT,可以自由对话。\n支持语音对话。\n支持图片输入。\n支持图片输出,画字开头的消息将按要求创作图片。\n支持tool、角色扮演和文字冒险等丰富的插件。\n输入{trigger_prefix}#help 查看详细指令。",
|
|
||||||
"use_linkai": false,
|
"use_linkai": false,
|
||||||
"linkai_api_key": "",
|
"linkai_api_key": "",
|
||||||
"linkai_app_code": ""
|
"linkai_app_code": ""
|
||||||
|
|||||||
@@ -13,12 +13,7 @@ langid # language detect
|
|||||||
#install plugin
|
#install plugin
|
||||||
dulwich
|
dulwich
|
||||||
|
|
||||||
# wechaty
|
# wechatmp && wechatcom
|
||||||
wechaty>=0.10.7
|
|
||||||
wechaty_puppet>=0.4.23
|
|
||||||
# pysilk_mod>=1.6.0 # needed by send voice only in wechaty
|
|
||||||
|
|
||||||
# wechatmp wechatcom
|
|
||||||
web.py
|
web.py
|
||||||
wechatpy
|
wechatpy
|
||||||
|
|
||||||
@@ -36,3 +31,9 @@ broadscope_bailian
|
|||||||
|
|
||||||
# google
|
# google
|
||||||
google-generativeai
|
google-generativeai
|
||||||
|
|
||||||
|
# linkai
|
||||||
|
linkai
|
||||||
|
|
||||||
|
# dingtalk
|
||||||
|
dingtalk_stream
|
||||||
|
|||||||
Reference in New Issue
Block a user