-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmet.py
executable file
·152 lines (133 loc) · 4.7 KB
/
met.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
#!/usr/bin/python
#-*- coding=utf-8 -*-
import logging
import time
import sys
from telegram_python import PyTelegram
class AutoMet(PyTelegram):
def __init__(self):
super(AutoMet, self).__init__()
self.create_test_group()
def create_test_group(self):
try:
self.test_group = "mettest"
test_groupinfo = self.get_printinfo(self.test_group)
if not test_groupinfo:
self_info = self.sender.get_self()
logging.debug(self_info)
self_username = self_info["username"]
self.create_group(self.test_group, [self_username, "enl_jarvis_bot"])
test_groupinfo = self.get_printinfo(self.test_group)
self.test_groupid = test_groupinfo["id"]
except Exception as e :
logging.error(e)
def parse_argv(self):
try:
target = sys.argv[1]
except Exception as e:
logging.error(e)
return False
target_info = self.get_printinfo(target)
if not target_info:
return False
try:
target_type = target_info["peer_type"]
printname = target_info["print_name"]
except Exception as e:
logging.error(e)
if target_type == "user":
return self.met_userlist([target_info])
elif target_type == "chat":
return self.met_chat(printname)
else:
return self.met_group(printname)
def get_printinfo(self, target):
dialogs = self.get_dialog_list()
dialogs.reverse()
for dialog_info in dialogs:
for key in ["title", "username", "print_name"]:
if key in dialog_info and dialog_info[key] == target:
return dialog_info
return {}
def met_chat(self, group):
try:
members = self.chat_get_members(group)
except Exception as e:
logging.error(e)
return False
return self.met_userlist(members,group)
def met_group(self, group):
try:
members = self.channel_get_members(group)
except Exception as e:
logging.error(e)
return False
return self.met_userlist(members,group)
def met_userlist(self, userlist, group=""):
if not group:
group = self.test_group
for user_dict in userlist:
try:
user = user_dict["username"]
if user in ["chliny", "enl_jarvis_bot"]:
continue
if self.ismeted(user):
logging.debug("%s has meted" % user)
continue
logging.debug(user)
self.met_user(user, group)
except Exception as e:
logging.error(e)
return True
def ismeted(self, user):
self.met_user(user, self.test_group)
history_ret = self.get_history(self.test_groupid, 2)
metword = "";
trytimes = 10
while True and trytimes > 0:
for chatid, chat_info in history_ret.items():
try:
if chat_info["event"] != "message":
continue
if "reply_id" not in chat_info:
break
logging.debug(chat_info)
reply_id = chat_info["reply_id"]
orig_info = history_ret[reply_id]
orig_text = orig_info["text"]
if orig_text.find(user) == -1:
continue
else:
metword = chat_info["text"]
break
except Exception as e:
logging.error(e)
if not metword :
time.sleep(5)
history_ret = self.get_history(self.test_groupid, 2)
else:
break
trytimes -= 1
logging.debug(metword)
if metword.startswith("您之前已经见过") or metword.startswith("You have already met"):
return True
elif metword.startswith("抱歉我并不知道") or metword.startswith("I'm not aware of who"):
return True
else:
logging.debug(metword)
return False
return True
def met_user(self, user, group):
try:
if user.startswith("@"):
word = "/met %s" % user
else:
word = "/met @%s" % user
self.sender.send_msg(group, word)
except Exception as e :
logging.error(e)
return False
return True
if __name__ == "__main__":
automet = AutoMet()
automet.parse_argv()