|
5 | 5 | from datetime import datetime, timezone |
6 | 6 | from itertools import chain |
7 | 7 | import subprocess |
| 8 | +from typing import Optional, Dict, Tuple, Any |
8 | 9 |
|
9 | 10 | from telethon import TelegramClient |
10 | 11 | from telethon.errors import SessionPasswordNeededError |
|
20 | 21 | logger = logging.getLogger('telegramircd') |
21 | 22 | im_name = 'Telegram' |
22 | 23 | capabilities = set(['away-notify', 'draft/message-tags', 'echo-message', 'multi-prefix', 'sasl', 'server-time']) # http://ircv3.net/irc/ |
23 | | -options = None |
24 | | -server = None |
| 24 | +options: Optional[Namespace] = None |
| 25 | +server: Optional["Server"] = None |
25 | 26 | web = None |
26 | 27 |
|
27 | 28 |
|
@@ -58,19 +59,20 @@ def __init__(self, *msg): |
58 | 59 | ### HTTP server |
59 | 60 |
|
60 | 61 | class Web(object): |
61 | | - def __init__(self, tls): |
| 62 | + def __init__(self, tls) -> None: |
62 | 63 | global web |
63 | 64 | web = self |
64 | 65 | self.tls = tls |
65 | | - self.id2media = {} |
66 | | - self.id2message = {} |
67 | | - self.webpage_id2sender_to = {} |
68 | | - self.recent_messages = deque() |
69 | | - self.proc = None |
| 66 | + self.id2media: Dict[str, Tuple[Any, Any]] = {} |
| 67 | + self.id2message: Dict[str, str] = {} |
| 68 | + self.webpage_id2sender_to: Dict[str, Tuple[Any, Any]] = {} |
| 69 | + self.recent_messages: deque[str] = deque() |
| 70 | + self.proc: Optional[TelegramClient] = None |
70 | 71 | self.authorized = False |
71 | 72 | self.two_step = False |
72 | 73 |
|
73 | | - async def handle_media(self, typ, request): |
| 74 | + async def handle_media(self, typ, request) -> aiohttp.web.Response: |
| 75 | + assert options is not None and self.proc is not None |
74 | 76 | id = re.sub(r'\..*', '', request.match_info.get('id')) |
75 | 77 | if id not in self.id2media: |
76 | 78 | return aiohttp.web.Response(status=404, text='Not Found') |
@@ -100,10 +102,11 @@ async def handle_media(self, typ, request): |
100 | 102 | except Exception as ex: |
101 | 103 | return aiohttp.web.Response(status=500, text=str(ex)) |
102 | 104 |
|
103 | | - async def handle_document(self, request): |
| 105 | + async def handle_document(self, request) -> aiohttp.web.Response: |
104 | 106 | return await self.handle_media('document', request) |
105 | 107 |
|
106 | | - async def run_telethon(self): |
| 108 | + async def run_telethon(self) -> None: |
| 109 | + assert options is not None and server is not None |
107 | 110 | if self.proc: |
108 | 111 | await self.proc.disconnect() |
109 | 112 | self.proc = TelegramClient(options.tg_session, options.tg_api_id, options.tg_api_hash) |
@@ -1153,11 +1156,12 @@ async def update(self, tg_room): |
1153 | 1156 | for client in server.auth_clients(): |
1154 | 1157 | client.reply('332 {} {} :{}', client.nick, self.name, self.topic) |
1155 | 1158 |
|
1156 | | - async def update_admins(self, admins): |
| 1159 | + async def update_admins(self, admins) -> None: |
| 1160 | + assert server is not None |
1157 | 1161 | seen_me = False |
1158 | 1162 | seen = set() |
1159 | 1163 | for admin in admins: |
1160 | | - user = await server.ensure_special_user(admin) |
| 1164 | + user = await server.ensure_special_user(admin, None) |
1161 | 1165 | if user == server: |
1162 | 1166 | seen_me = True |
1163 | 1167 | elif user in self.members: |
|
0 commit comments