首页 > 其他分享 >QQ聊天机器人OneBot部署的探索

QQ聊天机器人OneBot部署的探索

时间:2024-08-07 21:28:04浏览次数:11  
标签:QQ await group OneBot 机器人 msg import message zhiling

QQ聊天机器人OneBot部署的探索

贴个垃圾代码。。
底下有写得好一点的垃圾。。。。。

import aiohttp
import asyncio
import json,jsonpath
import ollama
from ollama import Client
client = Client(host='http://localhost:11434')
from ollama import AsyncClient

async def chat(content:str):
  message = {'role': 'user', 'content': content}
  response = await AsyncClient().chat(model='qwen2:7b', messages=[message])
  return response

str1 = '{\
    "action": "send_group_msg",\
    "params": {\
        "group_id": 175736385,\
        "message": [{\
            "type": "text",\
            "data": {\
                "text": "'
str2 = '"\
            }}, {\
            "type": "image",\
            "data": {\
                "file": "https://moe.jitsu.top/img/"\
            }\
            }]\
    },\
    "echo": "123"\
}'
async def connect_websocket(url):
    try:
        async with aiohttp.ClientSession() as session:
            async with session.ws_connect(url) as ws:
                await ws.send_str(str1)

                async for msg in ws:
                    if msg.type == aiohttp.WSMsgType.TEXT:
                        print(msg.data)
                        a = json.loads(msg.data)
                        # b = jsonpath.jsonpath(a,'$..raw_message')
                        #if(type(a["data"]) == dict):
                        try:
                            
                            print("1111111111111:",a["raw_message"])
                        except KeyError as ke:
                            pass
                        try:
                            print('raw_message',a["raw_message"])
                            # response = client.chat(model='qwen2:7b', messages=[
                            #         {
                            #             'role': 'user',
                            #             'content': a["raw_message"],
                            #         },
                            #     ])
                            response = asyncio.run(await chat(a["raw_message"]))
                            #response = '啊啊啊'
                            str = str1 + response + str2
                            await ws.send_str(str)
                        except:
                            print('aaaaaaa~aaaaaaaaa')
                    elif msg.type == aiohttp.WSMsgType.CLOSED:
                        break

    except aiohttp.ClientError as err:
        print(f'Error: {err}')

loop = asyncio.get_event_loop()
loop.run_until_complete(connect_websocket('http://localhost:3001'))

下面是目前在写的,在用的,AI没有上下文就很难受了。。。。搞半天没弄出个所以然
但是只能贴一部分

  • AIollama.py
import ollama
from ollama import AsyncClient
#client = ollama.Client(host="localhost:11434")
client = AsyncClient(host="http://localhost:11434")

async def chat(content:str) -> str:
    message = {'role': 'user', 'content': content}
    # context1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
    # response = await client.generate(model='qwen2:7b',context=context1,prompt=content,stream=False)
    # return response["response"]
    response = await client.chat(model='qwen2:7b',messages=[message],stream=False)
    return response["message"]["content"]

# def get_response(prompt) -> str:
    return client.chat(
        model="qwen2:7b",
        messages=[
            {
                "role": "user",
                "content": prompt,
            },
        ],
        stream=False
    )
  • main.py
import asyncio
from re import split
import AIollama
from bot import Bot, Command
from message import MessageList
from event import Event, PostType
import requests as req
async def msgProc(bot: Bot, m: Event):
    print(m.check().raw)
    zhiling = m.check().get_msg()
    print(zhiling)
    match zhiling:
        case _ if "/echo" in zhiling:
            if(zhiling != "/echo"):
                zhiling = zhiling.replace("/echo ", "")
            await bot.send_group_msg(m.check().raw["group_id"],[MessageList.text(zhiling)])
        case "/bing":
            zhiling = req.request(
                "get",
                "https://cn.bing.com/HPImageArchive.aspx",
                params={"format": "js", "idx": 0, "n": 1}
            )
            print(zhiling.text)
            zhiling = zhiling.json()
            zhiling = "https://cn.bing.com" + zhiling["images"][0]["url"]
            
            #"https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"
            await bot.send_group_msg(m.check().raw["group_id"],[MessageList.image(str(zhiling))])
        case "/random":
            await bot.send_group_msg(m.check().raw["group_id"],[MessageList.image("https://moe.jitsu.top/img/")])
        case "/help":
            await bot.send_group_msg(m.check().raw["group_id"],[MessageList.text("/bing——必应每日一图\n/dev——发送调试信息\n/random——随机二次元\n/help——帮助\n/echo——重复话语")])
        case _ if "/ai" in zhiling:
            chatText = zhiling.replace("/ai ", "")
            await bot.send_group_msg(m.check().raw["group_id"],[MessageList.text(await AIollama.chat(chatText))])

