Telegram_luanon
Anonymous
plain_text
02/16/2022 4:27 PM
6.8 KB
30
Indexable
import os
import time
from telethon import TelegramClient, sync, events
from telethon.tl.functions.channels import JoinChannelRequest, LeaveChannelRequest
from .utils import Utils, TelegramTask
from .exceptions import NoValue
class Telegram:
def __init__(self, phone=None, api_ịd=None, api_hash=None, delay=None):
self.Utils = Utils()
self.tasks = []
self.consts = {}
self.tag = "Telegram"
self.phone = phone or self.raise_error("noValue", "phone")
self.api_id = api_ịd or 1339492
self.api_hash = api_hash or "262d46fcf6756c14123ee6910c6ee5f3"
self.delay = delay or 2
self.check_file()
def raise_error(self, ex_type=None, ex_name=None):
if ex_type == "noValue":
raise NoValue("Value {0} bị thiếu, vui lòng truyền vào value {0}".format(ex_name))
def check_file(self):
if not os.path.exists("session"):
os.makedirs("session")
if not os.listdir("session"):
print("Bỏ tệp +84966xxx.session vào thư mục session để chạy tool")
exit()
def sess_connect(self):
try:
client = TelegramClient("session/%s" %self.phone, self.api_id, self.api_hash)
client.connect()
if not client.is_user_authorized():
self.Utils.wrong(self.tag, "Không có kể nối: %s" %self.phone)
return False
return client
except Exception as e:
traceback = "Sess_connect: %s - %s - %s" %(e.__traceback__.tb_frame.f_code.co_filename, e.__traceback__.tb_lineno, e)
self.Utils.wrong(self.tag, traceback)
return False
def add_task(self, entity=None, task_answer=None, task_type=None, task_delay=None, const=None, command=None):
self.tasks.append({"entity": entity, "task_answer": task_answer, "task_type": task_type, "task_delay": task_delay or self.delay, "const": const, "command": command})
def run(self):
done = False
for _ in range(3):
try:
sess = self.sess_connect()
if sess == False:
continue
for task in self.tasks:
entity = task["entity"]
entity = sess.get_entity(entity) if entity else entity
task_answer = task["task_answer"]
task_type = task["task_type"]
task_delay = task["task_delay"]
const = task["const"]
command = task["command"]
argcount = command.__code__.co_argcount if command else 0
if task_type == "SMSG":
if const:
if const in self.consts.keys():
text = self.consts[const]
else:
if "cache" in self.consts.keys():
text = self.consts["cache"]
else:
text = task_answer
else:
text = task_answer
if argcount == 1:
text = command(text)
sess.send_message(entity, text)
elif task_type == "GMSG":
if isinstance(task_answer, (list, tuple)):
limit, index = task_answer
msg = sess.get_messages(entity, limit=limit)[index]
else:
limit, index = 1, 0
msg = sess.get_messages(entity, limit=limit)[index]
text = msg.message
if argcount == 1:
text = command(text)
if const:
self.consts.update({const: text})
else:
self.consts.update({"cache": text})
elif task_type == "GIMG":
if isinstance(task_answer, (list, tuple)):
limit, index = task_answer
img = sess.get_messages(entity, limit=limit)[index]
else:
limit, index = 1, 0
img = sess.get_messages(entity, limit=limit)[index]
if img.media:
img = img.download_media("captcha.jpg")
if argcount == 1:
img = command(img)
if const:
self.consts.update({const: img})
else:
self.consts.update({"cache": img})
elif task_type == "C":
if isinstance(task_answer, (list, tuple)):
row, col = task_answer
sess.get_messages(entity, limit=1)[0].click(row, col)
elif isinstance(task_answer, int):
sess.get_messages(entity, limit=1)[0].click(task_answer)
else:
self.Utils.wrong(self.tag, "Task_type: '%s' nhận được câu trả lời sai '%s' thay vì int, list, tuple" %(task_type, type(task_answer)))
elif task_type in ["J", "L"]:
if isinstance(task_answer, str):
if task_type == "J":
sess(JoinChannelRequest(task_answer))
else:
sess(LeaveChannelRequest(task_answer))
elif isinstance(task_answer, (list, tuple)):
for group in task_answer:
if task_type == "J":
sess(JoinChannelRequest(group))
else:
sess(LeaveChannelRequest(group))
else:
self.Utils.wrong(self.tag, "Task_type: '%s' nhận được câu trả lời sai '%s' thay vì str, list, tuple" %(task_type, type(task_answer)))
else:
self.Utils.wrong(self.tag, "Task_type: '%s' không phải giá trị đúng" %task_type)
time.sleep(task_delay)
continue
done = True
sess.disconnect()
self.Utils.wrong(self.tag, "%s: Done" %self.phone)
break
except Exception as e:
traceback = "Run: %s - %s - %s" %(e.__traceback__.tb_frame.f_code.co_filename, e.__traceback__.tb_lineno, e)
self.Utils.wrong(self.tag, traceback)
continue
return done
Editor is loading...