🤬
  • Full refactoring. - Bug Fixes - Refactoring the whole code - Introducing testing ### TODO complete the message group processing ### Tests ### TODO introducing bot analysis ### TODO introducing chat group overlaps

  • Loading...
  • Giacomo Giallombardo committed 1 year ago
    bb0a1082
    1 parent a177971f
  • ■ ■ ■ ■ ■ ■
    src/telepathy/telepathy.py
    skipped 13 lines
    14 14  import configparser
    15 15  import asyncio
    16 16   
    17  -from utils import (
     17 +from src.telepathy.utils import (
    18 18   print_banner,
    19 19   color_print_green,
    20 20   populate_user,
    skipped 27 lines
    48 48  from telethon.utils import get_display_name, get_message_id
    49 49  from alive_progress import alive_bar
    50 50  from colorama import Fore, Style
    51  -from const import telepathy_file
     51 +from src.telepathy.const import telepathy_file
    52 52   
    53 53  """
    54 54  try:
    skipped 47 lines
    102 102   comprehensive,
    103 103   media,
    104 104   json,
    105  - translate,
    106  - alphanumeric,
     105 + translate
    107 106   ):
    108 107   self.client = client
    109 108   self._target = target
    skipped 69 lines
    179 178   current_entity = None
    180 179   try:
    181 180   current_entity = await self.client.get_entity(_target)
    182  - except:
     181 + except Exception as exx:
    183 182   pass
    184 183   if not current_entity:
    185 184   try:
    186 185   current_entity = await self.client.get_entity(PeerChannel(_target))
    187  - except:
     186 + except Exception as exx:
    188 187   pass
    189 188   if not current_entity:
    190 189   try:
    191 190   current_entity = await self.client.get_entity(PeerChat(_target))
    192  - except:
     191 + except Exception as exx:
    193 192   pass
    194 193   return current_entity
    195 194   
    skipped 99 lines
    295 294   else:
    296 295   _result["chat_type"] = "Chat"
    297 296   
    298  - if _result["entity.username"]:
    299  - _result["group_url"] = "http://t.me/" + self._entity.username
     297 + if _result["entity"].username:
     298 + _result["group_url"] = "http://t.me/" + _result["entity"].username
    300 299   _result["group_username"] = _result["entity"].username
    301 300   web_req = parse_html_page(_result["group_url"])
    302 301   elif "https://t.me/" in _handle:
    skipped 28 lines
    331 330   _result["datepost"] = parse_tg_date(message.date)
    332 331   _result["date"] = _result["date"]
    333 332   _result["mtime"] = _result["mtime"]
    334  - _result["first_post"] = _result["timestamp"]
     333 + _result["first_post"] = _result["datepost"]["timestamp"]
    335 334   break
    336 335   
    337 336   if _result["entity"].restriction_reason is not None:
    skipped 54 lines
    392 391   web_req = parse_html_page(self._group_url)
    393 392   self._group_username = "Private group"
    394 393   else:
     394 + web_req = None
    395 395   self._group_url, self._group_username = "Private group", "Private group"
    396 396   
    397 397   if web_req:
    skipped 16 lines
    414 414   
    415 415   async for message in self.client.iter_messages(_handle, reverse=True):
    416 416   self._datepost = parse_tg_date(message.date)
    417  - self._date = self.datepost["date"]
    418  - self._mtime = self.datepost["mtime"]
    419  - self._first_post = self.datepost["timestamp"]
     417 + self._date = self._datepost["date"]
     418 + self._mtime = self._datepost["mtime"]
     419 + self._first_post = self._datepost["timestamp"]
    420 420   break
    421 421   
    422 422   if self._entity.restriction_reason is not None:
    skipped 108 lines
    531 531   if not _target:
    532 532   _target = self._target
    533 533   _target = clean_private_invite(_target)
     534 + self._found_participants = 0
    534 535   await self.retrieve_chat_group_entity(_target)
    535 536   
    536 537   if self.basic and not self.comp_check:
    skipped 129 lines
    666 667   except AttributeError:
    667 668   pass
    668 669   
    669  - async def retrieve_history(self):
     670 + async def retrieve_self_history(self,_target):
     671 + if not _target:
     672 + _target = self._target
     673 + _target = clean_private_invite(_target)
     674 + await self.retrieve_chat_group_entity(_target)
     675 + 
    670 676   get_history = GetHistoryRequest(
    671 677   peer=self._entity,
    672 678   offset_id=0,
    skipped 2 lines
    675 681   limit=1,
    676 682   max_id=0,
    677 683   min_id=0,
     684 + hash=0
    678 685   )
    679  - history = self.client(get_history)
     686 + history = await self.client(get_history)
    680 687   if isinstance(history, Messages):
    681 688   count = len(history.messages)
    682 689   else:
    skipped 88 lines
    771 778   
    772 779   except Exception as e:
    773 780   if e is ChannelPrivateError:
     781 + private_count += 1
    774 782   print("Private channel")
    775 783   continue
    776 784   
    skipped 745 lines
    1522 1530   
    1523 1531   alt = None
    1524 1532   target_type = None
     1533 + export = False
     1534 + 
    1525 1535   
    1526 1536   def __init__(
    1527 1537   self,
    skipped 25 lines
    1553 1563   self.translate_check = True if translate else False
    1554 1564   self.last_date, self.chunk_size, self.user_language = None, 1000, "en"
    1555 1565   self.bot = bot is not None
    1556  - self.alt = alt
    1557  - 
     1566 + self.alt = 0 if alt is None else int(alt)
    1558 1567   self.filetime = datetime.datetime.now().strftime("%Y_%m_%d-%H_%M")
    1559 1568   self.filetime_clean = str(self.filetime)
    1560 1569   
    skipped 15 lines
    1576 1585   self.t = " "
    1577 1586   
    1578 1587   self.triangulate = True if triangulate_membership else False
    1579  - self.telepathy_file = self.config_p["telepathy"]["telepathy_files"]
    1580  - self.json_file = os.path.join(
    1581  - self.telepathy_file, self.config_p["telepathy"]["json_file"]
    1582  - )
    1583  - self.login = os.path.join(
    1584  - self.telepathy_file, self.config_p["telepathy"]["login"]
    1585  - )
    1586  - self.log_file = os.path.join(
    1587  - self.telepathy_file, self.config_p["telepathy"]["log_file"]
    1588  - )
    1589  - self.export_file = os.path.join(
    1590  - self.telepathy_file, self.config_p["telepathy"]["export_file"]
    1591  - )
     1588 + 
     1589 + if "telepathy" in self.config_p.keys():
     1590 + self.telepathy_file = self.config_p["telepathy"]["telepathy_files"]
     1591 + self.json_file = os.path.join(
     1592 + self.telepathy_file, self.config_p["telepathy"]["json_file"]
     1593 + )
     1594 + self.login = os.path.join(
     1595 + self.telepathy_file, self.config_p["telepathy"]["login"]
     1596 + )
     1597 + self.log_file = os.path.join(
     1598 + self.telepathy_file, self.config_p["telepathy"]["log_file"]
     1599 + )
     1600 + self.export_file = os.path.join(
     1601 + self.telepathy_file, self.config_p["telepathy"]["export_file"]
     1602 + )
     1603 + else:
     1604 + self.telepathy_file = os.path.join("..","src","telepathy","telepathy_files")
     1605 + self.json_file = os.path.join(self.telepathy_file,"json_files")
     1606 + self.login = os.path.join(self.telepathy_file,"login.txt")
     1607 + self.log_file = os.path.join(self.telepathy_file,"log.csv")
     1608 + self.export_file = os.path.join(self.telepathy_file,"export.csv")
     1609 + 
    1592 1610   self.create_path(self.telepathy_file)
    1593 1611   self.target = target
    1594 1612   self.create_tg_client()
     1613 + 
    1595 1614   
    1596 1615   @staticmethod
    1597 1616   def create_path(path_d):
    skipped 38 lines
    1636 1655   else:
    1637 1656   self.api_id, self.api_hash, self.phone_number = self.retrieve_alt()
    1638 1657   """End of API details"""
    1639  - self.client = TelegramClient(self.phone_number, self.api_id, self.api_hash)
     1658 + self.client = TelegramClient(os.path.join(self.telepathy_file,"{}.session".format(self.phone_number)), self.api_id, self.api_hash)
    1640 1659   
    1641 1660   async def connect_tg_client_and_run(self):
    1642 1661   await self.client.connect()
    skipped 317 lines
    1960 1979   translate,
    1961 1980   triangulate_membership,
    1962 1981   )
    1963  - loop = asyncio.get_event_loop()
     1982 + loop = asyncio.new_event_loop()
     1983 + asyncio.set_event_loop(loop)
    1964 1984   loop.run_until_complete(telepathy_cli.connect_tg_client_and_run())
    1965 1985   
    1966 1986   
    skipped 3 lines
  • ■ ■ ■ ■ ■ ■
    src/telepathy/utils.py
    1 1  from colorama import Fore, Style
    2 2  from googletrans import Translator
    3  -from const import __version__, user_agent
     3 +from src.telepathy.const import __version__, user_agent
    4 4  import requests
    5 5  import textwrap
    6 6  from bs4 import BeautifulSoup
    skipped 314 lines
    321 321  def clean_private_invite(url):
    322 322   if "https://t.me/+" in url:
    323 323   return url.replace("https://t.me/+", "https://t.me/joinchat/")
    324  - 
     324 + return url
    325 325   
    326 326  def evaluate_reactions(message):
    327 327   total_reactions = 0
    skipped 44 lines
  • ■ ■ ■ ■ ■ ■
    tests/test_telepathy.py
    1 1  import pytest
     2 +from src.telepathy.telepathy import Group_Chat_Analisys, Telepathy_cli
     3 +import asyncio
     4 + 
     5 + 
     6 +@pytest.fixture
     7 +def detail_to_group_basic():
     8 + return {
     9 + "target": "@test15",
     10 + "comprehensive": False,
     11 + "media": False,
     12 + "forwards": False,
     13 + "user": False,
     14 + "export": False,
     15 + "bot": None,
     16 + "location": None,
     17 + "alt": None,
     18 + "json": False,
     19 + "replies": False,
     20 + "translate": False,
     21 + "triangulate_membership": False,
     22 + }
     23 + 
     24 +def test_channel_group_basic(detail_to_group_basic):
     25 + tele_cli = Telepathy_cli(
     26 + detail_to_group_basic["target"],
     27 + detail_to_group_basic["comprehensive"],
     28 + detail_to_group_basic["media"],
     29 + detail_to_group_basic["forwards"],
     30 + detail_to_group_basic["user"],
     31 + detail_to_group_basic["bot"],
     32 + detail_to_group_basic["location"],
     33 + detail_to_group_basic["alt"],
     34 + detail_to_group_basic["json"],
     35 + detail_to_group_basic["export"],
     36 + detail_to_group_basic["replies"],
     37 + detail_to_group_basic["translate"],
     38 + detail_to_group_basic["triangulate_membership"],
     39 + )
     40 + group_chan = Group_Chat_Analisys(
     41 + target=detail_to_group_basic["target"],
     42 + client=tele_cli.client,
     43 + log_file=tele_cli.log_file,
     44 + filetime=tele_cli.filetime,
     45 + replies=tele_cli.reply_analysis,
     46 + forwards=tele_cli.forwards_check,
     47 + comprehensive=tele_cli.comp_check,
     48 + media=tele_cli.media_archive,
     49 + json=tele_cli.json_check,
     50 + translate=tele_cli.translate_check,
     51 + )
     52 + 
     53 + loop = asyncio.new_event_loop()
     54 + asyncio.set_event_loop(loop)
     55 + loop.run_until_complete(tele_cli.client.connect())
     56 + loop.run_until_complete(group_chan.retrieve_self_history(None))
     57 + assert group_chan.history_count > 0
     58 + 
Please wait...
Page is in error, reload to recover