吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4165|回复: 50
收起左侧

[Python 原创] 用python管理QQ群

  [复制链接]
Eks6666 发表于 2024-1-13 19:26
[Python] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
import requests
import json
import time
import datetime
import re
import random
from PIL import Image
import os
 
 
class QqQun(object):
    headers = {
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/73.0.3683.75 Safari/537.36',
        'referer': 'https://qun.qq.com/member.html',
        'origin': 'https://qun.qq.com'
    }
 
    def __init__(self):
        self.bkn = None
        self.qun = None
        self.token = None
        self.qrsig = None
        self.cookies = None
        self.skey = None
 
    def login(self):
        if os.path.exists('cookie.txt'):
            with open('cookie.txt', 'r') as f:
                cookies = f.read().replace("'", '"')
            d = json.loads(cookies)
            self.cookies = d
            self.skey = d.get('skey')
            self.get_bkn()
            url = 'https://qun.qq.com/cgi-bin/qun_mgr/get_group_list'
            data = {'bkn': self.bkn}
            r = requests.post(url, headers=self.headers, data=data, cookies=self.cookies)
            js_data = json.loads(r.content.decode())
            if js_data.get('ec') == 4:
                print('cookie已过期,需要重新扫码')
                self.img_get()
            elif js_data.get('ec') == 0:
                print('登入成功')
                self.find_qun()
            else:
                print('出现了一点小状况....')
        else:
            print('第一次用吧?来来来,扫个码')
            self.img_get()
 
    def get_bkn(self):
        e = str(self.skey)
        t = 5381
        n = 0
        o = len(e)
        while n < o:
            t += (t << 5) + ord(e[n])
            n += 1
        self.bkn = t & 2147483647
 
    def get_token(self):
        n = len(self.qrsig)
        i = 0
        e = 0
        while n > i:
            e += (e << 5) + ord(self.qrsig[i])
            i += 1
        self.token = 2147483647 & e
 
    # 二维码图片
    def img_get(self):
        url = 'https://ssl.ptlogin2.qq.com/ptqrshow?'
        params = {
            'appid': '715030901',
            'e': '2',
            'l': 'M',
            's': '3',
            'd': '72',
            'v': '4',
            't': random.random(),
            'daid': '73',
            'pt_3rd_aid': '0'
        }
        r = requests.get(url, params=params)
        qrsig = requests.utils.dict_from_cookiejar(r.cookies).get('qrsig')
        with open('qr.jpg', 'wb') as f:
            f.write(r.content)
        r.close()
        img = Image.open('qr.jpg')
        img = img.resize((350, 350))
        img.show()
        self.qrsig = qrsig
        self.get_token()
        self.get_state()
 
    # 扫码状态
    def get_state(self):
        while True:
            url = 'https://ssl.ptlogin2.qq.com/ptqrlogin?u1=https%3A%2F%2Fqun.qq.com%2Fmanage.html%23click&ptqrtoken=' + str(
                self.token) + '&ptredirect=1&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=0-0-' + str(
                time.time()) + '&js_ver=20032614&js_type=1&login_sig=&pt_uistyle=40&aid=715030901&daid=73&'
            cookies = {'qrsig': self.qrsig}
            r = requests.get(url, cookies=cookies)
            r1 = r.text
            if '二维码未失效' in r1:
                print('二维码未失效', time.strftime('%Y-%m-%d %H:%M:%S'))
            elif '二维码认证中' in r1:
                print('二维码认证中', time.strftime('%Y-%m-%d %H:%M:%S'))
            elif '二维码已失效' in r1:
                print('二维码已失效', time.strftime('%Y-%m-%d %H:%M:%S'))
            else:
                print('登录成功', time.strftime('%Y-%m-%d %H:%M:%S'))
                os.remove('qr.jpg')
                cookies = requests.utils.dict_from_cookiejar(r.cookies)
                uin = requests.utils.dict_from_cookiejar(r.cookies).get('uin')
                regex = re.compile(r'ptsigx=(.*?)&')
                sigx = re.findall(regex, r.text)[0]
                url = 'https://ptlogin2.qun.qq.com/check_sig?pttype=1&uin=' + uin + '&service=ptqrlogin&nodirect=0' \
                                                                                    '&ptsigx=' + sigx + \
                      '&s_url=https%3A%2F%2Fqun.qq.com%2Fmanage.html&f_url=&ptlang=2052&ptredirect=101&aid=715030901' \
                      '&daid=73&j_later=0&low_login_hour=0&#174;master=0&pt_login_type=3&pt_aid=0&pt_aaid=16&pt_light=0' \
                      '&pt_3rd_aid=0 '
                r2 = requests.get(url, cookies=cookies, allow_redirects=False)
                self.cookies = requests.utils.dict_from_cookiejar(r2.cookies)
                with open('cookie.txt', 'w') as f:
                    f.write(str(self.cookies))
                self.skey = requests.utils.dict_from_cookiejar(r2.cookies).get('skey')
                self.get_bkn()
                self.find_qun()
                r.close()
                r2.close()
                break
            time.sleep(3)
 
    # 时间戳转时间
    def get_time(self, t):
        timeValue = time.localtime(t)
        tempDate = time.strftime("%Y-%m-%d %H:%M:%S", timeValue)
        tm = datetime.datetime.strptime(tempDate, "%Y-%m-%d %H:%M:%S")
        return tm
 
    # 修改群成员名称
    def revise_card(self):
        url = 'https://qun.qq.com/cgi-bin/qun_mgr/set_group_card'
        qq = input('请输入你要修改的群成员QQ:')
        msg = input('请输入修改后的群昵称:')
        data = {
            'gc': self.qun,
            'u': qq,
            'name': msg,
            'bkn': self.bkn
        }
        r = requests.post(url, headers=self.headers, data=data, cookies=self.cookies)
        js_data = json.loads(r.content.decode())
        print('不出意外的话应该修改成功了!(如果你是管理的话)')
        r.close()
 
    # 一个到三个月未发言的群员
    def inactive(self):
        url = 'https://qun.qq.com/cgi-bin/qun_mgr/search_group_members'
        data = {
            'gc': self.qun,
            'st': 0,
            'end': 20,
            'sort': 0,
            'last_speak_time': '2592000 | 7776000',
            'bkn': self.bkn
        }
        r = requests.post(url, headers=self.headers, data=data, cookies=self.cookies)
        js_data = json.loads(r.content.decode())
        r.close()
        if js_data.get('mems') == None:
            print('未发现一个月到三个月未发言的群成员')
        else:
            qq_list = []
            print('------以下为一个月到三个月未发言的群成员(一次显示最多20个)------')
            for i in js_data.get('mems'):
                t = self.get_time(int(i['join_time']))
                t1 = self.get_time(int(i['last_speak_time']))
                qq_list.append(i['uin'])
                print(f"QQ号:{i['uin']}\t群名称:{i['card']}\t入群时间:{t}\t最后发言:{t1}")
            while True:
                choose = input('是否要全部踢出群(y/n):')
                if choose == 'y':
                    print('收到,您选择y,程序开始执行....')
                    for qq in qq_list:
                        self.del_qq(qq)
                    print('程序执行完毕,建议重新查询不活跃群成员(一次最多只显示20人)')
                    break
                elif choose == 'n':
                    print('收到,您选择n,不踢出群')
                    break
                else:
                    print('只能输入y或者n')
 
    # 查看群
    def find_qun(self):
        url = 'https://qun.qq.com/cgi-bin/qun_mgr/get_group_list'
        data = {'bkn': self.bkn}
        r = requests.post(url, headers=self.headers, data=data, cookies=self.cookies)
        js_data = json.loads(r.content.decode())
        qun_list = []
        data_list = []
        data_list.extend(js_data['create'])
        data_list.extend(js_data['manage'])
        data_list.extend(js_data['join'])
        for x, i in enumerate(data_list, 1):
            qun_list.append(i['gc'])
            print(f"{x}.群号:{i['gc']}\t群名称:{i['gn']}\t群主:{i['owner']}")
        r.close()  # 关闭访问
        while True:
            qun = int(input('请输入需要操作的群(填序号):'))
            if qun <= len(qun_list):
                self.qun = qun_list[qun - 1]
                print(f'操作群:{qun_list[qun - 1]}')
                self.main()
                break
            else:
                print('是不是群号输错了?')
 
    # 查找群成员
    def find_qun_members(self):
        msg = input('请输入搜索的关键字(QQ号/昵称):')
        url = 'https://qun.qq.com/cgi-bin/qun_mgr/search_group_members'
        data = {
            'gc': self.qun,
            'key': msg,
            'bkn': self.bkn
        }
        r = requests.post(url, headers=self.headers, data=data, cookies=self.cookies)
        js_data = json.loads(r.content.decode())
        if 'mems' in js_data:
            jd = js_data['mems'][0]
            t = self.get_time(int(jd['join_time']))
            t1 = self.get_time(int(jd['last_speak_time']))
            print(f"QQ号:{jd['uin']}\t群名称:{jd['card']}\t入群时间:{t}\t最后发言:{t1}")
        else:
            print('没有符合筛选条件的群成员')
        r.close()
 
    # 踢人
    def del_qq(self, qq):
        url = 'https://qun.qq.com/cgi-bin/qun_mgr/delete_group_member'
        data = {
            'gc': self.qun,
            'ul': qq,
            'flag': '0',
            'bkn': self.bkn
        }
        r = requests.post(url, headers=self.headers, data=data, cookies=self.cookies)
        js_data = json.loads(r.content.decode())
        if js_data['ec'] == 0:
            if 'ul' in js_data:
                print(f'已将QQ{js_data["ul"][0]}踢出本群!')
            else:
                print(f'QQ[{qq}]地位与你同级或大于你的权限,无法进行操作!')
        else:
            print(f'未在本群查找到此{qq}')
        r.close()
 
    def main(self):
        while True:
            print("""
            ---注意:有些需要管理员或者群主权限---
            1.查找群成员
            2.移除群成员
            3.查看不活跃群员
            4.修改群昵称
            5.切换群
            6.退出系统
            """)
            choose = input('请选择操作序号:')
            if choose == '1':
                self.find_qun_members()
                input('按回车键继续操作......')
            elif choose == '2':
                qq = input('请输入要操作的QQ号:')
                self.del_qq(qq)
                input('按回车键继续操作......')
            elif choose == '3':
                self.inactive()
                input('按回车键继续操作......')
            elif choose == '4':
                self.revise_card()
                input('按回车键继续操作......')
            elif choose == '5':
                self.find_qun()
            elif choose == '6':
                print('欢迎下次使用')
                break
            else:
                print('请输入正确的序号!')
 
 
