Python---基于go-cqhttp的聊天机器人(抓取QQ消息)

一款简单的qq消息处理模板

1.下载go-cqhttp

https://github.com/Mrs4s/go-cqhttp/releases

2.启动

在目录下进入cmd命令窗口,启动生成配置文件,进行配置,配置完成再次输入exe文件启动

# go-cqhttp 默认配置文件

account: # 账号相关
  uin: 123456 # QQ账号
  password: 123456 # 密码为空时使用扫码登录
  encrypt: false  # 是否开启密码加密
  status: 0      # 在线状态 请参考 https://docs.go-cqhttp.org/guide/config.html#在线状态
  relogin: # 重连设置
    delay: 3   # 首次重连延迟, 单位秒
    interval: 3   # 重连间隔
    max-times: 0  # 最大重连次数, 0为无限制

  # 是否使用服务器下发的新地址进行重连
  # 注意, 此设置可能导致在海外服务器上连接情况更差
  use-sso-address: true
  # 是否允许发送临时会话消息
  allow-temp-session: false

heartbeat:
  # 心跳频率, 单位秒
  # -1 为关闭心跳
  interval: -1

message:
  # 上报数据类型
  # 可选: string,array
  post-format: string
  # 是否忽略无效的CQ码, 如果为假将原样发送
  ignore-invalid-cqcode: false
  # 是否强制分片发送消息
  # 分片发送将会带来更快的速度
  # 但是兼容性会有些问题
  force-fragment: false
  # 是否将url分片发送
  fix-url: false
  # 下载图片等请求网络代理
  proxy-rewrite: ''
  # 是否上报自身消息
  report-self-message: false
  # 移除服务端的Reply附带的At
  remove-reply-at: false
  # 为Reply附加更多信息
  extra-reply-data: false
  # 跳过 Mime 扫描, 忽略错误数据
  skip-mime-scan: false

output:
  # 日志等级 trace,debug,info,warn,error
  log-level: warn
  # 日志时效 单位天. 超过这个时间之前的日志将会被自动删除. 设置为 0 表示永久保留.
  log-aging: 15
  # 是否在每次启动时强制创建全新的文件储存日志. 为 false 的情况下将会在上次启动时创建的日志文件续写
  log-force-new: true
  # 是否启用日志颜色
  log-colorful: true
  # 是否启用 DEBUG
  debug: false # 开启调试模式

# 默认中间件锚点
default-middlewares: &default
  # 访问密钥, 强烈推荐在公网的服务器设置
  access-token: ''
  # 事件过滤器文件目录
  filter: ''
  # API限速设置
  # 该设置为全局生效
  # 原 cqhttp 虽然启用了 rate_limit 后缀, 但是基本没插件适配
  # 目前该限速设置为令牌桶算法, 请参考:
  # https://baike.baidu.com/item/%E4%BB%A4%E7%89%8C%E6%A1%B6%E7%AE%97%E6%B3%95/6597000?fr=aladdin
  rate-limit:
    enabled: false # 是否启用限速
    frequency: 1  # 令牌回复频率, 单位秒
    bucket: 1     # 令牌桶大小

database: # 数据库相关设置
  leveldb:
    # 是否启用内置leveldb数据库
    # 启用将会增加10-20MB的内存占用和一定的磁盘空间
    # 关闭将无法使用 撤回 回复 get_msg 等上下文相关功能
    enable: true

  # 媒体文件缓存, 删除此项则使用缓存文件(旧版行为)
  cache:
    image: data/image.db
    video: data/video.db

# 连接服务列表
servers:
  # 添加方式,同一连接方式可添加多个,具体配置说明请查看文档
  #- http: # http 通信
  #- ws:   # 正向 Websocket
  #- ws-reverse: # 反向 Websocket
  #- pprof: #性能分析服务器

  - http: # HTTP 通信设置
      address: 0.0.0.0:5700 # HTTP监听地址
      timeout: 5      # 反向 HTTP 超时时间, 单位秒,<5 时将被忽略
      long-polling:   # 长轮询拓展
        enabled: false       # 是否开启
        max-queue-size: 2000 # 消息队列大小,0 表示不限制队列大小,谨慎使用
      middlewares:
        <<: *default # 引用默认中间件
      post:           # 反向HTTP POST地址列表
       - url: http://127.0.0.1:5700                # 地址
         secret: ''             # 密钥
      #  max-retries: 3         # 最大重试,0 时禁用
      #  retries-interval: 1500 # 重试时间,单位毫秒,0 时立即
       - url: http://127.0.0.1:5701/ # 地址
         secret: ''                  # 密钥
      #  max-retries: 10             # 最大重试,0 时禁用
      #  retries-interval: 1000      # 重试时间,单位毫秒,0 时立即

3.实时监听

