Skip to content

john123951/SmartQQBot

 
 

Repository files navigation

SmartQQ-Bot Ver-0.2

**注意:**此框架现已基本稳定,文档会尽快完善。

该分支使用二维码登陆的协议参考了原名:SmartQQ-for-Raspberry-Pi(PiWebQQV2)这一项目,自行整合开发了基于SmartQQ的自动机器人框架

登陆时采用QQ安全中心的二维码做为登陆条件, 不需要在程序里输入QQ号码及QQ密码。

旧版机器人仍有保留在old_QQBot.py中。 ##基本功能

###群聊功能: 注:以下命令皆是在qq中发送,群聊命令发送到所在群中

  • 群聊吐槽功能(tucao),类似于小黄鸡,在群中通过发送!learn {ha}{哈哈}语句,则机器人检测到发言中包含“ha”时将自动回复“哈哈”。!delete {ha}{哈哈}可以删除该内容。吐槽内容本地保存在data/tucao_save/中。

  • 群聊复读功能(repeat),检测到群聊中连续两个回复内容相同,将自动复读该内容1次。

  • 群聊关注功能(follow),使用命令!follow qq号可以使机器人复读此人所有发言(除命令外)使用命令!unfollow qq号解除关注。qq号处可使用"me"来快速关注与解除关注自己,例:!follow me

  • 群聊唤出功能(callout),群聊中检测关键词智障机器人,若发言中包含该词,将自动回复干嘛(‘·д·),此功能一般用于检测机器人状态与调戏

  • 群聊命令功能(command_0arg/command_1arg):使用![命令名]格式或![命令名] {参数1}执行命令,命令“吐槽列表”,使用命令!吐槽列表在群聊中激活,列出当前群的吐槽列表。

    • 现有无参数命令:
      • !吐槽列表:列出当前群的吐槽列表
    • 现有单参数命令:
      • !删除关键字 {blablabla}:删除关键字“blablabla”下的所有吐槽内容

###私聊功能:

  • 私聊唤出功能(callout),私聊中检测关键词智障机器人,若发言中包含该词,将自动回复干嘛(‘·д·),此功能一般用于检测机器人状态与调戏

  • 私聊复读功能(repeat),检测到私聊中连续两个回复内容相同,将自动复读该内容1次。

###临时对话功能:

  • 唤出功能(callout),具体同私聊与群聊。

##快速开始

  • python main.py
  • 等待提示“登陆二维码下载成功,请扫描”,打开脚本所在目录的v.jpg图片扫描二维码。
  • 等待登陆成功的提示
  • 群聊各功能需要通过修改config文件夹下的共有设置QQBot_default.conf中的功能开关。

#细节说明

##如何二次开发自定义功能

  • 根据功能类型修改对应文件:

    • 群聊功能:Group.py
    • 私聊功能:Pm.py
    • 临时对话功能:Sess.py
  • 在对应类(class)中编写方法,方法的参数固定为self与msg,即

def [Function Name](self, msg):

  • 需要注意方法的返回值,执行成功请返回True,没有执行或执行失败请返回False
  • 在对应类的process_order中,选择适当的位置加入你添加的功能的名称(Function Name),你添加的位置决定了功能的执行顺序如
self.process_order = [
            "repeat",
            "callout",
        ]
  • 在共有设置中添加功能的开关,如
callout = 0
repeat = 1

0代表关闭、1代表开启

  • (可选)在Config.py中的DefaultConfigs类下的__init__方法中添加属性的默认参数。
  • 私有设置会在程序启动后收到消息时自动由共有设置生成

##配置文件读取逻辑: ###程序启动时:

  1. 判断是否存在共有设置文件,若不存在,从Config.py文件中的DefaultConfig类声明中生成QQBot_default.conf文件

###收到消息时: 2. 判断是否存在私有设置文件,若不存在,复制共有设置文件中的对应部分,生成[id].conf配置文件 3. 读取私有文件中的use_private_config属性,若为'1',则使用私有配置文件,否则使用共有配置文件 4. 读取对应的配置文件内容

