Impl HTTP API
This commit is contained in:
@@ -46,3 +46,8 @@ groups:
|
|||||||
# key: 填写你 ChatGPT 的 key
|
# key: 填写你 ChatGPT 的 key
|
||||||
# api: https://api.openai.com/v1 # 如果你不知道这是干嘛的,就不要改
|
# api: https://api.openai.com/v1 # 如果你不知道这是干嘛的,就不要改
|
||||||
# proxy: # 如果你在国内,你可能需要魔法,大概长这样:http://域名或者IP地址:端口号
|
# proxy: # 如果你在国内,你可能需要魔法,大概长这样:http://域名或者IP地址:端口号
|
||||||
|
|
||||||
|
# 如果需要暴露 HTTP 接口,取消下面的注释
|
||||||
|
# http:
|
||||||
|
# host: 0.0.0.0
|
||||||
|
# port: 9999
|
||||||
|
|||||||
@@ -29,3 +29,4 @@ class Config(object):
|
|||||||
logging.config.dictConfig(yconfig["logging"])
|
logging.config.dictConfig(yconfig["logging"])
|
||||||
self.GROUPS = yconfig["groups"]["enable"]
|
self.GROUPS = yconfig["groups"]["enable"]
|
||||||
self.CHATGPT = yconfig.get("chatgpt")
|
self.CHATGPT = yconfig.get("chatgpt")
|
||||||
|
self.HTTP = yconfig.get("http")
|
||||||
|
|||||||
55
func_http.py
Normal file
55
func_http.py
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
#! /usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import logging
|
||||||
|
from typing import Any
|
||||||
|
import uvicorn
|
||||||
|
import threading
|
||||||
|
from fastapi import FastAPI
|
||||||
|
from wcferry import Wcf
|
||||||
|
|
||||||
|
|
||||||
|
class Http(FastAPI):
|
||||||
|
"""将 wcferry 能力转成 HTTP 协议的示例"""
|
||||||
|
|
||||||
|
def __init__(self, wcf: Wcf, **extra: Any) -> None:
|
||||||
|
super().__init__(**extra)
|
||||||
|
self.wcf = wcf
|
||||||
|
self.LOG = logging.getLogger(__name__)
|
||||||
|
self.add_api_route("/send", self.send_text, methods=["GET"])
|
||||||
|
|
||||||
|
def send_text(self, msg: str, receiver: str, aters: str = "") -> dict:
|
||||||
|
ret = self.wcf.send_text(msg, receiver, aters)
|
||||||
|
|
||||||
|
return {"status": ret, "msg": msg, "receiver": receiver, "aters": aters}
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def start(http, host, port):
|
||||||
|
threading.Thread(name="HTTP",
|
||||||
|
target=uvicorn.run,
|
||||||
|
kwargs={"app": http, "host": host, "port": port}).start()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import time
|
||||||
|
import signal
|
||||||
|
|
||||||
|
from configuration import Config
|
||||||
|
c = Config().HTTP
|
||||||
|
if not c:
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
def handler(sig, frame):
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
signal.signal(signal.SIGINT, handler)
|
||||||
|
|
||||||
|
wcf = Wcf("tcp://127.0.0.1:10086")
|
||||||
|
home = "https://github.com/lich0821/WeChatFerry"
|
||||||
|
http = Http(wcf=wcf,
|
||||||
|
title="API for send text",
|
||||||
|
description=f"Github: <a href='{home}'>WeChatFerry</a>",)
|
||||||
|
Http.start(http, c.get("host", "0.0.0.0"), c.get("port", 9999))
|
||||||
|
|
||||||
|
while True:
|
||||||
|
time.sleep(1)
|
||||||
7
main.py
7
main.py
@@ -37,6 +37,13 @@ def main():
|
|||||||
# 机器人启动发送测试消息
|
# 机器人启动发送测试消息
|
||||||
robot.sendTextMsg("机器人启动成功!", "filehelper")
|
robot.sendTextMsg("机器人启动成功!", "filehelper")
|
||||||
|
|
||||||
|
# 暴露 HTTP 接口供发送消息,需要在配置文件中取消 http 注释
|
||||||
|
# 接口文档:http://localhost:9999/docs
|
||||||
|
# 访问示例:
|
||||||
|
# 1. 浏览器访问:http://localhost:9999/send?msg=hello%20world&receiver=filehelper
|
||||||
|
# 2. curl -X 'GET' 'http://localhost:9999/send?msg=hello%20world&receiver=filehelper' -H 'accept: application/json'
|
||||||
|
robot.enableHTTP()
|
||||||
|
|
||||||
# 接收消息
|
# 接收消息
|
||||||
robot.enableRecvMsg()
|
robot.enableRecvMsg()
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
fastapi
|
||||||
openai
|
openai
|
||||||
pandas
|
pandas
|
||||||
pyyaml
|
pyyaml
|
||||||
schedule
|
schedule
|
||||||
|
uvicorn[standard]
|
||||||
wcferry
|
wcferry
|
||||||
|
|||||||
18
robot.py
18
robot.py
@@ -1,15 +1,17 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import logging
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
import logging
|
|
||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
|
|
||||||
|
import uvicorn
|
||||||
from wcferry import Wcf
|
from wcferry import Wcf
|
||||||
|
|
||||||
from configuration import Config
|
from configuration import Config
|
||||||
from func_chengyu import cy
|
|
||||||
from func_chatgpt import ChatGPT
|
from func_chatgpt import ChatGPT
|
||||||
|
from func_chengyu import cy
|
||||||
|
from func_http import Http
|
||||||
from job_mgmt import Job
|
from job_mgmt import Job
|
||||||
|
|
||||||
|
|
||||||
@@ -186,3 +188,15 @@ class Robot(Job):
|
|||||||
# 添加了好友,更新好友列表
|
# 添加了好友,更新好友列表
|
||||||
self.allContacts[msg.sender] = nickName[0]
|
self.allContacts[msg.sender] = nickName[0]
|
||||||
self.sendTextMsg(f"Hi {nickName[0]},我自动通过了你的好友请求。", msg.sender)
|
self.sendTextMsg(f"Hi {nickName[0]},我自动通过了你的好友请求。", msg.sender)
|
||||||
|
|
||||||
|
def enableHTTP(self) -> None:
|
||||||
|
"""暴露 HTTP 发送消息接口供外部调用,不配置则忽略"""
|
||||||
|
c = self.config.HTTP
|
||||||
|
if not c:
|
||||||
|
return
|
||||||
|
|
||||||
|
home = "https://github.com/lich0821/WeChatFerry"
|
||||||
|
http = Http(wcf=self.wcf,
|
||||||
|
title="API for send text",
|
||||||
|
description=f"Github: <a href='{home}'>WeChatFerry</a>",)
|
||||||
|
Http.start(http, c["host"], c["port"])
|
||||||
|
|||||||
Reference in New Issue
Block a user