Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请问如何判断自已是不是群主?谢谢 #18

Closed
1265858594 opened this issue Jun 16, 2016 · 27 comments
Closed

请问如何判断自已是不是群主?谢谢 #18

1265858594 opened this issue Jun 16, 2016 · 27 comments
Labels

Comments

@1265858594
Copy link

我想列出自已是群主的群,在这些群里面,才回应member的对话
如果 member 出现某些黑名单关键字,就把memeber踢了
所以有两点关键刚好都跟是不是群主相关

  1. 是群主的群才回应对话
  2. 踢人是群主才有的功能

谢谢
命令行也ok 谢谢

@littlecodersh
Copy link
Owner

littlecodersh commented Jun 16, 2016

@1265858594 最简单的方法是通过群名做判断,稍复杂一些的是判断群成员本人属性的AttrStatus值(因为两种方式获得的本人UserName不变),也可以通过群封面图片做判断。(新增)通过收藏的群聊区分是否要回复。

@1265858594
Copy link
Author

我马上找时间测试这三种方法,不过还是有点不太懂,

  1. 通过群名怎样判断呢?有什么特殊标记吗?
  2. 我会比对AttrStatus的值看看有什么不同
  3. 封面图片不是群主自已设置的吗?有特殊标记?
    明天或后天报告测试情况,谢谢。

@littlecodersh
Copy link
Owner

littlecodersh commented Jun 17, 2016

@1265858594

  1. 就是最简单的将该群名与已知的自己是群主的群名做比较
  2. 原理来说,每个群当中个人的AttrStatus在重新登录后是不变的。通过判断AttrStatus集合是否与已知的自己是群主的集合相似或者简单的将自己的AttrStatus与已知的自己是群主的群的自己的AttrStatus做比较即可(经@1265858594 测试不可行)
  3. 不是自己设置的,可以配合群名在可视化界面中进行判断。(就像我们日常找群一样)
    (新增)4. 通过get_chatrooms()方法获取收藏的群聊,间接区分要回复的群

@1265858594
Copy link
Author

昨晚对于第2项的测试结果是
第一次登入时在所有的群内AttrStatus 都是 36048901
第二次登入 36048933
第三次登入 36048940

其中每次登入时间间隔10-30分钟,所有的 AttrStatus 全部都没有区分
所以无法透过AttrStatus区分哪一个群是群主

@littlecodersh
Copy link
Owner

littlecodersh commented Jun 17, 2016

@1265858594 有理!是我没测试好,我修改一下方案。
我这里还有一个初步感觉可行的方案:
读取通讯录的时候只有收藏的群聊会被读取,那么通过是否被收藏判断是否要回复就可以对群聊进行区分。
可以尝试一下:)

itchat.get_chatrooms()

@1265858594
Copy link
Author

我思考一下哦,想让程序全自动判断,而不是人为的去进行设置..

@littlecodersh
Copy link
Owner

@1265858594 我忘记了最直观的OwnerUin判断,已经更新版本。

python -m pip install itchat --upgrade

更新以后可以尝试该程序:

import itchat

itchat.auto_login()
chatrooms = itchat.get_chatrooms()
for chatroom in chatrooms:
    info = itchat.get_batch_contract(chatroom['UserName'])
    if info['isAdmin']: print(info['PYQuanPin'])

@1265858594
Copy link
Author

太好了,回家马上试..试完报告结果

@1265858594
Copy link
Author

昨晚最后测试的结果,
发现我取到的 OwnerUin 不论是不是群主建的群,都是 0
不知道原因, 换了微信号,OwnerUin还是0

@littlecodersh
Copy link
Owner

@1265858594 我给的测试程序也不可用吗?

@1265858594
Copy link
Author

1265858594 commented Jun 20, 2016

@littlecodersh 我是没有用你给的程序,但是我是看你的代码改的,
后来发现 isAdmin 都是 false才去看 OwnerUin ,然后才发现都是 0

get_batch_contract 里面
j['isAdmin'] = j['OwnerUin'] == int(self.loginInfo['wxuin'])
这个部份

@littlecodersh
Copy link
Owner

试一下这个程序,也显示全部都是0吗?

import itchat

itchat.auto_login()
chatrooms = itchat.get_chatrooms()
for chatroom in chatrooms:
    info = itchat.get_batch_contract(chatroom['UserName'])
    print info['OwnerUin'], info['PYQuanPin']

@1265858594
Copy link
Author

下午试..get_contract 没注意到

@littlecodersh
Copy link
Owner

@1265858594

@1265858594
Copy link
Author

刚刚看
chatroomList 里面, 所有 OwnerUin 都是 0
memberList 里面,所有OwnerUin 也都是 0

@littlecodersh
Copy link
Owner

@1265858594 这个程序打出来也全是0么?

import itchat

itchat.auto_login()
chatrooms = itchat.get_chatrooms()
for chatroom in chatrooms:
    info = itchat.get_batch_contract(chatroom['UserName'])
    print info['OwnerUin'], info['PYQuanPin']

@pcloth
Copy link

pcloth commented Jun 20, 2016

在请教一下,关于定位唯一账号的问题。
1、
itchat.get_alias(username=msg['FromUserName'])
能否强制返回微信号而不是昵称或者备注?

2、
itchat.set_oplog(msg['FromUserName'],'测试用户ID')
设置备注名后,在用get_alias获取到的依然是昵称,不是备注名,需要重新运行机器人后才能拿到新的名字

环境是py 3.5.1

@littlecodersh
Copy link
Owner

@pcloth 重开个issue,@一下Chyroc吧

@chyroc
Copy link
Collaborator

chyroc commented Jun 22, 2016

设置备注名后,在用get_alias获取到的依然是昵称,不是备注名,需要重新运行机器人后才能拿到新的名字

@pcloth
这个问题应该是因为,启动机器人的时候设置了缓存联系人,所以就不更新联系人的信息了。

@1265858594
Copy link
Author

@littlecodersh 应该是,我没有去改动 OwnerUin

@littlecodersh
Copy link
Owner

@1265858594 了解。
要不你清理一下sslkey,抓个包,带包带sslkey发我邮箱,我做个研究。
我这里几次测试都没有问题,另,网上找到的一个公开出来的返回包也没有这个问题:这里

@1265858594
Copy link
Author

1265858594 commented Jun 23, 2016

@littlecodersh 请问什么是 sslkey ? 是 skey 那串 @crypto 开头的吗?

@littlecodersh
Copy link
Owner

@1265858594 不好意思,我没说清楚
是抓包时需要用到的sslkey,具体在教程的Wireshark配置一节有。

@1265858594
Copy link
Author

@littlecodersh 感谢指导,最后的最后,终于找出问题
我自已程序里面里是用UserName 判断 @@开头的为讨论群
所以就变成了没有 OwnerUin ...
我也忘了为什么那时我会这样写, 现在改成跟 get_batch_contract 一样
就有 OwnerUin 了

@littlecodersh
Copy link
Owner

@1265858594 哈哈,好的

@1265858594
Copy link
Author

@littlecodersh 灰常感谢

@1265858594
Copy link
Author

补充一下,回想起当时为什麽使用 @@来判断群,
是因为使用 @@来判断群之後要用这个列表来获取实际的群列表,
这个前半段做好了,结果忘了做後半段获取实际的群列表。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants