群命令回复包

 群命令的回复包,根据不同的子命令类型格式有所不同:
 创建群的回复包,格式为:
 1. 头部
 2. 命令类型,1字节,创建群是0x1
 3. 回复码,1字节,成功是0x0,如果成功则后面为
    1. 群内部ID,4字节,如果为0,表示创建失败
    2. 群外部ID,4字节,如果为0,表示创建失败
 4. 如果回复码不为0,则后面为出错信息
 5. 尾部
 
 创建临时群的回复包
 1. 头部
 2. 命令类型,1字节,0x30
 3. 回复码,1字节
 4. 临时群类型,1字节,0x01是多人对话,0x02是讨论组
 5. 父群内部ID,4字节
 6. 创建的临时群的内部ID,4字节
 7. 尾部
 
 激活群的回复包,格式为:
 1. 头部
 2. 命令类型,激活是0x5
 3. 回复码,1字节,成功是0x0
 4. 群的内部ID
 5. 尾部
 
 得到群信息的回复包,格式为:
 1. 头部
 2. 命令类型,1字节,得到群信息是0x4
 3. 回复码,1字节,成功是0x0
 4. 群内部ID,4字节
 5. 群外部ID,4字节
 6. 群类型,1字节
 7. 未知的4字节
 8. 创建者QQ号,4字节
 9. 认证类型,1字节
 10. 群分类,4字节,这是2004的分类法。2004只有4个分类
 11. 未知的2字节
 12. 群分类ID,4字节,这是2005的分类法,2005的分类最多有三层。每个分类有一个唯一的id
 13. 未知的2字节
 14. 未知的1字节
 15. 群version id, 4字节
 16. 群名称长度,1字节
 17. 群名称
 18. 未知的两字节,全0
 19. 群声明长度,1字节
 20. 群声明
 21. 群描述长度,1字节
 22. 群描述
 23. 群中成员的QQ号,4字节
 24. 成员所属组织的序号,1字节,组织序号从1开始,如果为0,表示其不在某个组织中,
    一个成员只能在一个组织里面,组织和讨论组不同,讨论组可以看成是群中群,组织
     只是群成员的分类而已,它并不是一个群
 25. 群成员的类型,是不是管理员之类的,1字节
 26. 如果存在更多成员,重复23-25部分
 27. 尾部
 
 得到临时群信息的回复包,格式为
 1. 头部
 2. 命令类型,1字节,0x33
 3. 回复码,1字节,成功是0x00
 4. 群类型,1字节
 5. 父群内部ID,4字节
 6. 临时群内部ID,4字节
 7. 创建者QQ号,4字节
 8. 未知的4字节,全0
 9. 群名称长度,1字节
 10. 群名称
 11. 群中成员的QQ号,4字节
 12. 成员所属组织的序号,1字节。对于临时群来说,没有群内组织的概念,所以这个字段无用
 13. 如果有更多成员,重复11-12部分
 14. 尾部
 
 退出群的回复,格式为:
 1. 头部
 2. 命令类型,1字节,退出是0x9
 3. 回复码,1字节,成功是0x0
 4. 群内部ID,4字节,应该是个非0值
 5. 尾部
 
 解散群的回复
 1. 头部
 2. 子命令,1字节,0x1D
 3. 回复码,1字节
 4. 群内部id,4字节
 5. 尾部
 
 请求成员信息的回复包,格式为
 1. 头部
 2. 命令类型,1字节,请求成员信息是0x0C
 3. 回复码,1字节,成功是0x0
 4. 群内部ID,4字节
 5. 成员QQ号,4字节
 6. 头像号,2字节
 7. 年龄,1字节
 8. 性别,1字节
 9. 昵称长度,1字节
 10. 昵称
 11. 未知的2字节
 12. 扩展标志,1字节
 13. 通用标志,1字节
 14. 如果有更多成员,重复5-13部分,5-13部分其实也就是QQFriend结构
 15. 尾部
 
 得到在线成员的回复包,格式为:
 1. 头部
 2. 命令类型,1字节,请求成员信息是0x0B
 3. 回复码,1字节,成功是0x0
 4. 群内部ID,4字节
 5. 未知字节,0x3C
 6. 在线成员的qq号
 7. 如果有更多在线成员,重复6
 8. 尾部
 
 激活临时群的回复包
 1. 头部
 2. 命令类型,1字节,0x37
 3. 回复码,1字节
 4. 临时群类型,1字节
 5. 父群内部ID,4字节
 6. 临时群内部ID,4字节
 7. 成员QQ号,4字节
 8. 如果有更多成员,重复7部分
 9. 尾部
 
 请求加入群的回复包,格式为:
 1. 头部
 2. 命令类型,1字节,请求成员信息是0x07
 3. 回复码,1字节,成功是0x0
 4. 群内部ID,4字节
 5. 回复码,这个回复码是比较细的特定于join请求的回复,1字节
 6. 尾部
 
 请求加入群的认证信息回复包,没什么太大用处,就是表示服务器收到了,格式为:
 1. 头部
 2. 命令类型,这里是0x8
 3. 回复码,1字节,成功是0x0
 4. 群内部ID,4字节,如果为0表示出错
 5. 尾部
 
 修改群信息的回复包,格式为:
 1. 头部
 2. 命令类型,这里是0x03
 3. 回复码,1字节,成功是0x0
 4. 群内部ID,4字节
 5. 尾部
 
 修改群成员的回复包,格式为:
 1. 头部
 2. 命令类型,这里是0x03
 3. 回复码,1字节,成功是0x0
 4. 群内部ID,4字节
 5. 尾部
 
 搜索群的回复包,格式为:
 1. 头部
 2. 命令类型,这里是0x06
 3. 回复码,1字节,成功是0x0
 4. 搜索方式,1字节
 5. 群内部ID,4字节
 6. 群外部ID,4字节
 7. 群类型,1字节
 8. 未知的4字节
 9. 群创建者,4字节
 10. 群分类,4字节,这是2004的分类法。2004只有4个分类
 11. 群分类,4字节,这是2005分类法
 12. 未知的2字节
 13. 群名称长度,1字节
 14. 群名称
 15. 未知的两字节
 16. 认证类型,1字节
 17. 群简介长度,1字节
 18. 群简介
 19. 尾部
 
 发送群信息和发送扩展群信息的回复包
 1. 头部
 2. 命令类型,1字节,0x0A
 3. 回复码,1字节
 4. 群内部id,4字节
 5. 尾部
 
 发送临时群信息的回复包
 1. 头部
 2. 命令类型,1字节,0x35
 3. 回复码,1字节
 4. 临时群类型,1字节
 5. 父群内部ID,4字节
 6. 临时群内部ID,4字节
 7. 尾部
 
 退出临时群的回复包
 1. 头部
 2. 命令类型,1字节,0x32
 3. 回复码,1字节
 4. 临时群类型,1字节
 5. 父群内部ID,4字节
 6. 临时群内部ID,4字节
 7. 尾部
 
 修改临时群信息的回复包
 1. 头部
 2. 命令类型,这里是0x34
 3. 回复码,1字节,成功是0x00
 4. 临时群类型,1字节
 5. 父群内部ID,4字节
 6. 临时群内部ID,4字节
 7. 尾部
 
 修改临时群成员的回复包
 1. 头部
 2. 命令类型,这里是0x31
 3. 回复码,1字节,成功是0x00
 4. 临时群类型,1字节
 5. 父群内部ID,4字节
 6. 临时群内部ID,4字节
 7. 操作方式,1字节,0x01是添加,0x02是删除
 8. 操作的成员QQ号,4字节
 9. 如果有更多成员,重复8部分
 10. 尾部
 
 讨论组操作的回复包,子命令类型为0x02时(得到讨论组列表)
 1. 头部
 2. 命令类型,0x36
 3. 回复码,1字节
 4. 子命令类型,1字节,0x02
 5. 群内部id,4字节
 6. 群外部id,4字节
 7. 讨论组id,4字节
 8. 讨论组名称字节长度,1字节
 9. 讨论组名称
 10. 如果有更多讨论组,重复7-9部分
 11. 尾部 
 
 讨论组操作的回复包,子命令类型为0x01时(得到多人对话列表)
 1. 头部
 2. 命令类型,0x36
 3. 回复码,1字节
 4. 子命令类型,1字节,0x01
 5. 群内部id,4字节,为0
 6. 群外部id,4字节,为0
 7. 讨论组id,4字节
 8. 讨论组名称字节长度,1字节
 9. 讨论组名称
 10. 如果有更多讨论组,重复7-9部分
 11. 尾部 
 
 从服务器更新组织架构的回复包
 1. 头部
 2. 命令,1字节,0x12
 3. 回复码,1字节,0x00为成功 
 4. 群内部ID,4字节
 5. 未知1字节,0x00
 6. 组织Version ID,4字节,意义和群的Version ID相同。
 	  如果这个字段为0,表示没有组织,并且7-12部分不存在
 7. 组织个数,1字节
 8. 组织序号,1字节,从1开始
 9. 组织的层次关系,4字节。QQ的组织最多支持4层,4个字节一共32bit,第一层用了8位,
    后面的层用了6位,所以还有6位是保留未用的。举个例子说明一下这个字段的具体格式,
    假如这个字段的二进制表示为
    0000 0001 0000 1100 0101 0010 0100 0000
    那么得知,前8位0000 0001,值为1
    然后是0000 11,值为3
    然后是00 0101,值为5
    然后后0010 01,值为9,
    最后6位保留未用,
    所以这个组织位于第四层,它是父节点的第9个子组织,它的父节点是祖父节点的第5个子组织,
    它的祖父节点是曾祖父节点的第3个组织,它的曾祖父节点是群的第一个组织。
    我们要分清楚的是,组织的序号和层次号并不是一样的,也不是有对应关系的。所以目前来看,
    这个关系需要我们自己维护,以便查找组织
 10. 组织名称字节长度,1字节
 11. 组织名称
 12. 如果有更多组织,重复8-11部分
 13. 尾部 
 
 提交组织架构的回复包
 1. 头部
 2. 命令,1字节,0x11
 3. 回复码,1字节,0x00为成功 
 4. 群内部ID,4字节
 5. 组织Version ID,4字节
 6. 组织个数,2字节
 7. 组织序号,1字节
 8. 如果有更多组织,重复7部分
 9. 尾部
 
 提交成员分组情况的回复包
 1. 头部
 2. 命令,1字节,0x13
 3. 回复码,1字节,0x00为成功 
 4. 群内部ID,4字节
 5. 成员分组情况version id,4字节
 6. 尾部
 
 修改群名片回复包
 1. 头部
 2. 命令, 1字节,0x0E
 3. 回复码,1字节,0x00为成功 
 4. 群内部ID,4字节
 5. 自己的QQ号,4字节
 
 批量得到群名片真实姓名的回复包
 1. 头部
 2. 命令, 1字节,0x0F
 3. 回复码,1字节,0x00为成功 
 4. 群内部ID,4字节
 5. 群名片Version id, 4字节
 6. 下一个请求包的起始位置,4字节。这个字段如果为0,表示所有名片都已经得到
    如果不为0,表示起始记录数,比如一共有10条名片信息,这次得到了6条,还剩
    4条,那么这个字段就是0x00000006,因为下一条的序号是6(从0开始)
 7. 成员QQ号,4字节
 8. 真实姓名长度,1字节
 9. 真实姓名
 10. 如果有更多成员,重复7-9部分
 11. 尾部
 
 得到单个成员全部群名片信息的回复包
 1. 头部
 2. 命令, 1字节,0x0F
 3. 回复码,1字节,0x00为成功 
 4. 群内部ID,4字节
 5. 成员QQ号,4字节
 6. 真实姓名长度,1字节
 7. 真实姓名
 8. 性别索引,1字节,性别的顺序是'男', '女', '-',所以男是0x00,等等
 9. 电话字符串长度,1字节
 10. 电话的字符串表示
 11. 电子邮件长度,1字节
 12. 电子邮件
 13. 备注长度,1字节
 14. 备注内容
 15. 尾部
 
 设置角色的回复包
 1. 头部
 2. 命令,1字节,0x1B
 3. 回复码,1字节
 4. 群内部ID,4字节
 5. 群version id, 4字节
 6. 被设置的QQ号,4字节
 7. 操作之后成员的角色,1字节
 8. 尾部
 
 转让角色的回复包
 1. 头部
 2. 命令,1字节,0x1B
 3. 回复码,1字节
 4. 群内部ID,4字节
 5. 转让到的QQ号,4字节
 6. 根据回复码不同,有:
    i. 3部分为0x00时,为群version id,4字节
    ii. 3部分为其他值时,为错误信息
 7. 尾部
 
@author luma

触发事件