精华内容
下载资源
问答
  • qqbot机器人编程实例(一)

    千次阅读 2018-01-21 19:38:48
    qqbot机器人编程实例(一)写在前面从很早的时候看到别人的群里有能够自动回复的机器人开始,我就在思考这样的功能是如何实现的,那时还没有接触过编程,所以后来也就不了了之。前一段时间我在网上看到了对qqbot这个...

    qqbot机器人编程实例(一)

    写在前面

    从很早的时候看到别人的群里有能够自动回复的机器人开始,我就在思考这样的功能是如何实现的,那时还没有接触过编程,所以后来也就不了了之。

    前一段时间我在网上看到了对qqbot这个库的介绍,兴趣起来以后我就尝试了两下,发现控制我的qq发消息竟然很有趣,所以我就进一步进行探索,想要做出来一个相对来说还算得上是比较有模有样的机器人。

    功能介绍

    到目前为止,大概做出了几个我比较感兴趣的功能,虽然比较丑陋,但总算是实现了。功能大概可以分为以下几个:

    • 整句识别并回复;
    • 字词识别并回复;
    • 学习命令与回复;
    • 天气查询;
    • 签到系统;
    • 积分系统。

    整句识别并回复指的是,假如有个人发了消息A,那么如果A在我们的指令库中,机器人将会对其进行相应的回复。

    字词识别并回复指的是,假如有个人发了消息A,消息A中包含了词语B,那么机器人将会对其回复B的内容。如果A中包含了多个相应词语,那么回复第一个。

    学习命令与回复就是所有人可以通过一个特定的格式往指令库中添加命令。当然,因为防止别人乱搞,我这里设置的是只能够添加“整句识别并回复”的命令。

    天气查询其实就很简单了,通过特定的格式获取想要查询的城市,然后利用爬虫爬取中国天气网上的相应数据,再回复就行。

    签到系统和积分系统联系在一起,每个人每天只能签到一次,并会得到相应的积分,如果多次签到则会扣除定量的积分。

    积分系统目前可以打劫(受一些比较成熟的机器人系统启发),其他的功能还没有开发出来,也不准备继续做了,所以相当于制作了一个雏形。

    相关知识范围

    本次内容最主要的便是qqbot库的用法,这里是qqbot的GitHub,具体的用法我就不再在我这里细讲了。

    相比之我之前做的那个图片识别,用的csv文件来当作数据储存,这一次我新学习到了json存储必要的文件,比之前算是方便了许多。

    其余的应该没有什么了,都是一些比较稀松平常的内容。

    正文开始

    假设诸位已经简单的了解过了qqbot的用法,也就是我们只需要自己定义一个消息回应函数onQQMessage(bot, contact, member, content),然后再其中编写我们想要的功能即可。

    四个参数的意思我直接从GitHub中搬来

    bot     : QQBot 对象,提供 List/SendTo/Stop/Restart 等接口,详见本文档第五节
    contact : QContact 对象,消息的发送者,具有 ctype/qq/uin/nick/mark/card/name 等属性
    member  : QContact 对象,仅当本消息为 群消息或讨论组消息 时有效,代表实际发消息的成员
    content : str 对象,消息内容

    优先级一,检查是否是自己

    对于一个机器人回复,我们首先需要给这个机器人设定读取到信息后的处理的优先级,也就是相应动作的先后顺序。毫无疑问的,我们第一步必须要检测收到的这一条语句content的来源member是谁,如果member是自己的话,那么就不能回应,所以我们可以写以下代码

    def onQQMessage(bot, contact, member, content):
        #优先级一
        '''!-------识别是否是自己的话-------!'''
        if bot.isMe(contact, member):
            print('自己的命令')
        else:
            #其他优先级

    优先级二,检查是否是“主人”的消息

    之所以设定一个主人,是为了能够随时“热关闭”机器人,不需要在命令行关闭。当然,也可以添加其他功能,只需要在这一个优先级内添加即可。所以这一个优先级主要是看“主人是否让机器人继续回复消息”。

    #优先级二
    masterFlag = MasterCommands(bot, contact, member, content)
    if masterFlag == '1':
        #其他优先级

    这一个优先级的内容全部被放在函数内进行,函数返回值为0或者1。如果为0就代表主人将机器人关闭(或者处于关闭状态),机器人不需要回复;如果未1就代表主人将机器人开启(或者处于开启状态),机器人可以进行回复。

    def MasterCommands(bot, contact, member, content):
        '''!-------不反应或者反应-------!'''
        masterFlagFile_name = 'C:\\Users\\vento\\Documents\\QQBotSentence\\MasterFlag.txt'
        if member != None:
            if member.qq == '798***079':
                if content == '闭嘴吧!伊莉雅':
                    bot.SendTo(contact, '好的好的,我闭嘴:(')
                    with open(masterFlagFile_name, 'w') as file_obj:
                        json.dump('0', file_obj)
                        print('已修改为0')
                elif content == '说话吧,伊莉雅':
                    bot.SendTo(contact, '我又能说话啦')
                    with open(masterFlagFile_name, 'w') as file_obj:
                        json.dump('1', file_obj)
                        print('已修改为1')
        with open(masterFlagFile_name) as file_obj:
            flag = json.load(file_obj)
            print('已读取', flag)
        return flag

    因为机器人目前所处与的状态需要在每一次接收到消息的时候进行判定,所以我们将这个状态保存在本地。

    masterFlagFile_name为状态值保存的文件地址(忽略我这混乱的命名规范),如果你的地点不同请务必要要创建一个txt文件,并在其中添加初始状态,并将masterFlagFile_name替换为你的地址

    初始状态为"1",注意一定要加上双引号,因为这个状态值是以字符存储的。

    在上面这一段代码中,我们首先判断member是否为空,也就是说是否是在群里说的话,如果是的话进行下一步。其次判断member的qq号是否为主人的qq号,如果是的话再判断消息是否是关闭(开启)指令,如果是的话就对文件进行相应的修改。

    修改则用json来对文件进行修改,对文件的读操作用json.load,写操作用json.dump。这两个用法从上面的代码就可以看得出来。

    添加与删除指令

    在确定masterFlag==”1”后,我在这里插入了一些关于指令的东西(我当初怎么想的恐怕只有天知道,为什么要在这里加,又懒的换位置怕出bug,所以就干脆这样子吧),主要是三个内容:添加指令,删除指令,字词识别指令库。

    下面的代码中sentence1代表“不可被修改的整句识别指令语料库”,sentence2代表“可被修改的整句识别指令语料库”,otherSenList代表字词识别指令语料库。这三个语料库皆用字典存储,key为指令,value为回复。

    '''!-------添加口令-------!'''
    if 'Command Add' in content:
        CommandAdd(bot, contact, member, content, sentence1)
    
    '''!-------删除口令-------!'''
    if 'Command Delete' in content:
        CommandDelete(bot, contact, member, content, sentence1)
    
    '''!-------字词识别指令字典存储-------!'''
    otherSenList = {'苟':['唱诗班!预备,唱!', '富贵!勿相忘!', '全姓名于乱世!'],
                    '伊莉雅':['叫我干嘛?']}

    添加删除指令有特定的形式,所以我就直接通过寻找这个特殊形式来调用相应的函数。这里我的添加指令的形式为

    Command Add!
    口令&你的口令&
    回复&你的回复内容&
    【如】
    Command Add!
    口令&吃了么&
    回复&吃啦吃啦,可香呢&

    删除的形式与之类似,为

    Command Delete!
    口令&要删除的口令&
    【如】
    Command Delete!
    口令&吃了么&

    之所以搞这么复杂就是防止聊天中稀奇古怪的形式出现,防止出现一些奇怪的bug。不过CommandAdd与CommandDelete这两个函数我做的不是很美观,个人感觉如果用正则表达式去直接匹配字符串,提取出两个&之间的内容可能会更简单一点,但是当初写的时候嫌麻烦,还需要重新学习一下正则,所以就干脆用if做了。

    def CommandAdd(bot, contact, member, content, sentence1):
        '''!-------添加口令-------!'''
        flag = 0
        key = ''
        val = ''
        for item in content:
            if item == '&' and flag == 0:
                flag = 1
                continue
            else: flag
            key = key + item if flag == 1 and item != '&' else key
            TouchFlag = CannotTouch(bot, contact, member, content, key, sentence1)
            if TouchFlag == 1: break
            if item == '&' and flag == 1:
                flag = 2
                continue
            else: flag
            if item == '&' and flag == 2:
                flag = 3
                continue
            else: flag
            val = val + item if flag == 3 and item != '&' else val
            flag = 4 if item == '&' and flag == 3 else flag
            if flag == 4:
                sentence2[key] = val
                bot.SendTo(contact, '添加成功~现在就可以试试啦!',  resendOn1202=False)
                break
        else:
            bot.SendTo(contact, '我好像没有收到正确格式噢', resendOn1202=False)
    
    def CommandDelete(bot, contact, member, content, sentence1):
        '''!-------删除口令-------!'''
        flag = 0
        key = ''
        for item in content:
            if item == '&' and flag == 0:
                flag = 1
                continue
            else: flag
            key = key + item if flag == 1 and item != '&' else key
            TouchFlag = CannotTouch(bot, contact, member, content, key, sentence1)
            if TouchFlag == 1: break
            flag = 2 if item == '&' and flag == 1 else flag
            if flag == 2:
                sentence2.pop(key)
                bot.SendTo(contact, '删除成功~', resendOn1202=False)
                break
        else:
            bot.SendTo(contact, '我好像没有收到正确格式噢', resendOn1202=False)
    

    我这里的做法其实很简单,就是遍历content字符串中所有字符,运用flag来确定当前遇到的&是第几个&,然后分别对key和val进行叠加,并将其保存到整句识别语料库之中。

    我中间还运用了一个CannotTouch函数,指的是不能被修改的指令。毕竟如果所有指令都被别人修改的乱西八糟,那就很没意思了,这就相当于权限的问题。这个函数的实现代码如下

    def CannotTouch(bot, contact, member, content, key, sentence):
        '''!-------不可修改口令禁令-------!'''
        flag = 0
        if sentence.__contains__(key):
            bot.SendTo(contact, '抱歉噢,这个指令不能够被修改的呢~')
            flag = 1
        return flag

    小结

    这一篇就先到这里,下一篇内容就就是开始了积分系统,签到系统,天气检测等(按照我这里设定的优先级划分的),语句识别在我这里是在最后面两个优先级,所以可能会晚一点才会写出来。

    所有代码我都放在github中了,包括还没有写出来博客的内容,有需要可以自己看。

    github地址:https://github.com/HanpuLiang/A-Example-of-qqbot

    如果喜欢的话麻烦关注一下再点个赞或者喜欢噢!

    展开全文
  • 这里我们就手动打开config.yaml文件把里面的QQ号删除保存就行了 保存后重新运行机器人等待出现二维码。使用一个QQ号扫码登录就行了 按键盘ctrl+c结束当前进程。 再让go-cqhttp后台运行nohup ./go-cqhttp #4# 部署...

    ##1 首先安装docker

    sudo yum check-update
    curl -sSL https://get.daocloud.io/docker | sh
    sudo systemctl start docker
    sudo systemctl status docker
    sudo systemctl enable docker 
    
    
    

    ##2 安装go环境
    先获取权限sudo -i
    再打开local文件夹cd /usr/local
    下载go压缩包wget https://golang.google.cn/dl/go1.16.7.linux-amd64.tar.gz
    安装解压程序yum install wget unzip -y
    解压go文件tar -xvzf go1.16.7.linux-amd64.tar.gz
    设置环境变量,用Finalshell或者别的sftp软件打开etc/profile文件,复制下面的内容粘贴到profile文件的最后一行

    export GO111MODULE=on
    export GOPROXY=https://goproxy.cn
    export GOROOT=/usr/local/go
    export GOPATH=/usr/local/go/path
    export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
    

    保存了后输入命令source /etc/profile ##在当前bash环境下读取并执行profile中的命令。
    再输入go env
    显示如下图就说明安装好了
    在这里插入图片描述
    #3# 拉库并编译go-cqhttp
    先安装gityum install -y git
    然后拉库git clone https://ghproxy.com/https://github.com/Mrs4s/go-cqhttp.git /root/go-cqhttp
    编译cd /root/go-cqhttp && go build
    运行go-cqhttp
    先给权限chmod 777 go-cqhttp
    再运行./go-cqhttp
    第一次运行go-cqhttp会提示让你选择协议,我们这里选择http,ws正向两个协议就行了,回车之后还会再提示你没修改config.yaml文件,请修改后再运行。这里我们就手动打开config.yaml文件把里面的QQ号删除保存就行了
    保存后重新运行机器人等待出现二维码。使用一个QQ号扫码登录就行了
    按键盘ctrl+c结束当前进程。
    再让go-cqhttp后台运行nohup ./go-cqhttp
    #4# 部署qqBot网页端
    先执行以下代码拉取qqBot镜像
    docker pull asupc/qqbot
    再创建容器并设置端口

    docker run --name=qqbot1 -p 5010:5010 asupc/qqbot
    

    回车后用浏览器访问http://ip:5010/login.html配置数据库及管理员账号密码
    登录后需要先去系统设置里配置信息,那个协议ip地址可以在服务器上输入ifconfig -a找到docker0那一个区域就会看到IP如下图,我框起来的那个就是需要的ip啦,ip找到了就按照那个示例填写一下就好了,端口不用改!
    在这里插入图片描述
    保存了后再回到go-cqhttp目录下用命令后台挂机./go-cqhttp -d
    接着在重启一下qqbot就可以了docker restart qqbot1
    如果还有不懂得加群交流124567958

    展开全文
  • QQbot实现图灵机器人

    千次阅读 2018-09-20 18:22:48
    我最近在Github上看到一个有趣的库qqbot,感觉很有意思,就像用图灵机器人结合起来做一个群聊机器人。用了一晚上的时间就实现了,还是很简单的。 准备 首先我们要安装qqbot这个库用pip安装就行了,只要输入pip ...

    我最近在Github上看到一个有趣的库qqbot,感觉很有意思,就像用图灵机器人结合起来做一个群聊机器人。用了一晚上的时间就实现了,还是很简单的。

    准备

    首先我们要安装qqbot这个库用pip安装就行了,只要输入pip install qqbot,就可以了,同时我们图灵机器人部分需要用requests库来调用图灵机器人的API,同样我们输入pip install requests来安装。然后我们创建两个文件sample.py Turingrbot.py

    图灵机器人

    我们这里不是自己训练一个能聊天的机器人,那就太费劲了,重复造轮子是很蠢的事情,这里我们用别人做好的机器人来用,我们这里选用的是图灵机器人,首先我们在图灵机器人的官网里注册一个账号,然后在创建一个机器人,然后机器人页面,要里面有个apikey很重要,这是我们调用我们的机器人的唯一凭证,后面有很重要的重要。一切都准备好了,接下来我们就开始写我们的代码了。

    Turingbot.py

    首先我们先引入我们需要的库:

    import json
    import requests
    import re
    

    然后构造一个函数def answer(ask):然后我们写入我们图灵机器人的apiurl以及你的请求的json

        url = 'http://openapi.tuling123.com/openapi/api/v2'
        body = {
    	    "reqType":0,
            "perception": {
                "inputText": {
                    "text": ""
                }
            },
            "userInfo": {
                "apiKey": "#你的apikey",
                "userId": "你的userid"
            }
        }
        body['perception']['inputText']['text'] = ask
        data = json.dumps(body)
    

    记得要把aptKey和userid改成你自己的,接下来我们要写一个post请求把json传输过去,来获得图灵机器人返回的值。

        response = requests.post(url, data = data)
        retext = response.text
    

    这里传回来的值不是json所以我们要用正则匹配,来找到我们的需要得到的回复,并处理返回结果

        answ = re.compile('{.*?results":.*?values.*?text":"(.*?)"}', re.S)
        text = re.findall(answ, retext)
        text = str(text[0])
        return text
    

    这样我们的图灵机器人这部分就写好了,接下来我们要写qqbot插件部分
    完整代码为:

    import json
    import requests
    import re
    def answer(ask):
        url = 'http://openapi.tuling123.com/openapi/api/v2'
        body = {
    	    "reqType":0,
            "perception": {
                "inputText": {
                    "text": ""
                }
            },
            "userInfo": {
                "apiKey": "#你的apikey",
                "userId": "#你的uerid"
            }
        }
        body['perception']['inputText']['text'] = ask
        data = json.dumps(body)
        response = requests.post(url, data = data)
        retext = response.text
        answ = re.compile('{.*?results":.*?values.*?text":"(.*?)"}', re.S)
        text = re.findall(answ, retext)
        text = str(text[0])
        return text
    
    

    sample.py

    首先我们要引入我们上面写的文件import TuringRobot as tr,然后再定义一个自己的消息响应函数,这个注册的响应函数的函数名必须为 “onQQMessage” ,函数参数也必须和下面的一致:

    ef onQQMessage(bot, contact, member, content):
        answer = tr.answer(content)
        if '@ME' in content:
            bot.SendTo(contact, answer)
    

    这里的意思就是如果机器人得到的对话中有@他的情况,就会触发响应,来调用我们写的图灵机器人的方法。

    部署机器人

    我们把我们写好的两个文件放到我们qqbot的插件文件夹内(放到 ~/.qqbot-tmp/plugins/ 目录下( ~ 代表用户主目录, win7 下为 C:\Users\xxx ),或系统中可以 import 到的目录下(如 python 的安装目录下的 Lib/site-packages 目录)。)然后在终端(或cmd)中输入qqbot来打开qq机器人,程序运行后会自动跳出二维码来让我们扫描登录,登录完毕后,再打开一个终端输入qq plug sample来加载我们写的插件,这样你在群里@机器人并说话,他就会自动通过图灵机器人来回复你了。

    展开全文
  • python+qqbot实现qq聊天机器人

    万次阅读 2018-05-21 18:00:27
    python+qqbot实现qq聊天机器人 1. 安装qqbot 使用pip安装qqbot pip install qqbot 2. 登录qq 在安装完qqbot后,就可以进行qq的登录了,使用qqbot命令进行登录,在命令行输入qqbot,然后会弹出来二维码,...

    ##python+qqbot实现qq聊天机器人
    ###1. 安装qqbot
    使用pip安装qqbot

    pip install qqbot
    

    ###2. 登录qq
    在安装完qqbot后,就可以进行qq的登录了,使用qqbot命令进行登录,在命令行输入qqbot,然后会弹出来二维码,你进行扫码后便可以登录了,登录后就可以挂在那里不用管它,他就相当于一个qq客户端,用于处理qq。
    ###3.python编码
    这个编码阶段和上一个微信的开发是类似的,都是通过一个方法接受消息,然后图灵机器人进行消息的处理并且给出回复的内容。只是qq的使用的 onQQMessage方法的做为消息回复的函数。

    ```
    
    #下面注册的响应函数的函数名必须为 “onQQMessage” ,函数参数也必须和上面的一致。
    def onQQMessage(bot, contact, member, content):
          
            ret = reply(content)
            save = "收到消息: "+content+"\n"+"回复消息: "+ret+"\n"
            save_to_file('D:\\content.txt', save)
            bot.SendTo(contact,ret)
    
    ```
    

    我这里还做了一个把消息保存到文件,你可以不做,而reply函数和微信实现登陆是一样的参考我的微信登陆那个就行了。
    ###4.运行这个python
    qq和微信不一样得还有就是,微信的这个python是直接运行的,而qq的这个python文件是交个qqbot运行的,具体方法就是把这个python文件拷贝到C:\Users\Administrator.qqbot-tmp\plugins这个路径下,然后在开启一个命令行(注意:是另外开启一个,不要在那个运行qqbot的黑窗口中输),然后输入qq plug xxx其中xxx就是你的python的名字,这样就可以把py文件加载到qbot上咯。输入 qq unplug xxx就是从qbot上拿下。加载完py文件,你的qq就变成了一个智能qq咯。

    欢迎大家关注我的微信公众号,未来上面会推送python 机器学习 算法学习 深度学习 论文阅读 以及偶尔的小鸡汤等内容。ようこそいらっしゃい!

    搜索 coderwangson 关注

    image

    展开全文
  •  通过Python3的qqBot开源库,基于腾讯的smartQQ协议登录个人QQ,实现监控、收集QQ消息,进而通过图灵机器人API接入方式实现自动聊天。 零、前期准备:  1、Python3  2、qqBot & requests & re  ...
  • 主要为大家详细介绍了基于Python QQBot库的QQ聊天机器人,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 基于的机器人。原项目是Xu Han用CoffeeScript开发,这是一个很棒的项目。RaymondXie主要增加了对二维码扫描认证登陆的支持。这个版本全部代码转换为javascript,并且发布为npm包,无需配置,安装即可使用,更加方便...
  • python qqbot库实现简单机器人回复

    千次阅读 2018-10-06 22:54:35
    原 Python和qqbot库开发简单的机器人 pip 安装,安装命令: 在命令行输入pip install qqbot即可 也可以直接下载 qqbot.py 运行,但需先安装 requests&nbsp...
  • Windows下,打开 cmd 窗口, ... pip install qqbot 安装完成后,cmd 窗口输入  qqbot 即启动 QQBot,弹出二维码,用手机QQ扫一下,即授权登录 另外打开一个 cmd 窗口,键入  qq help 即可看到各项功...
  • Python-qqbot实现QQ群翻译机器人

    千次阅读 2018-11-18 19:37:38
    利用qqbot库实现QQ群自动翻译机器人: 准备工作: 先安装qqbot库: 利用翻译网站:http://fy.iciba.com/ 这个网址的在线翻译的请求头最简洁明了,语种转换上也方便,适合后期改动。谷歌翻译和百度翻译之类的...
  • !!! 已于2019年1月3日停止服务,...聊天机器人 通过QQ远程控制你的设备 二,安装方法 在Python 2.7 / 3.4 +下使用,用pip安装: pip install qqbot 下载或者解压后CD到该目录并运行: pip install 。 三,使用方法
  • 基于Python QQBot库的QQ聊天机器人

    万次阅读 2018-08-27 21:38:29
    项目地址:...pip install qqbot 2.主动发出消息 from qqbot import _bot as bot # 登录QQ bot.Login(['-q', '2816626661']) ''' buddy 获取指定名称/备注的好友 group 获取群 ''' buddy = b...
  • Python和qqbot库开发简单的机器人

    千次阅读 2017-12-02 15:20:20
    在命令行输入pip install qqbot即可 也可以直接下载 qqbot.py 运行,但需先安装 requests 库。 简单的代码如下 # -*- coding: utf-8 -*- from qqbot import QQBotSlot as qqbotslot, RunBot @...
  • QQBot:使用QQ PC协议的机器人-源码

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 272
精华内容 108
关键字:

qqbot机器人