欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go-cqhttp智能聊天功能的實現(xiàn)

 更新時間:2022年09月13日 09:47:19   作者:A-L-Kun  
這篇文章主要介紹了go-cqhttp智能聊天功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

智能聊天

一、 概述

我們將我們的qq聊天機(jī)器人的環(huán)境配置好后,其就可以開始接收消息啦!那么,我們除了可以接收特定的消息,是不是還需要接收那些不是我們指定的消息呢?我想是的!那么,我們要如何接入呢?

這里,我找了一個比較好用的聊天機(jī)器人的API接口。可以將其接入我們的程序中,做一個陪聊小助手。當(dāng)然,如果你機(jī)器學(xué)習(xí)學(xué)的比較好的話,你也可以自己訓(xùn)練一個模型來實現(xiàn)智能聊天的接口。

我們選擇的是青云客智能聊天

二、 使用方法

同時,其還有一些拓展的功能!

三、 接入程序

我們暫時只對私信消息進(jìn)行處理,接入我們的智能聊天接口

private_script.py文件中,添加一個函數(shù),同時修改處理私聊消息的接口:

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "private_script.py.py"
__time__ = "2022/9/9 22:04"

import httpx
from datetime import datetime
async def handle_private(uid, message):  # 處理私聊信息
    if message:  # 簡單的判斷,只是判斷其是否為空
        _ = await get_resp(message)
        ret = _.get("content", "獲取回復(fù)失敗")
        await send(uid, f"{ret}\n發(fā)送時間:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
async def get_resp(message):  # 對接口發(fā)送請求,獲取響應(yīng)數(shù)據(jù)
    async with httpx.AsyncClient() as client:
        params = {
            "key": "free",
            "appid": 0,
            "msg": message,
        }
        resp = await client.get("http://api.qingyunke.com/api.php", params=params)
        return resp.json()
async def send(uid, message):
    """
    用于發(fā)送消息的函數(shù)
    :param uid: 用戶id
    :param message: 發(fā)送的消息
    :return: None
    """
    async with httpx.AsyncClient(base_url="http://127.0.0.1:5700") as client:
        # 如果發(fā)送的為私聊消息
        params = {
            "user_id": uid,
            "message": message,
        }
        await client.get("/send_private_msg", params=params)

這個文件負(fù)責(zé)發(fā)送私聊信息

四、 智能群聊

我們這里開發(fā)一個智能水群的功能,其可以自動的根據(jù)群消息回復(fù),同時增加了進(jìn)群歡迎的功能!

  • 實現(xiàn)群聊艾特回復(fù)功能
  • 實現(xiàn)戳一戳回復(fù)功能
  • 實現(xiàn)新入群成員歡迎功能

在我們的main.py中,添加接口

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "main.py"
__time__ = "2022/9/9 22:03"

from flask import Flask, request
from flask_restful import Resource, Api
import private_script, group_script
import asyncio
app = Flask(__name__)

api = Api(app)
class AcceptMes(Resource):

    def post(self):
        # 這里對消息進(jìn)行分發(fā),暫時先設(shè)置一個簡單的分發(fā)
        _ = request.json
        if _.get("message_type") == "private":  # 說明有好友發(fā)送信息過來
            uid = _["sender"]["user_id"]  # 獲取發(fā)信息的好友qq號
            message = _["raw_message"]  # 獲取發(fā)送過來的消息
            asyncio.run(private_script.handle_private(uid, message))
        elif _.get("message_type") == "group" and "[CQ:at,qq=2786631176]" in _["raw_message"]:  # 制作群聊消息
            message = _["raw_message"].replace("[CQ:at,qq=2786631176]", "")  # 獲取發(fā)送過來的消息
            gid = _["group_id"]  # 獲取發(fā)送消息的群號
            asyncio.run(group_script.handle_group(gid, message))、
        elif _.get("notice_type") == "group_increase":  # 有新成員加入
            uid = _["user_id"]  # 獲取加入者的qq
            gid = _["group_id"]  # 獲取群號
            asyncio.run(group_script.group_increase(uid, gid))  # 發(fā)送歡迎語
        elif _.get("sub_type") == "poke":  # 如果事件類型為戳一戳
            uid = _["user_id"]
            tid = _["target_id"]
            if str(tid) != "3500515050" and str(tid) != "2786631176":  # 判斷是否戳的是自己的賬號
                return
            try:
                gid = _["group_id"]
            except KeyError as e:
                gid = None
            asyncio.run(group_script.click_event(uid, gid))  # 傳入群號和qq號
api.add_resource(AcceptMes, "/", endpoint="index")
if __name__ == '__main__':
    app.run("0.0.0.0", 5701, debug=True)  # 注意,這里的端口要和配置文件中的保持一致

創(chuàng)建一個文件group_script.py,用于處理群聊消息

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "group_script.py"
__time__ = "2022/9/10 11:49"
import httpx
import private_script
import config
from random import choice
async def handle_group(gid, message):  # 處理群聊信息
    if str(gid) in config.allow_group_id:  # 簡單的判斷,只是判斷其是否為空
        if message.strip() == "":
            await send(gid, "艾特我干啥?又不發(fā)消息,一巴掌呼死你![CQ:face,id=86][CQ:face,id=12]")
        else:
            _ = await private_script.get_resp(message)
            ret = _.get("content", "獲取回復(fù)失敗")
            await send(gid, ret)
async def group_increase(uid, gid):  # 處理有新成員加入的情況
    if str(gid) in config.allow_group_id:
        msg = config.welcome_group.get(str(gid), config.welcome_group["default"]) % uid  # welcome_group的鍵是qq群號,值是歡迎語
        await send(gid, msg)  # 發(fā)送信息


async def click_event(uid, gid):
    info = choice(config.click_info)  # 獲取戳一戳的信息
    try:
        info = info % uid
    except TypeError:
        if gid:  # 說明其為群戳戳
            info = f"[CQ:at,qq={uid}]" + info
    if gid:
        await send(gid, info)
    else:
        await private_script.send(uid, info)
async def send(gid, message):
    """
    用于發(fā)送消息的函數(shù)
    :param gid: 群號
    :param message: 發(fā)送的消息
    :return: None
    """
    async with httpx.AsyncClient(base_url="http://127.0.0.1:5700") as client:
        # 如果發(fā)送的為私聊消息
        params = {
            "group_id": gid,
            "message": message.replace("{br}", "\n").replace("菲菲", "坤坤"),
        }
        await client.get("/send_group_msg", params=params)

設(shè)置配置文件config.py

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
__author__ = "A.L.Kun"
__file__ = "config.py"
__time__ = "2022/9/10 11:57"
allow_group_id = [
]

welcome_group = {  # 新成員進(jìn)入回復(fù)信息
    "default": f"[CQ:at,qq=%d] 歡迎加入本群,來了就別想走哦![CQ:face,id={43}]",
}
click_info = [  # 戳一戳的回復(fù)信息
    "?有事嗎?沒事我走了![CQ:face,id=125],goodbye",
    "沒問題么?〒沒問題的話,我就溜了哦!",
    "睡覺去,困死了!",
    "戳我干啥!本人在敘利亞做兼職呢?沒事別煩我!",
    "你好呀!我在躺平呢!請問有啥事呀?",
    "hello",
    "[CQ:poke,qq=%d]",
]

最后,我們開發(fā)的智能聊天就可以使用了!

到此這篇關(guān)于go-cqhttp智能聊天功能的文章就介紹到這了,更多相關(guān)go-cqhttp智能聊天內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析Go語言bitset的實現(xiàn)原理

    淺析Go語言bitset的實現(xiàn)原理

    bitset包是一個將非負(fù)整數(shù)映射到布爾值的位的集合,這篇文章主要通過開源包bitset來為大家分析一下位集合的設(shè)計和實現(xiàn),感興趣的可以學(xué)習(xí)一下
    2023-08-08
  • 深入理解Golang中的dig包管理和解決依賴關(guān)系

    深入理解Golang中的dig包管理和解決依賴關(guān)系

    這篇文章主要為大家詳細(xì)介紹了golang中dig包的使用方法,探討其應(yīng)用場景,并提供一些示例,展示如何結(jié)合其他庫來更好地實現(xiàn)這些場景,感興趣的小伙伴可以了解下
    2024-01-01
  • 淺析golang如何在多線程中避免CPU指令重排

    淺析golang如何在多線程中避免CPU指令重排

    這篇文章主要為大家詳細(xì)介紹了golang在多線程中避免CPU指令重排的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Go數(shù)組與切片輕松掌握

    Go數(shù)組與切片輕松掌握

    在Java的核心庫中,集合框架可謂鼎鼎大名:Array、List、Set等等,隨便拎一個出來都值得開發(fā)者好好學(xué)習(xí)如何使用甚至是背后的設(shè)計源碼。雖然Go語言沒有如此豐富的容器類型,但也有一些基本的容器供開發(fā)者使用,接下來讓我們認(rèn)識一下這些容器類型吧
    2022-11-11
  • golang sql語句超時控制方案及原理

    golang sql語句超時控制方案及原理

    一般應(yīng)用程序在執(zhí)行一條sql語句時,都會給這條sql設(shè)置一個超時時間,本文主要介紹了golang sql語句超時控制方案及原理,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • go panic時如何讓函數(shù)返回數(shù)據(jù)?

    go panic時如何讓函數(shù)返回數(shù)據(jù)?

    今天小編就為大家分享一篇關(guān)于go panic時如何讓函數(shù)返回數(shù)據(jù)?,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • Golang的鎖機(jī)制與使用技巧小結(jié)

    Golang的鎖機(jī)制與使用技巧小結(jié)

    本文主要介紹了Golang的鎖機(jī)制與使用技巧小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 手把手帶你走進(jìn)Go語言之循環(huán)語句

    手把手帶你走進(jìn)Go語言之循環(huán)語句

    在不少實際問題中有許多具有規(guī)律性的重復(fù)操作,因此在程序中就需要重復(fù)執(zhí)行某些語句。一組被重復(fù)執(zhí)行的語句稱之為循環(huán)體,能否繼續(xù)重復(fù),決定循環(huán)的終止條件,本文給大家介紹的非常詳細(xì),跟著小編往下看吧
    2021-09-09
  • Go基本數(shù)據(jù)類型與string類型互轉(zhuǎn)

    Go基本數(shù)據(jù)類型與string類型互轉(zhuǎn)

    本文主要介紹了Go基本數(shù)據(jù)類型與string類型互轉(zhuǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go-ethereum?解析ethersjs中產(chǎn)生的簽名信息思路詳解

    Go-ethereum?解析ethersjs中產(chǎn)生的簽名信息思路詳解

    這篇文章主要介紹了Go-ethereum?解析ethersjs中產(chǎn)生的簽名信息,我們解析簽名的需要知道,簽名的消息,簽名,和公鑰,按照這個思路,我們可以通過ethers實現(xiàn)消息的簽名,也可以通過go-ethereum實現(xiàn),需要的朋友可以參考下
    2022-08-08

最新評論