import requests
from flask import Flask, request
'''注意,这里的import api是另一个py文件,下文会提及'''
app = Flask(__name__)
'''监听端口,获取QQ信息'''
@app.route('/', methods=["POST"])
def post_data():
    '下面的request.get_json().get......是用来获取关键字的值用的,关键字参考上面代码段的数据格式'
    if request.get_json().get('message_type')=='group':# 如果是群聊信息
        gid = request.get_json().get('group_id') # 获取群号
        uid = request.get_json().get('sender').get('user_id') # 获取信息发送者的 QQ号码
        message = request.get_json().get('raw_message') # 获取原始信息
        # 操作群消息
        print(gid,uid,message)
        # 自动回复
        requests.get(url='http://127.0.0.1:5700/send_group_msg?group_id=%s&message=%s' % (gid,'回复' ))
    return 'OK'
if __name__ == '__main__':
    app.run(debug=True, host='127.0.0.1', port=5701)# 此处的 host和 port对应上面 yml文件的设置

4.获取群里信息

res_mes_post = {"instruction_message": "message_seq", "group_id": "7360xxxx", "message_id": ""}
message_group_id = res_mes_post["group_id"]
url = "http://127.0.0.1:5700/get_group_msg_history?group_id=" + message_group_id
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}
res = requests.get(url=url, headers=headers).json()
print(res)#检查

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要用 Python 写一个基于 go-cqhttpQQ 机器人,你可以使用第三方库,如 CoolQ HTTP API 插件的 Python SDK,它封装了 go-cqhttp 提供的 HTTP API,使用起来更方便。 以下是一个简单的示例: ``` from cqhttp import CQHttp bot = CQHttp(api_root='http://127.0.0.1:5700/') @bot.on_message() def handle_msg(context): # 实现你的机器人逻辑 return {'reply': '你好,我是机器人!'} bot.run() ``` 这段代码中,我们定义了一个 handle_msg 函数来处理消息,并返回一个回复。运行这段代码后,你的机器人就会自动对收到的消息进行回复。 当然,你还可以根据需要添加更多的处理逻辑,例如:处理私聊消息,实现智能问答等。 ### 回答2: 基于go-cqhttp,使用Python编写QQ机器人可以通过与go-cqhttp插件的HTTP API进行交互来实现。 首先,将Python的requests库导入项目中,以便发送HTTP请求。 接下来,我们需要处理机器人收到的消息。通过模拟用户发送消息时,go-cqhttp发送的HTTP POST请求,我们可以使用Python的Flask框架来接收和处理这些消息。 在接收消息的路由上,我们可以使用Flask的`@app.route('/message')`来定义一个路由函数。在这个函数中,我们可以提取出消息中的关键信息,例如发送者QQ号码、发送的消息内容等。 接下来,我们可以使用条件语句对接收到的消息进行分类处理。例如,我们可以根据关键字回复不同的内容,或者调用外部API来进行一些其他操作。可以根据情况,编写不同的函数作为消息处理器。 在处理完消息后,我们需要将最终的回复发送给发送者。我们可以通过构造一个回复消息的字典,并将其转化为JSON格式,然后使用requests库发送POST请求到你自己的go-cqhttp插件上的HTTP API。 最后,我们可以利用go-cqhttp插件的事件上报功能,来处理一些其他的事件。例如好友申请、消息等。 总结起来,基于go-cqhttp,用Python写一个QQ机器人可以通过与go-cqhttp插件的HTTP API进行交互,处理接收的消息和事件,并根据需要编写不同的函数作为消息处理器、事件处理器。最后,将回复消息发送给发送者。通过这些步骤,我们可以实现一个简单的QQ机器人。 ### 回答3: 基于go-cqhttp,我们可以使用Python来编写一个QQ机器人。首先,我们需要使用Python的 requests 库与go-cqhttp建立通信。 首先,我们需要在go-cqhttp的配置文件中开启HTTP、WS(WebSocket)接口。然后,我们可以使用python的requests库向go-cqhttp发送HTTP请求来完成一些操作,例如发送私聊消息: ```python import requests url = "http://127.0.0.1:5700/send_private_msg" data = { "user_id": 你的QQ号, "message": "Hello, World!" } response = requests.post(url, json=data) ``` 这将向你的QQ号发送私聊消息"Hello, World!"。 然后,我们可以使用Python来监听go-cqhttp发送给QQ机器人的消息,这里我们可以使用WebSocket连接进行实时通信。我们可以使用Python的websocket库来实现WebSocket通信: ```python import websocket def on_message(ws, message): print(message) def on_error(ws, error): print(error) def on_close(ws): print("连接已关闭") def on_open(ws): print("连接已打开") # 创建WebSocket连接对象 ws = websocket.WebSocketApp("ws://127.0.0.1:6700") # 绑定回调函数 ws.on_message = on_message ws.on_error = on_error ws.on_close = on_close ws.on_open = on_open # 开始监听消息 ws.run_forever() ``` 这将打开一个WebSocket连接,接收go-cqhttp发送给QQ机器人的消息,并将其打印出来。 当然,以上只是一个简单的例子,对于一个完整的QQ机器人,我们还可以做很多其他的操作,例如发送消息、处理命令、响应事件等等。这些操作都可以通过向go-cqhttp发送HTTP请求来实现。 综上所述,使用Python编写一个基于go-cqhttpQQ机器人是十分可行的,我们可以利用Python提供的各种库与go-cqhttp进行通信,实现丰富的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值