python实现一个QQ群聊天机器人

本文分享了基于SmartQQ协议开发QQ群聊天机器人的过程,包括项目选择、二次开发及遇到的问题。通过python框架SmartQQBot,实现了文本解析与响应,但存在登录cookie失效和长时间未访问挂掉等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近由于项目需求,需要做个QQ群的聊天机器人用于回答咨询的问题。在这样的情况下,我开始了QQ机器人的踩坑之旅。
这个机器人需求就是在群里有人@机器人+问题时,机器人通过检测信息是否有@之后,提取其中问题再进行检索。其实就相当于一个制作一个简单的问答系统基于QQ群这个平台。
通过查找的资料来看,QQ聊天机器人目前都是基于SmartQQ协议开发的。那么首先让我们来了解一下SmartQQ,这里贴上wiki对SmartQQ的解释:

WebQQ是腾讯于2009915日正式推出的一项服务,该服务可以使用户在不安装QQ软件的情况下使用QQ的部分服务。
20139月,WebQQ改名SmartQQ发布。它在界面方面和手机QQ非常相似,聊天方式则又和Pad版的QQ类似。
域名为w.qq.com
由于安全问题,限制为仅能扫描二维码登录。
至此,已经了解到QQ机器人是基于什么基础开发的了,若是自己根据SmartQQ协议开发一套API就太费时费力了。首先,我到github上搜索了一波之后,发现有许多QQ机器人相关的项目,其中不乏有使用python开发的框架。花了一点时间download了一些项目测试之后,找到了一个比较友好的项目--------SmartQQBot
github地址如下:https://github.com/Yinzo/SmartQQBot

在这里插入图片描述

查看一波文档后,大概了解了如何进行二次开发(写一个插件)。可以直接在manage.py中,添加你要实现的代码。

from smart_qq_bot.messages import GroupMsg, PrivateMsg
from smart_qq_bot.signals import on_all_message, on_bot_inited
from smart_qq_bot.logger import logger

@on_all_message(name="PluginManger[test]")
def test_bot(msg, bot):
    result = do_test(msg, bot)
    if result is not None:
        return bot.reply_msg(msg, result)

def do_test(msg, bot):
    content = msg.content
    content = Converter('zh-hans').convert(content)
    nick = bot.username
    atnick = '@'+nick
    content_1 = content.replace(' ', '')

    if atnick == content_1:
        answer = "请按照以下方法进行询问:{a} +您的问题".format(a=atnick)
        return "%s" % answer

    ask_message = content.replace(atnick+' ', '')

    if atnick in content:
        src_sender_name = msg.src_sender_name
        print("%s" % src_sender_name)
        try:
            answer = getanswers(ask_message)
        except:
            response_json = tuling(ask_message)
            answer = response_json.get('text')
            # answer = "抱歉,机器人无法理解您的意思,请换一种问法试试!"
        return "@%s %s"% (src_sender_name, answer)


def getanswers(ask_message):
    connection = sqlite3.connect('./LZ_ZX.sqlite3')
    sql = "select * from 'asks_answer' where class4='%{ask}%'".format(ask=ask_message)
    sql_like = "select * from 'asks_answer' where class4 LIKE '%{ask}%'".format(ask=ask_message)
    df = pd.read_sql_query(sql, connection)
    if len(df) == 0:
        df = pd.read_sql_query(sql_like, connection)
    df = df[df["part"] == '0']
    answer = df['answer']
    answer = answer.values
    answer_1 = answer[0]
    connection.close()
    return answer_1

不过问题还有一下几个:

  • 程序运行一天后,会因为登录cookie失效和退出
  • 程序在大约4个小时没有人访问的情况下会挂掉,不做出任何回应。
  • QQBot只能做出文本解析,和文本回应。这意味着这个项目的难点在于:怎样使得Bot的回答是提问者想要的结果。
avbot 连通 IRC、XMPP 和 QQ, 并作为 AVIM 机器人实现 AVIM 群聊功能. 能实时记录聊天信息。每日自动生成新的日志文件。使用方法和介绍参考 社区维基的avbot介绍编译请参考 社区维基的avbot编译指导For Windows 编译注意windows 版本有自动编译版,请到 ftp://ci.avplayer.org 下载。想了解 avbot 最重要的子模块 libwebqq 请点开 libwebqq 目录查看其 README.md支持的系统cmake >= 3.0GCC 系centos >= 7ubuntu >= 14.04debian >= 7和其他一些 gcc >= 4.8 的系统。MSVC 系VisutalStudio 2013 (支持 Vista 以上系统)VisutalStudio 2013 - vc120_xp toolset (支持 Windows XP 以上系统)启用步骤cmake -G "VisualStudio 12 2013 Win64" -T "vc120_xp"icc 系icc >= 14clang 系clang >= 3.4编译注意事项请不要在源码文件夹里直接执行 cmake. 务必创建一个专用的文件夹存放编译中间文件,如建立个 build 文件夹。 然后在 build 文件夹里执行 cmake PATH_TO_AVBOT因为 cmake 有很多时候,需要删除 build 文件夹重新执行,而在源码内部直接 cmake ,则因为文件夹混乱,不好清除中间文件boost 相关boost 需要至少 1.57 版本。boost 请静态编译, gentoo 用户注意 USE=static-libs emerge boostwin 下, boost 请使用 link=static runtime-link=static 执行静态编译 (包括 mingw 下)。linux 下如果必须自己编译 boost 的话,请使用参数 link=static runtime-link=shared --layout=system variant=release --prefix=/usr 执行编译。link=static 表示编译为静态库, runtime-link=static 则表示,应用程序最终会使用静态链接的 C 运行时。这个在 windows 平台是必须的要求。因为 VC 的 C 和 C 运行时打包起来非常麻烦。(mingw 的也一样)linux 那边 runtime-link=shared 表示使用动态链接的 libstdc .so, libstdc .so 无需静态链接,不是么 ;)添加 --layout=system variant=release 才能编译出 libbosot_context.a 这样的不带各种后缀的库版本。MSVC 相关理论上 2012 版本也是支持的,不过没有测试过。cmake 生成好 VC 工程然后打开 avbot.sln 即可。如果 boost 在 c:/boost 则无需额外设置 如果不是,需要设定 BOOST_ROOT, 可以在 cmake-gui 里点 configure 按钮前,通过 "Add Enytry" 按钮添加。关于历史avbot 的历史剧烈膨胀, 达到 127MB 之巨, 已经严重影响到国内用户执行 git clone 了. 正好 avbot 经历了一次重构, 因此重构后 avbot 丢弃全部历史轻装上阵. 当然历史并非真的丢弃, 已经有一份完整的历史在 https://github.com/microcai/avbot 备份了.关于商业开发avbot 提供一份商业授权. 因为 avbot 对 XMPP 协议的支持是使用的 gloox, gloox 是个GPL授权的库. 因此 xmpp 支持会被禁用. 除非你同时购买了 gloox 的商业授权.购买商业授权后, 您可以:1. 修改avbot的代码并无需公开自己的修改 2. 获得为期一年的技术支持 (可续) 3. 将 avbot 集成到自己的商业产品中 标签:avbot  聊天机器人  avplayer
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值