if __name__ == '__main__':
    q = QqQun()
    q.login()

免费评分

参与人数 10吾爱币 +10 热心值 +10 收起 理由
wang13483217659 + 1 + 1 看不懂啊,这是什么编辑软件,怎么吧这代码变成软件啊。。。有没有大神收个.
绿阳大叔 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
CIBao + 2 + 1
Circulation2020 + 1 谢谢@Thanks!
EHOOD + 1 + 1 谢谢@Thanks!
wzvideni + 1 + 1 热心回复!
SVIP9大会员 + 1 + 1 谢谢@Thanks!
keda888 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
liuxuming3303 + 1 + 1 用心讨论,共获提升!
wangzhu3366 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

apany3760 发表于 2024-1-15 13:41

205行  data_list.extend(js_data['manage']) 报错提示 KeyError: 'manage', 打印了一下确实没有, 注释这行就好了, 感谢分享
wangzhu3366 发表于 2024-1-13 19:47
头像被屏蔽
moruye 发表于 2024-1-13 20:08
Corgibro 发表于 2024-1-13 20:29
厉害,可惜已经不用QQ了,是我真的老了吗
YuYu798 发表于 2024-1-13 20:54
感谢分享
xingwenzhiyuan 发表于 2024-1-13 20:58
支持一下,现在QQ群,只是偶尔看一下了。
CYANCHAOS 发表于 2024-1-13 21:13
还有这种操作
jianghai19 发表于 2024-1-13 21:37
还能这样做,涨见识了
NCGZS 发表于 2024-1-13 21:43
支持一下,但是已经不怎么用QQ了
Rongg 发表于 2024-1-13 22:06
真厉害!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-6-3 20:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表