-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
550 lines (506 loc) · 42.7 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
'''
Author:Wrundorry @汪嗯个凉
Licence:The MIT Licence.
Time:2023/10/8
Version:1.1 数据库下载1.0版本
二开请认真阅读完所有注释,不然这个屎山代码会跑不起来。有问题上交 Issues 由开发者处理!
二次开发常用:
获得所有列表信息(调用获得数据库某行全部信息时生效):
result=result[0] # 得到用户所有信息的数据
uid=result[0] # 数据库独立id -数据库中的全局独立ID
fb_userid=result[1] # fanbook中的userid -Fanbook平台中的用户标识
fb_username=result[2] # fanbookid -Fanbook平台中的用户短ID
fb_nickname=result[3] # 昵称 -默认拉取Fanbook平台中的昵称
fb_toady=result[4] # 上一次打卡时间
fb_total=result[5] # 累计打卡次数 -一共打卡了多少次
fb_money=result[6] # 累计余额 -一共得了多少余额
img_pay=result[7] # 支付码 -支付方式
miniPush相关:
发起提现:devopen_check_money_out
同意提现申请:devopen_admin_money_t PS:t代表true,相反f代表false
拒绝提现申请:devopen_admin_money_f
更新日志:
v1.1 支持终端打印高亮提示
'''
import base64
import json
import threading
import time
import requests
import mysql.connector
import traceback
from websocket import create_connection, WebSocketConnectionClosedException
from datetime import datetime, date
import colorama
from colorama import init,Fore, Back, Style
init()
TOKEN = '001bde1cb07**********************************66bd64559a225daf477c6526e7837' # 机器人Toekn
BOT_ID = '4617***********32' # 机器人ID
BASE_URL = 'https://a1.fanbook.mobi/api'
DB_NAME="check" # 数据库名
DB_HOST="127.0.0.1" # 数据库主机
DB_USER="check" # 数据库用户名
DB_PWD="lyh1***27" # 数据库密码
PLAY_CHAT="5415446********88" # 签到频道ID
ONE_MONEY="0.01" #单次签到获得余额
DOOR="1" # 提现门槛(元)
SSF="" # 手续费(未支持)
ADMIN="375274******8887120" # 管理员长ID
TABLE_NAME="devopen_users"
def on_message(message): # 消息接收
s = message.decode('utf8')
obj = json.loads(s)
print(f"{Fore.CYAN}[WS广播]{Style.RESET_ALL}"+str(obj)+"")
if obj["action"]=="push": # 推送
if obj["data"]["channel_id"]==PLAY_CHAT: # 来自签到频道
content_type=obj["data"]["content"] #获得推送类型
content_type=json.loads(content_type)
content_type=content_type["type"] # 解析并得到类型
if content_type=="text": # 纯文本消息
content_data=obj["data"]["content"] # 获得文本内容
content_data=json.loads(content_data)
content_data=content_data["text"] # 解析并得到文本内容
if "${@!"+BOT_ID+"}" in content_data: # 提及@了机器人
if content_data=="${@!"+BOT_ID+"}${/签到打卡}": # 是签到打卡的指令
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}触发打卡指令")
user_id=obj["data"]["user_id"] # 用户Fanbook UserID
fanbookid = obj["data"]["author"]["username"] # 用户FanbookID
nickname = obj["data"]["author"]["nickname"] # 用户昵称
# 连接数据库
conn = mysql.connector.connect(user=DB_USER, password=DB_PWD,
host='127.0.0.1', database=DB_NAME)
cursor = conn.cursor()
query = ('SELECT * FROM `'+TABLE_NAME+'` WHERE FanbookUserId = %s') # 查找用户
values = (user_id,) # 插入用户ID
cursor.execute(query, values) #发起查询
result = cursor.fetchall()
# 关闭数据库连接
cursor.close()
conn.close()
if result: # 用户在数据表内
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}用户已注册")
result=result[0] # 得到用户所有信息的数据
uid=result[0] # 数据库独立id
fb_userid=result[1] # fanbook中的userid
fb_username=result[2] # fanbookid
fb_nickname=result[3] # 昵称
fb_toady=result[4] # 上一次打卡时间
fb_total=result[5] # 累计打卡次数
fb_money=result[6] # 累计余额
date_today = datetime.strptime(fb_toady, "%Y%m%d").date() # 将上一次打卡时间解析为可读类型
current_date = date.today() # 获得今日时间
if date_today == current_date: # 上一次打卡时间与今日时间相同
print(f"{Fore.YELLOW}[信息]{Style.RESET_ALL}用户已打卡")
# 发送频道提示
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/sendMessage"
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"chat_id": int(PLAY_CHAT),
"text": "{\"notification\":\"签到打卡机器人\",\"data\":\"{\\\"tag\\\":\\\"column\\\",\\\"children\\\":[{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12,8,12,8\\\",\\\"width\\\":1024,\\\"backgroundColor\\\":\\\"ffd8d8\\\",\\\"child\\\":{\\\"tag\\\":\\\"text\\\",\\\"data\\\":\\\"打卡签到 | 已打卡\\\",\\\"style\\\":{\\\"color\\\":\\\"#ff0000\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"medium\\\"}}},{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12\\\",\\\"width\\\":1024,\\\"child\\\":{\\\"tag\\\":\\\"markdown\\\",\\\"overflow\\\":\\\"clip\\\",\\\"textAlign\\\":\\\"left\\\",\\\"style\\\":{\\\"fontSize\\\":15,\\\"color\\\":\\\"#1F2329\\\"},\\\"data\\\":\\\"啊哟,你今天好像已经签到了耶~去银行看看吧!╰( ̄ω ̄o)\\\\n\\\\n----------\\\\n\\\\nDevOpen **银行满 ¥ 1 即可无门槛提现到微信账户或商城抵扣券。**\\\"}}]}\",\"come_from_name\":\"—— DevOpen 官方团队提供支持\",\"type\":\"messageCard\",\"come_from_icon\":\"111\"}",
"parse_mode": "Fanbook"
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
else: # 今日未打卡
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}用户打卡成功")# 信息
fb_total=int(fb_total)+1 # 累计打卡天数+1
fb_money=float(fb_money)+float(ONE_MONEY) # 累计余额加设定余额
today=current_date.strftime("%Y%m%d") # 将今日时间格式化成数据库内记载格式
# 连接数据库更新数据
conn = mysql.connector.connect(
user=DB_USER,
password=DB_PWD,
host='127.0.0.1',
database=DB_NAME
)
cursor = conn.cursor()
update_query = f"UPDATE `"+TABLE_NAME+"` SET today = " + str(today) + " WHERE FanbookUserId = " + str(
fb_userid) + ""
cursor.execute(update_query)
update_query = f"UPDATE `"+TABLE_NAME+"` SET total = " + str(fb_total) + " WHERE FanbookUserId = " + str(
fb_userid) + ""
cursor.execute(update_query)
update_query = f"UPDATE `"+TABLE_NAME+"` SET money = " + str(fb_money) + " WHERE FanbookUserId = " + str(
fb_userid) + ""
cursor.execute(update_query)
conn.commit()
# 发送频道通知
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/sendMessage" # 注意令牌
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"chat_id": int(PLAY_CHAT),
"text": "{\"notification\":\"签到打卡机器人\",\"data\":\"{\\\"tag\\\":\\\"column\\\",\\\"children\\\":[{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12,8,12,8\\\",\\\"width\\\":1024,\\\"backgroundColor\\\":\\\"fff1d8\\\",\\\"child\\\":{\\\"tag\\\":\\\"text\\\",\\\"data\\\":\\\"打卡签到 | 打卡成功\\\",\\\"style\\\":{\\\"color\\\":\\\"#ffa400\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"medium\\\"}}},{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12\\\",\\\"width\\\":1024,\\\"child\\\":{\\\"tag\\\":\\\"markdown\\\",\\\"overflow\\\":\\\"clip\\\",\\\"textAlign\\\":\\\"left\\\",\\\"style\\\":{\\\"fontSize\\\":15,\\\"color\\\":\\\"#1F2329\\\"},\\\"data\\\":\\\"🎉恭喜你签到成功!\\\\n\\\\n----------\\\\n\\\\n🎈累计签到:"+str(fb_total)+" 天\\\\n\\\\n💰全部资产:¥ "+str(fb_money)+"\\\\n\\\\n💴今日资产:¥ 0.01\\\"} }]}\",\"come_from_name\":\"—— DevOpen 官方\",\"type\":\"messageCard\",\"come_from_icon\":\"111\"}",
"parse_mode": "Fanbook"
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
print(f"{Fore.BLUE}[提示]{Style.RESET_ALL}任务完成")
else: # 用户不在数据库内
print(f"{Fore.YELLOW}[信息]{Style.RESET_ALL}用户未注册")
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}昵称:"+nickname+"") # 信息
current_date = date.today() # 今日日期
today=current_date.strftime("%Y%m%d") # 格式化今日日期
try: # 尝试插入用户数据
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}用户注册完成")
cnx = mysql.connector.connect(user=DB_USER, password=DB_PWD,
host='127.0.0.1', database=DB_NAME)
cursor = cnx.cursor()
add_user = ("INSERT INTO `"+TABLE_NAME+"` "
"(FanbookUserId, FanbookID, nickname ,today,total,money) "
"VALUES ("+str(user_id)+", "+str(fanbookid)+", '"+str(nickname)+"', "+str(today)+",1,0.05)")
cursor.execute(add_user)
cnx.commit()
# 关闭连接
cursor.close()
cnx.close()
except: # 无法插入,因为昵称包含特殊字符
print(f"{Fore.RED}[错误]{Style.RESET_ALL}用户用户名包含特殊字符")
cnx = mysql.connector.connect(user=DB_USER, password=DB_PWD,
host='127.0.0.1', database=DB_NAME)
cursor = cnx.cursor()
add_user = ("INSERT INTO `"+TABLE_NAME+"` "
"(FanbookUserId, FanbookID, nickname ,today,total,money) "
"VALUES ("+str(user_id)+", "+str(fanbookid)+", '昵称未同步', "+str(today)+",1,0.05)")
cursor.execute(add_user)
cnx.commit()
# 关闭连接
cursor.close()
cnx.close()
print(f"{Fore.YELLOW}[信息]{Style.RESET_ALL}已特殊处理并注册成功")
# 频道发送通知
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/sendMessage" # 注意令牌
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"chat_id": int(PLAY_CHAT),
"text": "{\"notification\":\"签到打卡机器人\",\"data\":\"{\\\"tag\\\":\\\"column\\\",\\\"children\\\":[{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12,8,12,8\\\",\\\"width\\\":1024,\\\"backgroundColor\\\":\\\"fff1d8\\\",\\\"child\\\":{\\\"tag\\\":\\\"text\\\",\\\"data\\\":\\\"打卡签到 | 打卡成功\\\",\\\"style\\\":{\\\"color\\\":\\\"#ffa400\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"medium\\\"}}},{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12\\\",\\\"width\\\":1024,\\\"child\\\":{\\\"tag\\\":\\\"markdown\\\",\\\"overflow\\\":\\\"clip\\\",\\\"textAlign\\\":\\\"left\\\",\\\"style\\\":{\\\"fontSize\\\":15,\\\"color\\\":\\\"#1F2329\\\"},\\\"data\\\":\\\"🎉恭喜你签到成功!\\\\n\\\\n----------\\\\n\\\\n🎈累计签到:1 天\\\\n\\\\n💰全部资产:¥ 0.05\\\\n\\\\n💴今日资产:¥ 0.05\\\\n\\\\n----------\\\\n\\\\n您首次使用本机器人打卡,首次资产添加¥0.05,后续每日¥0.01。满¥1即可提现至微信账户或抵换优惠券,**具体请见银行系统**。本条目以后不再显示。\\\"} }]}\",\"come_from_name\":\"—— DevOpen 官方\",\"type\":\"messageCard\",\"come_from_icon\":\"111\"}",
"parse_mode": "Fanbook"
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
print(f"{Fore.BLUE}[提示]{Style.RESET_ALL}任务完成") # 信息
elif "${@!"+BOT_ID+"}${/银行系统}": # 是银行功能的指令
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}触发银行指令")
user_id=obj["data"]["user_id"] # 用户的Fanbook UserID
fanbookid = obj["data"]["author"]["username"] # 用户FanbookID
nickname = obj["data"]["author"]["nickname"] # 用户昵称
# 信息查询
conn = mysql.connector.connect(user=DB_USER, password=DB_PWD,
host='127.0.0.1', database=DB_NAME)
cursor = conn.cursor()
query = ('SELECT * FROM `'+TABLE_NAME+'` WHERE FanbookUserId = %s')
values = (user_id,)
cursor.execute(query, values)
result = cursor.fetchall()
# 关闭数据库连接
cursor.close()
conn.close()
if result: # 仅注册后可用
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}用户已注册")
result=result[0] # 得到用户所有信息的数据
uid=result[0] # 数据库独立id
fb_userid=result[1] # fanbook中的userid
fb_username=result[2] # fanbookid
fb_nickname=result[3] # 昵称
fb_toady=result[4] # 上一次打卡时间
fb_total=result[5] # 累计打卡次数
fb_money=result[6] # 累计余额
# 频道发送用户银行信息 频道通知
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/sendMessage" # 注意令牌
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"chat_id": int(PLAY_CHAT),
"text": "{\"notification\":\"签到打卡机器人\",\"data\":\"{\\\"tag\\\":\\\"column\\\",\\\"children\\\":[{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12,8,12,8\\\",\\\"width\\\":1024,\\\"backgroundColor\\\":\\\"ffffd9\\\",\\\"child\\\":{\\\"tag\\\":\\\"text\\\",\\\"data\\\":\\\"打卡签到 | 银行系统\\\",\\\"style\\\":{\\\"color\\\":\\\"#ffc55a\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"medium\\\"}}},{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12\\\",\\\"width\\\":1024,\\\"child\\\":{\\\"tag\\\":\\\"markdown\\\",\\\"overflow\\\":\\\"clip\\\",\\\"textAlign\\\":\\\"left\\\",\\\"style\\\":{\\\"fontSize\\\":15,\\\"color\\\":\\\"#1F2329\\\"},\\\"data\\\":\\\"💰在线小银行💰\\\\n\\\\n----------\\\\n\\\\n💳银行卡号:"+str(uid)+"\\\\n\\\\n🎫提现门槛:¥ "+str(DOOR)+"\\\\n\\\\n🤝今日费率:"+str(SSF)+"\\\\n\\\\n----------\\\\n\\\\n🎈累计签到:"+str(fb_total)+" 天\\\\n\\\\n💰可用资产:¥ "+str(fb_money)+"\\\"}}]}\",\"come_from_name\":\"—— DevOpen 官方\",\"type\":\"messageCard\",\"come_from_icon\":\"111\"}",
"parse_mode": "Fanbook",
"reply_markup": {
"inline_keyboard": [
[
{
"text": "申请提现",
"callback_data": "{\"come_from\":\"devopen_check_money_out\",\"user_id\":\""+str(fb_userid)+"\",\"fanbook_id\":\""+str(fb_username)+"\",\"chat_id\":\""+str(PLAY_CHAT)+"\"}"
}
]
]
}
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
print(f"{Fore.BLUE}[提示]{Style.RESET_ALL}任务完成") # 信息
elif obj["action"]=="miniPush": # 内联键盘穿透消息
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}接收内联键盘消息") # 信息 # 信息
try: # 尝试获取穿透信息
# 这一段都是用来得到code_from的json解析,不要动它。我花了好长时间才解析出来的。
data = obj["data"]
data = data["content"]
data = json.loads(data)
data = data["callback_query"]
comefrom = data["from"]["id"]
data = data["data"]
data = json.loads(data)
# 开始解析是不是机器人需要的穿透信息
if data["come_from"] == "devopen_check_money_out": # devopen_check_money_out信息:用户发起提现申请,管理员查阅审批
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}用户提现申请") # 信息
chat_id=data["chat_id"] # 频道ID
user_id=data["user_id"] # 用户的 Fanbook UserID
if str(user_id)==str(comefrom): # 点击内联键盘的是不是自己,如果是那么
# 连接数据库查询用户信息
conn = mysql.connector.connect(user=DB_USER, password=DB_PWD,
host='127.0.0.1', database=DB_NAME)
cursor = conn.cursor()
query = ('SELECT * FROM `'+TABLE_NAME+'` WHERE FanbookUserId = %s')
values = (user_id,)
cursor.execute(query, values)
result = cursor.fetchall()
# 关闭数据库连接
cursor.close()
conn.close()
if result: # 用户信息返回
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}用户已注册")
result=result[0] # 得到用户所有信息的数据
uid=result[0] # 数据库独立id
fb_userid=result[1] # fanbook中的userid
fb_username=result[2] # fanbookid
fb_nickname=result[3] # 昵称
fb_toady=result[4] # 上一次打卡时间
fb_total=result[5] # 累计打卡次数
fb_money=result[6] # 累计余额
date_today = datetime.strptime(fb_toady, "%Y%m%d").date() # 将上一次打卡时间解析为可读类型
current_date = date.today() # 获得今日时间
img_pay=result[7] # 支付码
if img_pay!=None: # 上传了支付码
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}用户已上传收款码")
if float(DOOR)<float(fb_money): # 达到了提现门槛
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}用户达到提现门槛")
# 获得管理员的私聊频道用户发送批准信息
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/getPrivateChat"
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"user_id":int(ADMIN)
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
postreturn=json.loads(postreturn.text) # 解析接口返回
private_id=postreturn["result"]["id"] # 获得私聊频道ID
# 发送管理员批准信息
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/sendMessage"
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"chat_id": int(private_id),
"text": "{\"notification\":\"提现申请\",\"data\":\"{\\\"tag\\\":\\\"column\\\",\\\"children\\\":[{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12,8,12,8\\\",\\\"width\\\":1024,\\\"backgroundColor\\\":\\\"ffd8d8\\\",\\\"child\\\":{\\\"tag\\\":\\\"text\\\",\\\"data\\\":\\\"管理面板 | 银行系统 - 提现\\\",\\\"style\\\":{\\\"color\\\":\\\"#ff0000\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"medium\\\"}}},{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12\\\",\\\"width\\\":1024,\\\"child\\\":{\\\"tag\\\":\\\"markdown\\\",\\\"overflow\\\":\\\"clip\\\",\\\"textAlign\\\":\\\"left\\\",\\\"style\\\":{\\\"fontSize\\\":15,\\\"color\\\":\\\"#1F2329\\\"},\\\"data\\\":\\\"${@!"+str(fb_userid)+"}用户申请提现\\\\n\\\\n---------\\\\n\\\\n金额:"+str(fb_money)+"\\\\n\\\\n卡号:"+str(uid)+"\\\"}}]}\",\"come_from_name\":\"—— DevOpen 官方团队提供支持\",\"type\":\"messageCard\",\"come_from_icon\":\"111\"}",
"parse_mode": "Fanbook",
"reply_markup": {
"inline_keyboard": [
[
{
"text": "提现完成",
"callback_data": "{\"come_from\":\"devopen_admin_money_t\",\"user_id\":\""+str(fb_userid)+"\",\"fanbook_id\":\""+str(fb_username)+"\",\"money\":\""+str(fb_money)+"\"}"
},{
"text": "拒绝提现",
"callback_data": "{\"come_from\":\"devopen_admin_money_f\",\"user_id\":\""+str(fb_userid)+"\",\"fanbook_id\":\""+str(fb_username)+"\",\"money\":\""+str(fb_money)+"\"}"
}
]
]
}
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
# 发送频道通知用户
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/sendMessage"
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"chat_id": int(PLAY_CHAT),
"text": "{\"notification\":\"签到打卡机器人\",\"data\":\"{\\\"tag\\\":\\\"column\\\",\\\"children\\\":[{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12,8,12,8\\\",\\\"width\\\":1024,\\\"backgroundColor\\\":\\\"ffffd9\\\",\\\"child\\\":{\\\"tag\\\":\\\"text\\\",\\\"data\\\":\\\"打卡签到 | 银行系统 - 申请提交\\\",\\\"style\\\":{\\\"color\\\":\\\"#ffc55a\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"medium\\\"}}},{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12\\\",\\\"width\\\":1024,\\\"child\\\":{\\\"tag\\\":\\\"markdown\\\",\\\"overflow\\\":\\\"clip\\\",\\\"textAlign\\\":\\\"left\\\",\\\"style\\\":{\\\"fontSize\\\":15,\\\"color\\\":\\\"#1F2329\\\"},\\\"data\\\":\\\"💰在线小银行💰\\\\n\\\\n----------\\\\n\\\\n💳银行卡号:"+str(uid)+"\\\\n\\\\n提现申请已经提交至管理员,请等待管理员批准即可到账!(未到账不扣除余额)\\\"}}]}\",\"come_from_name\":\"—— DevOpen 官方\",\"type\":\"messageCard\",\"come_from_icon\":\"111\"}",
"parse_mode": "Fanbook"
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
print(f"{Fore.BLUE}[提示]{Style.RESET_ALL}任务完成") # 信息
else: # 没有达到提现门槛
print(f"{Fore.YELLOW}[信息]{Style.RESET_ALL}用户未达到门槛")
# 发送频道通知
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/sendMessage"
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"chat_id": int(PLAY_CHAT),
"text": "{\"notification\":\"签到打卡机器人\",\"data\":\"{\\\"tag\\\":\\\"column\\\",\\\"children\\\":[{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12,8,12,8\\\",\\\"width\\\":1024,\\\"backgroundColor\\\":\\\"ffd8d8\\\",\\\"child\\\":{\\\"tag\\\":\\\"text\\\",\\\"data\\\":\\\"打卡签到 | 银行系统 - 门槛\\\",\\\"style\\\":{\\\"color\\\":\\\"#ff0000\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"medium\\\"}}},{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12\\\",\\\"width\\\":1024,\\\"child\\\":{\\\"tag\\\":\\\"markdown\\\",\\\"overflow\\\":\\\"clip\\\",\\\"textAlign\\\":\\\"left\\\",\\\"style\\\":{\\\"fontSize\\\":15,\\\"color\\\":\\\"#1F2329\\\"},\\\"data\\\":\\\"**提现门槛为:"+str(DOOR)+"元,当前余额:"+str(fb_money)+"**\\\\n\\\\n----------\\\\n\\\\n多积攒几天再来吧!\\\"}}]}\",\"come_from_name\":\"—— DevOpen 官方团队提供支持\",\"type\":\"messageCard\",\"come_from_icon\":\"111\"}",
"parse_mode": "Fanbook"
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
print(f"{Fore.BLUE}[提示]{Style.RESET_ALL}任务完成") # 信息
else: # 用户没有上传支付码
print(f"{Fore.YELLOW}[信息]{Style.RESET_ALL}用户无法验证用户收款码") # 信息
# 发送频道通知
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/sendMessage"
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"chat_id": int(PLAY_CHAT),
"text": "{\"notification\":\"签到打卡机器人\",\"data\":\"{\\\"tag\\\":\\\"column\\\",\\\"children\\\":[{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12,8,12,8\\\",\\\"width\\\":1024,\\\"backgroundColor\\\":\\\"ffd8d8\\\",\\\"child\\\":{\\\"tag\\\":\\\"text\\\",\\\"data\\\":\\\"打卡签到 | 银行系统 - 未绑定\\\",\\\"style\\\":{\\\"color\\\":\\\"#ff0000\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"medium\\\"}}},{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12\\\",\\\"width\\\":1024,\\\"child\\\":{\\\"tag\\\":\\\"markdown\\\",\\\"overflow\\\":\\\"clip\\\",\\\"textAlign\\\":\\\"left\\\",\\\"style\\\":{\\\"fontSize\\\":15,\\\"color\\\":\\\"#1F2329\\\"},\\\"data\\\":\\\"**该功能需要绑定微信收款码后才可使用。**\\\\n\\\\n----------\\\\n\\\\n请联系管理员人工协助绑定!\\\"}}]}\",\"come_from_name\":\"—— DevOpen 官方团队提供支持\",\"type\":\"messageCard\",\"come_from_icon\":\"111\"}",
"parse_mode": "Fanbook"
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
print(f"{Fore.BLUE}[提示]{Style.RESET_ALL}任务完成") # 信息
# 注:当前版本不支持在线上传支付码
elif data["come_from"]=="devopen_admin_money_t": # 同意用户提现申请
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}管理员同意提现") # 信息
user_id=data["user_id"] # 用户Fanbook UserID
money=data["money"] # 用户申请提现的余额
# 更新数据库数据
conn = mysql.connector.connect(user=DB_USER, password=DB_PWD,
host='127.0.0.1', database=DB_NAME)
cursor = conn.cursor()
query = ('SELECT * FROM `'+TABLE_NAME+'` WHERE FanbookUserId = %s')
values = (user_id,)
cursor.execute(query, values)
result = cursor.fetchall()
# 关闭数据库连接
cursor.close()
conn.close()
result=result[0] # 得到用户所有信息的数据
uid=result[0] # 数据库独立id
fb_userid=result[1] # fanbook中的userid
fb_username=result[2] # fanbookid
fb_nickname=result[3] # 昵称
fb_toady=result[4] # 上一次打卡时间
fb_total=result[5] # 累计打卡次数
fb_money=result[6] # 累计余额
img_pay=result[7] # 支付码
print(f"{Fore.BLUE}[信息]{Style.RESET_ALL}用户剩余:"+str(fb_money)+"") # 信息
print(f"{Fore.BLUE}[信息]{Style.RESET_ALL}用户提现:"+str(money)+"") # 信息
fb_money=float(fb_money)-float(money) # 设置提现后余额
# 更新数据库内容
conn = mysql.connector.connect(
user=DB_USER,
password=DB_PWD,
host='127.0.0.1',
database=DB_NAME
)
cursor = conn.cursor()
update_query = f"UPDATE `"+TABLE_NAME+"` SET money = " + str(fb_money) + " WHERE FanbookUserId = " + str(
user_id) + ""
cursor.execute(update_query)
conn.commit()
# 验证/获取当前用户信息
conn = mysql.connector.connect(user=DB_USER, password=DB_PWD,
host='127.0.0.1', database=DB_NAME)
cursor = conn.cursor()
query = ('SELECT * FROM `'+TABLE_NAME+'` WHERE FanbookUserId = %s')
values = (user_id,)
cursor.execute(query, values)
result = cursor.fetchall()
# 关闭数据库连接
cursor.close()
conn.close()
result=result[0] # 得到用户所有信息的数据
uid=result[0] # 数据库独立id
fb_userid=result[1] # fanbook中的userid
fb_username=result[2] # fanbookid
fb_nickname=result[3] # 昵称
fb_toady=result[4] # 上一次打卡时间
fb_total=result[5] # 累计打卡次数
fb_money=result[6] # 累计余额
img_pay=result[7] # 支付码
# 获得管理员私聊频道
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/getPrivateChat" # 注意令牌
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"user_id":int(ADMIN)
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
postreturn=json.loads(postreturn.text) # 解析接口返回数据
private_id=postreturn["result"]["id"] # 获得私聊频道
# 发送批准通知
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/sendMessage"
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"chat_id": int(private_id),
"text": "{\"notification\":\"提现批准\",\"data\":\"{\\\"tag\\\":\\\"column\\\",\\\"children\\\":[{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12,8,12,8\\\",\\\"width\\\":1024,\\\"backgroundColor\\\":\\\"ffd8d8\\\",\\\"child\\\":{\\\"tag\\\":\\\"text\\\",\\\"data\\\":\\\"管理面板 | 银行系统 - 批准\\\",\\\"style\\\":{\\\"color\\\":\\\"#ff0000\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"medium\\\"}}},{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12\\\",\\\"width\\\":1024,\\\"child\\\":{\\\"tag\\\":\\\"markdown\\\",\\\"overflow\\\":\\\"clip\\\",\\\"textAlign\\\":\\\"left\\\",\\\"style\\\":{\\\"fontSize\\\":15,\\\"color\\\":\\\"#1F2329\\\"},\\\"data\\\":\\\"${@!"+str(user_id)+"}\\\\n\\\\n---------\\\\n\\\\n卡余额:"+str(fb_money)+"\\\\n\\\\n申请余额:"+str(money)+"\\\"}}]}\",\"come_from_name\":\"—— DevOpen 官方团队提供支持\",\"type\":\"messageCard\",\"come_from_icon\":\"111\"}",
"parse_mode": "Fanbook",
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
# 获取申请提现用户私聊频道
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/getPrivateChat" # 注意令牌
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"user_id":int(user_id)
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
postreturn=json.loads(postreturn.text) # 解析接口返回数据
private_id=postreturn["result"]["id"] # 获得私聊频道
# 通知用户余额到账
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/sendMessage"
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"chat_id": int(private_id),
"text": "{\"notification\":\"提现成功\",\"data\":\"{\\\"tag\\\":\\\"column\\\",\\\"children\\\":[{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12,8,12,8\\\",\\\"width\\\":1024,\\\"backgroundColor\\\":\\\"ffffd9\\\",\\\"child\\\":{\\\"tag\\\":\\\"text\\\",\\\"data\\\":\\\"打卡签到 | 银行系统 - 批准\\\",\\\"style\\\":{\\\"color\\\":\\\"#ffc55a\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"medium\\\"}}},{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12\\\",\\\"width\\\":1024,\\\"child\\\":{\\\"tag\\\":\\\"markdown\\\",\\\"overflow\\\":\\\"clip\\\",\\\"textAlign\\\":\\\"left\\\",\\\"style\\\":{\\\"fontSize\\\":15,\\\"color\\\":\\\"#1F2329\\\"},\\\"data\\\":\\\"💰在线小银行💰\\\\n\\\\n----------\\\\n\\\\n请您到微信余额里查看。\\\"}}]}\",\"come_from_name\":\"—— DevOpen 官方\",\"type\":\"messageCard\",\"come_from_icon\":\"111\"}",
"parse_mode": "Fanbook"
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
print(f"{Fore.BLUE}[提示]{Style.RESET_ALL}任务完成") # 信息
elif data["come_from"]=="devopen_admin_money_f": # 拒绝用户提现申请
print(f"{Fore.GREEN}[信息]{Style.RESET_ALL}管理员拒绝用户提现申请") # 信息
user_id=data["user_id"] # 用户Fanbook UserID
money=data["money"] # 用户申请提现的余额
# 获得管理员私聊频道
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/getPrivateChat" # 注意令牌
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"user_id":int(ADMIN)
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
postreturn=json.loads(postreturn.text) # 解析接口返回数据
private_id=postreturn["result"]["id"] # 获得私聊频道
# 发送拒绝通知
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/sendMessage"
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"chat_id": int(private_id),
"text": "{\"notification\":\"提现拒绝\",\"data\":\"{\\\"tag\\\":\\\"column\\\",\\\"children\\\":[{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12,8,12,8\\\",\\\"width\\\":1024,\\\"backgroundColor\\\":\\\"ffd8d8\\\",\\\"child\\\":{\\\"tag\\\":\\\"text\\\",\\\"data\\\":\\\"管理面板 | 银行系统 - 拒绝\\\",\\\"style\\\":{\\\"color\\\":\\\"#ff0000\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"medium\\\"}}},{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12\\\",\\\"width\\\":1024,\\\"child\\\":{\\\"tag\\\":\\\"markdown\\\",\\\"overflow\\\":\\\"clip\\\",\\\"textAlign\\\":\\\"left\\\",\\\"style\\\":{\\\"fontSize\\\":15,\\\"color\\\":\\\"#1F2329\\\"},\\\"data\\\":\\\"${@!"+str(user_id)+"}\\\\n\\\\n---------\\\\n\\\\n申请余额:"+str(money)+"\\\\n\\\\n------\\\\n\\\\n已拒绝。\\\"}}]}\",\"come_from_name\":\"—— DevOpen 官方团队提供支持\",\"type\":\"messageCard\",\"come_from_icon\":\"111\"}",
"parse_mode": "Fanbook",
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
# 通知用户管理员拒绝提现
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/getPrivateChat" # 注意令牌
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"user_id":int(user_id)
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
postreturn=json.loads(postreturn.text)
private_id=postreturn["result"]["id"]
url = "https://a1.fanbook.mobi/api/bot/" + TOKEN + "/sendMessage"
headers = {'content-type': "application/json;charset=utf-8"}
jsonfile = json.dumps({
"chat_id": int(private_id),
"text": "{\"notification\":\"提现失败\",\"data\":\"{\\\"tag\\\":\\\"column\\\",\\\"children\\\":[{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12,8,12,8\\\",\\\"width\\\":1024,\\\"backgroundColor\\\":\\\"ffffd9\\\",\\\"child\\\":{\\\"tag\\\":\\\"text\\\",\\\"data\\\":\\\"打卡签到 | 银行系统 - 拒绝\\\",\\\"style\\\":{\\\"color\\\":\\\"#ffc55a\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"medium\\\"}}},{\\\"tag\\\":\\\"container\\\",\\\"padding\\\":\\\"12\\\",\\\"width\\\":1024,\\\"child\\\":{\\\"tag\\\":\\\"markdown\\\",\\\"overflow\\\":\\\"clip\\\",\\\"textAlign\\\":\\\"left\\\",\\\"style\\\":{\\\"fontSize\\\":15,\\\"color\\\":\\\"#1F2329\\\"},\\\"data\\\":\\\"💰在线小银行💰\\\\n\\\\n----------\\\\n\\\\n管理员拒绝了你的提现请求。余额不会变更。可能原因:收款方式不正确、账户异常。请联系管理员(${@!"+str(ADMIN)+"})咨询详情。\\\"}}]}\",\"come_from_name\":\"—— DevOpen 官方\",\"type\":\"messageCard\",\"come_from_icon\":\"111\"}",
"parse_mode": "Fanbook"
})
postreturn = requests.post(url, data=jsonfile, headers=headers)
print(f"{Fore.BLUE}[提示]{Style.RESET_ALL}任务完成") # 信息
except Exception as e:
# 为了防止接受其他机器人的信息导致失败,直接忽略
traceback.print_exc() # 打印完整的错误数据
def send_ping(ws):
while True:
time.sleep(20)
ws.send('{"type":"ping"}')
def get_me():
response = requests.get(f"{BASE_URL}/bot/{TOKEN}/getMe", timeout=3)
return response.json()
def handleWS(user_token):
version = '1.6.60'
device_id = f'bot{BOT_ID}'
header_map = json.dumps({
"device_id": device_id,
"version": version,
"platform": "bot",
"channel": "office",
"build_number": "1"
})
super_str = base64.b64encode(header_map.encode('utf8')).decode('utf8')
addr = f'wss://gateway-bot.fanbook.mobi/websocket?id={user_token}&dId={device_id}&v={version}&x-super-properties={super_str}'
ws = create_connection(addr)
ping_thread = threading.Thread(target=send_ping, args=(ws,))
ping_thread.daemon = True
ping_thread.start()
try:
while True:
evt_data = ws.recv()
on_message(evt_data)
except WebSocketConnectionClosedException:
print("WebSocketClosed")
if __name__ == '__main__':
res = get_me()
user_token = res["result"]['user_token']
handleWS(user_token)