微信机器人对接ChatGPT

新闻资讯   2023-06-20 18:03   102   0  

如题

实现微信机器人的几种方案

一般来说有三种实现微信机器人的方式

  • 企业微信
  • 网页版微信
  • 微信HOOK

企业微信

企业微信 开发者中心 - https://developer.work.weixin.qq.com/

这玩意是需要营业执照的 所以没开公司之前别想了

网页版微信

网页版微信 https://wx.qq.com/

基于网页版微信登录实现的机器人其实就是封装了一层http,但是大部分微信都不能通过网页版登录,比如说我自己的微信,所以这个方法也不行

微信HOOK

蒽....这是我们采取的方式

下载指定版本的微信和注入器 就能够hook微信对应方法的接口,在代码中实现消息监听和发送等动作了

环境准备

下载指定版本的微信

https://github.com/tom-snow/wechat-windows-versions/releases?page=2

这里我使用 Wechat v3.2.1.121

安装之后记得取消掉自动升级

下载安装后还需要使用对应的DLL注入器

注入器地址

https://github.com/zhizhuoshuma/WechatBot

运行注入器

选择对应版本的微信并进行注入

基于NGCBot来修改

所有调用API的代码在Api_Server中,根据自己的需求裁剪

以获取各平台文章为例

# 获取各平台安全文章
def get_safety_news(self, ):
    news_list = ''
    output("[+]:正在爬取安全新闻... ...")
    news_list = self.get_xz_news(news_list)
    news_list = self.get_qax_news(news_list)
    news_list = self.get_anquanke_news(news_list)
    output("[+]:获取成功")
    news_list += f"\n{self.system_copyright + '整理分享,更多内容请戳 #' + self.system_copyright if self.system_copyright else ''}\n{time.strftime('%Y-%m-%d %X')}"
    return news_list.strip()

可以看到就是获取内容之后返回一个文本

具体调用这个方法的地方在

# 管理员功能-晚报推送
def send_evening_page(self, ws, roomid):
    msg = self.Asm.get_safety_news()
    ws.send(self.Ss.send_msg(msg=msg, wxid=roomid))

当然这里需要先实例化对象

# 实例化接口服务类
self.Asm = Api_Server_Main()

然后把消息发送出去

具体的判断关键字是在

# 判断关键词
def judge_keyword(self, keyword, custom_keyword, split_bool=False, one_bool=False):
    # 分割触发
    if split_bool:
        keyword = keyword.split(' ')
        for ckw in custom_keyword:
            for kw in keyword:
                if ckw == kw:
                    return True
    # 单个触发
    elif one_bool:
        return True if keyword.strip() == custom_keyword.strip() else False
    # 单个循环触发
    elif keyword and custom_keyword and not split_bool and not one_bool:
        return True if [ckw for ckw in custom_keyword if ckw == keyword] else False

裁剪之后API这部分变成了

class Api_Server_Main:
    def __init__(self):
        urllib3.disable_warnings()

    # AI对话接口
    def get_ai(self, keyword):
        msg=""
        return msg

我们在get_ai中编写自己的逻辑

合入GPT访问代码

因为之前一直在看gpt4free,所以这里直接对接这部分代码就行

目录结构为

/you文件夹就不用说了,就是之前gpt4free的,这里直接复制过来就行

Api_Server_Main里面的关键的代码如下

def get_answer(self,question: str) -> str:
    # Set cloudflare clearance cookie and get answer from GPT-4 model
    try:
        result = you.Completion.create(prompt=question)
        return result.text

    except Exception as e:
        # Return error message if an exception occurs
        return (
            f'An error occurred: {e}. Please make sure you are using a valid cloudflare clearance token and user agent.'
        )

# AI对话接口
def get_ai(self, keyword):
    question="请用中文回答,"+keyword
    answer=self.get_answer(question)
    msg=answer.encode().decode("unicode_escape")

    return msg

为啥question里面我自己拼接了这部分

question="请用中文回答,"+keyword

因为我发现在you.com网站回答问题的时候 大多数时候都是回答的英文,为了避免出现这个问题,所以进行了强制要求

最终效果

最后的效果是

所以在群里面提问的话就会有机器人进行响应了

END

建了一个微信的安全交流群,欢迎添加我微信备注进群,一起来聊天吹水哇,以及一个会发布安全相关内容的公众号,欢迎关注 :)

加我拉你入群黑糖安全公众号


文章引用微信公众号"黑糖安全",如有侵权,请联系管理员删除!

博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。