##程序模块:

Module File
登陆与消息获取模块 QQLogin.py
消息处理模块 MsgHandler.py
配置参数控制模块 Config.py

##类定义

Class type File
消息类 Msg.py
通知类 Notify.py
群聊类 Group.py
私聊类 Pm.py
临时对话类 Sess.py

##程序运行逻辑:

  1. 使用QQ类登陆
  2. 使用登陆后的QQ类初始化消息处理模块
  3. 进入轮询
  4. 处理消息前从配置文件读取最新配置
  5. 使用消息处理模块处理消息

##日志输出信息分类:

Level Logging
DEBUG 所有请求的返回包
INFO 所有请求的简要信息、程序运行提示
WARNING 不影响程序正常运行的错误提示
ERROR 影响程序正常运行的错误提示

##封装说明 ###类名:Msg 所有消息类的基类(不包括提醒(notify)) 成员变量:

  • poll_type 消息的类型,现已知以下类型:
    • group_message 群聊消息
    • message 私聊消息
    • sess_message 临时聊天消息
    • input_notify 输入提示,即对方正在输入的提示。
  • from_uin 根据消息类型不同,所做功能也不同
    • 群聊时,作为的临时uin号
    • 私聊、临时聊天、输入提示,作为发送人的临时uin号
  • msg_id 未发现具体用途,应该是用于区别消息
  • msg_id2 未发现具体用途
  • msg_type 未发现具体用途,应该是用于细分消息类型,缺少详细的文档
  • reply_ip 未发现具体用途
  • to_uin 接受人的真实QQ号

成员函数:

###类名:MsgWithContent 继承于Msg,含有具体可输出的内容的Msg派生类。 成员变量:

  • Msg类的所有变量)
  • raw_content 消息内容的原始数据
  • content 经过简化(后期可能需要过滤)的内容数据,可直接输出显示
  • time 消息发送时间戳

成员函数:

  • (静态方法)combine_msg(content)
    • 输入参数:消息内容的原始数据
    • 用途:用于简化原始数据
    • 返回:(str)可直接输出显示的简化内容数据。

###类名:SessMsg 继承于MsgWithContent ,临时消息的封装类 成员变量:

  • (MsgWithContent类的所有变量)
  • service_type 用于回复临时消息的参数,未探明实际意义
  • id 用于回复临时消息的参数,未探明实际意义
  • ruin 接收人的真实QQ号
  • flags 未发现具体用途

成员函数:

###类名:PmMsg 继承于MsgWithContent ,私聊消息的封装类 成员变量:

  • (MsgWithContent类的所有变量)

成员函数:

###类名:GroupMsg 继承于MsgWithContent ,群聊消息的封装类 成员变量:

  • (MsgWithContent类的所有变量)
  • group_code 未发现具体用途
  • send_uin 消息发送人的临时uin号
  • seq 消息顺序码,用于消息去重
  • info_seq 真实群号

成员函数:

文档仍待完善

##TODO

  • 添加群聊吐槽字数限制
  • 回复语句外置便于修改
  • 开发命令控制模块
  • 编写文档
  • Friend类补充
  • 尽可能地简化二次开发的复杂性
  • 寻找偶尔被保护的原因
  • 短时间程序断线 不需要重新扫描二维码,可以直接登录

##账户被保护的可能原因:

  • 多次发言中包含网址
  • 短时间内多次发言中包含敏感词汇
  • 短时间多次发送相同内容
  • 短时间异地登陆

##二次功能

  1. 天气查询 命令: 天气 上海 或者 weather 上海 或者天气 shanghai 或者 weather shanghai

  2. 图灵问答插件 命令: ask 你的问题 或者问 你是谁

  3. 谁是卧底 开始游戏: !game 谁是卧底5人局 结束游戏: !game end

About

基于SmartQQ的自动机器人框架

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%