最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

智能聊天

一、 概述

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

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

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

二、 使用方法

同時(shí),其還有一些拓展的功能!

三、 接入程序

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

private_script.py文件中,添加一個(gè)函數(shù),同時(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:  # 簡(jiǎn)單的判斷,只是判斷其是否為空
        _ = await get_resp(message)
        ret = _.get("content", "獲取回復(fù)失敗")
        await send(uid, f"{ret}\n發(fā)送時(shí)間:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
async def get_resp(message):  # 對(duì)接口發(fā)送請(qǐng)求,獲取響應(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)

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

四、 智能群聊

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

  • 實(shí)現(xiàn)群聊艾特回復(fù)功能
  • 實(shí)現(xiàn)戳一戳回復(fù)功能
  • 實(shí)現(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):
        # 這里對(duì)消息進(jìn)行分發(fā),暫時(shí)先設(shè)置一個(gè)簡(jiǎn)單的分發(fā)
        _ = request.json
        if _.get("message_type") == "private":  # 說明有好友發(fā)送信息過來
            uid = _["sender"]["user_id"]  # 獲取發(fā)信息的好友qq號(hào)
            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ā)送消息的群號(hào)
            asyncio.run(group_script.handle_group(gid, message))、
        elif _.get("notice_type") == "group_increase":  # 有新成員加入
            uid = _["user_id"]  # 獲取加入者的qq
            gid = _["group_id"]  # 獲取群號(hào)
            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":  # 判斷是否戳的是自己的賬號(hào)
                return
            try:
                gid = _["group_id"]
            except KeyError as e:
                gid = None
            asyncio.run(group_script.click_event(uid, gid))  # 傳入群號(hào)和qq號(hào)
api.add_resource(AcceptMes, "/", endpoint="index")
if __name__ == '__main__':
    app.run("0.0.0.0", 5701, debug=True)  # 注意,這里的端口要和配置文件中的保持一致

創(chuàng)建一個(gè)文件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:  # 簡(jiǎn)單的判斷,只是判斷其是否為空
        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群號(hào),值是歡迎語
        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: 群號(hào)
    :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",
    "沒問題么?〒沒問題的話,我就溜了哦!",
    "睡覺去,困死了!",
    "戳我干啥!本人在敘利亞做兼職呢?沒事別煩我!",
    "你好呀!我在躺平呢!請(qǐng)問有啥事呀?",
    "hello",
    "[CQ:poke,qq=%d]",
]

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

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

相關(guān)文章

  • 詳解如何解決golang定時(shí)器引發(fā)的id重復(fù)問題

    詳解如何解決golang定時(shí)器引發(fā)的id重復(fù)問題

    這篇文章主要為大家詳細(xì)介紹了如何解決golang定時(shí)器引發(fā)的id重復(fù)問題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • Golang如何調(diào)用windows下的dll動(dòng)態(tài)庫中的函數(shù)

    Golang如何調(diào)用windows下的dll動(dòng)態(tài)庫中的函數(shù)

    這篇文章主要介紹了Golang如何調(diào)用windows下的dll動(dòng)態(tài)庫中的函數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • GoLang?channel關(guān)閉狀態(tài)相關(guān)操作詳解

    GoLang?channel關(guān)閉狀態(tài)相關(guān)操作詳解

    Channel?和?goroutine?的結(jié)合是?Go?并發(fā)編程的大殺器。而?Channel?的實(shí)際應(yīng)用也經(jīng)常讓人眼前一亮,通過與?select,cancel,timer?等結(jié)合,它能實(shí)現(xiàn)各種各樣的功能。接下來,我們就要介紹GoLang?channel關(guān)閉狀態(tài)相關(guān)操作
    2022-10-10
  • Goland和IDEA換行符的設(shè)置方式

    Goland和IDEA換行符的設(shè)置方式

    這篇文章主要介紹了Goland和IDEA換行符的設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Go切片導(dǎo)致rand.Shuffle產(chǎn)生重復(fù)數(shù)據(jù)的原因與解決方案

    Go切片導(dǎo)致rand.Shuffle產(chǎn)生重復(fù)數(shù)據(jù)的原因與解決方案

    在 Go 語言的實(shí)際開發(fā)中,切片(slice)是一種非常靈活的數(shù)據(jù)結(jié)構(gòu),然而,由于其底層數(shù)據(jù)共享的特性,在某些情況下可能會(huì)導(dǎo)致意想不到的 Bug,本文將詳細(xì)分析 rand.Shuffle 之后,切片中的數(shù)據(jù)出現(xiàn)重復(fù)的問題,探討其根本原因,并給出最佳解決方案,需要的朋友可以參考下
    2025-02-02
  • Golang?中的?unsafe.Pointer?和?uintptr詳解

    Golang?中的?unsafe.Pointer?和?uintptr詳解

    這篇文章主要介紹了Golang中的unsafe.Pointer和uintptr詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • golang中的container/heap包使用

    golang中的container/heap包使用

    Golang中的container/heap包提供堆操作,適用于實(shí)現(xiàn)了heap.Interface的類型,本文主要介紹了golang中的container/heap包使用,感興趣的可以了解一下
    2025-02-02
  • Golang?Compare?And?Swap算法詳細(xì)介紹

    Golang?Compare?And?Swap算法詳細(xì)介紹

    CAS算法是一種有名的無鎖算法。無鎖編程,即不使用鎖的情況下實(shí)現(xiàn)多線程之間的變量同步,也就是在沒有線程被阻塞的情況下實(shí)現(xiàn)變量的同步,所以也叫非阻塞同步Non-blocking?Synchronization
    2022-10-10
  • 加速開發(fā):使用Go語言和Gin框架構(gòu)建Web項(xiàng)目的利器

    加速開發(fā):使用Go語言和Gin框架構(gòu)建Web項(xiàng)目的利器

    Go語言和Gin框架是構(gòu)建高性能Web項(xiàng)目的利器,Go語言的簡(jiǎn)潔性和并發(fā)性,以及Gin框架的輕量級(jí)和快速路由能力,使開發(fā)者能夠快速構(gòu)建可靠的Web應(yīng)用程序,需要的朋友可以參考下
    2023-09-09
  • golang defer執(zhí)行順序全面詳解

    golang defer執(zhí)行順序全面詳解

    這篇文章主要為大家介紹了golang defer執(zhí)行順序全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論

嘉黎县| 洛南县| 安平县| 恩施市| 革吉县| 六盘水市| 常州市| 阳泉市| 枣强县| 共和县| 长子县| 玉溪市| 万宁市| 泰州市| 喀喇沁旗| 梁河县| 潮州市| 西乡县| 昭平县| 平原县| 罗城| 武邑县| 连平县| 石楼县| 合作市| 仁怀市| 陈巴尔虎旗| 神池县| 仙居县| 泾源县| 盐亭县| 白银市| 渑池县| 贵德县| 韩城市| 沅陵县| 涞水县| 宾川县| 南汇区| 永年县| 沙洋县|