async def main():
    cmd = Command("")
    bot = Bot("http://localhost:3001", cmd)
    cmd.cmds.append(msgProc)
    await bot.connect()
    await bot.run()
    print("aa")

if __name__=='__main__':
    asyncio.run(main())

标签:QQ,await,group,OneBot,机器人,msg,import,message,zhiling
From: https://www.cnblogs.com/lyxyz5223/p/18347908/QQRobot

相关文章

  • 构建基于检索但具有对话元素的聊天机器人
    我正在寻求用Python创建一个基于足球统计的非常小的聊天机器人。就个人经验而言,我在银行业担任开发人员并拥有IT背景,但是我对Python相对较新,所以还在学习语法。我了解OOP语言的概念,所以它对我来说并不陌生。我正在寻找与我的聊天机器人类似的对话流程:“莱昂......
  • 2024年第二十六届IRO国际机器人奥林匹克大赛中国总决赛
     首页大赛项目大赛动态在线教育关于我们合作加盟    首页大赛动态动态详情2024年第二十六届IRO国际机器人奥林匹克大赛中国总决赛报名日期:2024-07-1511:20:55-2024-08-0823:59:59举办时间:2024-08-2208:00:00-2024-08-2318:00:0......
  • 2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛)
    2024睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛)前言补题只补了前四道,第五题打个暴力都有\(24\)分,我这死活只有\(22\)分\(QAQ\)RC-u1大家一起查作弊思路按题意模拟。不过很奇怪赛时用getline老是读入不了,还好换成cin直接读也问题不大。代码#include<bits......
  • AI就业指导机器人,你的专属职业导航灯!
    本文由ChatMoney团队出品介绍说明Hey!亲爱的小伙伴们,今天我要给大家带来一个职场利器——AI就业指导机器人!......
  • 实用好软-----电脑端 微信 QQ TIM防撤回补丁工具
    官方开源软件:告别针对单一版本的补丁,这个软件可以自动识别版本并安装补丁,告别繁琐操作。功能描述:适用于Windows下PC版微信/QQ/TIM的防撤回补丁。支持最新版微信/QQ/TIM,其中微信能够选择安装多开功能。测试挺好玩的。兴趣的友友可以测试下工具使用方法:首先,你的系统需要......
  • 使用OpenAI API搭建AI聊天机器人
    在本文中,我们将介绍如何使用OpenAIAPI搭建一个简单的AI聊天机器人。为了便于国内用户访问,我们将使用中专API地址http://api.wlai.vip。什么是OpenAIAPIOpenAIAPI提供了一系列强大的自然语言处理(NLP)模型,这些模型可以用来执行各种任务,如文本生成、翻译、问答、摘要等。......
  • 022.(附加)chromedriver编译-绕过selenium机器人检测
    有小伙伴说使用selenium没能绕过机器人检测,盘他。一、selenium简介Selenium是一个强大的工具,用于Web浏览器自动化,更常被用于爬虫但selenium需要通过webdriver来驱动chrome,每次运行selenium时,都要先找到对应版本的chromedriver.exe。chromedriver自动化会对浏览器的部分属......
  • 基于飞书机器人的基础跨账号消息提醒
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、添加飞书机器人二、在飞书机器人助手配置流程三、存在的问题以及后续前言飞书企业账号和个人账号是独立的,然而不知道为什么它不支持跨账号消息提醒。在多次忽略领导消息后痛定思痛,......
  • Luogu7740 [NOI2021]机器人游戏 做题记录
    link一道炸裂的题目。首先样例解释已经告诉我们可以容斥。考虑枚举可行的位置集合\(S\),我们需要统计\(\forallp\inS\),纸条初始状态和目标状态都相同的方案数。显然每个机器人独立,可以分开考虑。对于一个机器人,他的行动对纸条的每个格子要么赋值为\(0/1\),要么不变,要么取......
  • 无需编程打造交易机器人,助我力压华尔街专业投资者!
    作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:    这篇文章部分编译摘录自外网投资大神“HenriqueCentieiro&BeeLee”的专栏(原文: UseThisChatGPTTradingBottoBeat99%ofWallStreetInvestors!)而我开发的AI顾投平台也学习了他们文中提......