Rooni commited on
Commit
0cf65c0
·
verified ·
1 Parent(s): 9a16d2b

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +78 -61
main.py CHANGED
@@ -1,24 +1,45 @@
 
 
 
 
1
  import telegram
2
  from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters
3
  import schedule
4
  import time
5
- import os
6
- from collections import deque
7
  from asyncio import run
8
 
9
  BOT_TOKEN = os.environ['YOUR_BOT_TOKEN']
10
  YOUR_USER_ID = 855890735 # Замените на ваш ID
11
  CHANNEL_ID = os.environ['YOUR_CHANNEL_ID'] # Замените на ID канала
12
 
13
- # Создаем бота Telegram
14
  bot = telegram.Bot(token=BOT_TOKEN)
15
-
16
  application = ApplicationBuilder().token(BOT_TOKEN).build()
17
-
18
  message_queue = deque()
19
  test_mode = False
20
 
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  async def handle_message(update, context):
23
  message = update.message
24
  if message and message.from_user:
@@ -26,24 +47,16 @@ async def handle_message(update, context):
26
  if user_id == YOUR_USER_ID and message.chat.type == 'private':
27
  if not message.text.startswith("/"):
28
  if test_mode:
29
- await forward_message(message.message_id)
30
- print(
31
- f"Сообщение с ID {message.message_id} отправлено напрямую (тестовый режим)."
32
- )
33
  else:
34
- message_queue.append(message.message_id)
35
- print(
36
- f"Добавлено сообщение с ID {message.message_id} в очередь."
37
- )
38
  else:
39
  print(f"Получена команда от владельца: {message.text}")
40
  else:
41
- print(
42
- f"Получено сообщение от постороннего пользователя (ID: {user_id}): {message.text}"
43
- )
44
- await update.message.reply_text(
45
- "Извини, но я могу общаться только с моим владельцем."
46
- )
47
 
48
 
49
  async def start(update, context):
@@ -52,12 +65,8 @@ async def start(update, context):
52
  print("Владелец начал диалог.")
53
  await update.message.reply_text("Привет!")
54
  else:
55
- print(
56
- f"Посторонний пользователь (ID: {user_id}) попытался начать диалог."
57
- )
58
- await update.message.reply_text(
59
- "Извини, но я могу общаться только с моим владельцем."
60
- )
61
 
62
 
63
  async def clear_queue(update, context):
@@ -81,50 +90,64 @@ async def send_now(update, context):
81
  global message_queue
82
  if update.effective_user.id == YOUR_USER_ID:
83
  if message_queue:
84
- message_id = message_queue.popleft()
85
- await forward_message(message_id)
86
- message_queue.append(message_id) # Переносим в конец очереди
87
  print("Отправлено первое сообщение из очереди.")
88
  await update.message.reply_text("Отправлено первое сообщение из очереди.")
89
  else:
90
  print("Очередь пуста.")
91
  await update.message.reply_text("Очередь пуста.")
92
 
 
93
  async def delete_last_message(update, context):
94
  global message_queue
95
  if update.effective_user.id == YOUR_USER_ID:
96
  if message_queue:
97
- deleted_message_id = message_queue.pop()
98
- print(f"Удалено сообщение с ID {deleted_message_id} из очереди.")
99
  await update.message.reply_text("Последнее сообщение удалено из очереди.")
100
  else:
101
  print("Очередь пуста, нечего удалять.")
102
  await update.message.reply_text("Очередь пуста, нечего удалять.")
103
 
104
 
105
- async def forward_message(message_id):
106
  try:
107
- await bot.copy_message(
108
- chat_id=CHANNEL_ID, from_chat_id=YOUR_USER_ID, message_id=message_id
109
- )
110
- print(f"Сообщение с ID {message_id} успешно отправлено в канал.")
111
  except telegram.error.BadRequest as e:
112
- print(f"Ошибка при копировании сообщения: {e}")
113
 
114
 
115
- def send_messages():
 
116
  global message_queue
117
  if message_queue:
118
- message_id = message_queue.popleft()
119
- # Запускаем асинхронную функцию в отдельном потоке
120
- run(forward_message(message_id))
121
 
122
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  start_handler = CommandHandler("start", start)
124
  clear_handler = CommandHandler("clear", clear_queue)
125
  test_handler = CommandHandler("test", toggle_test_mode)
126
- send_now_handler = CommandHandler("send", send_now)
127
- delete_last_handler = CommandHandler("del", delete_last_message)
128
  message_handler = MessageHandler(
129
  filters=filters.TEXT & ~filters.COMMAND, callback=handle_message
130
  )
@@ -132,33 +155,27 @@ message_handler = MessageHandler(
132
  application.add_handler(start_handler)
133
  application.add_handler(clear_handler)
134
  application.add_handler(test_handler)
135
- application.add_handler(send_now_handler)
136
- application.add_handler(delete_last_handler)
137
  application.add_handler(message_handler)
138
 
139
- # Добавляем обработчик ошибок
 
140
  async def error_handler(update, context):
141
  """Обработчик ошибок."""
142
  print(f'Произошла ошибка: {context.error}')
 
 
143
  application.add_error_handler(error_handler)
144
 
145
- # Запускаем планировщик в отдельном потоке
146
- schedule.every().day.at("00:00").do(send_messages)
147
- schedule.every().day.at("04:00").do(send_messages)
148
- schedule.every().day.at("08:00").do(send_messages)
149
- schedule.every().day.at("12:00").do(send_messages)
150
- schedule.every().day.at("16:00").do(send_messages)
151
- schedule.every().day.at("20:00").do(send_messages)
152
 
153
- from threading import Thread
 
 
 
154
 
155
- def run_scheduler():
156
- while True:
157
- schedule.run_pending()
158
- time.sleep(1)
159
 
160
- scheduler_thread = Thread(target=run_scheduler)
161
- scheduler_thread.start()
162
 
163
- # Запускаем бота в главном потоке
164
- application.run_polling()
 
1
+ import os
2
+ from collections import deque
3
+
4
+ from flask import Flask, request
5
  import telegram
6
  from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters
7
  import schedule
8
  import time
9
+ from threading import Thread
 
10
  from asyncio import run
11
 
12
  BOT_TOKEN = os.environ['YOUR_BOT_TOKEN']
13
  YOUR_USER_ID = 855890735 # Замените на ваш ID
14
  CHANNEL_ID = os.environ['YOUR_CHANNEL_ID'] # Замените на ID канала
15
 
 
16
  bot = telegram.Bot(token=BOT_TOKEN)
 
17
  application = ApplicationBuilder().token(BOT_TOKEN).build()
 
18
  message_queue = deque()
19
  test_mode = False
20
 
21
 
22
+ # --- Flask app ---
23
+ app = Flask(__name__)
24
+
25
+
26
+ @app.route('/', methods=['GET'])
27
+ def home():
28
+ return "Это API сервер для Telegram бота."
29
+
30
+
31
+ @app.route('/send_message', methods=['POST'])
32
+ def send_message():
33
+ data = request.get_json()
34
+ message = data.get('message')
35
+ if message:
36
+ message_queue.append(message)
37
+ return {'status': 'ok'}
38
+ else:
39
+ return {'status': 'error', 'message': 'Missing message data'}
40
+
41
+
42
+ # --- Telegram bot handlers ---
43
  async def handle_message(update, context):
44
  message = update.message
45
  if message and message.from_user:
 
47
  if user_id == YOUR_USER_ID and message.chat.type == 'private':
48
  if not message.text.startswith("/"):
49
  if test_mode:
50
+ await forward_message(message.text)
51
+ print(f"Сообщение '{message.text}' отправлено напрямую (тестовый режим).")
 
 
52
  else:
53
+ message_queue.append(message.text)
54
+ print(f"Добавлено сообщение '{message.text}' в очередь.")
 
 
55
  else:
56
  print(f"Получена команда от владельца: {message.text}")
57
  else:
58
+ print(f"Получено сообщение от постороннего пользователя (ID: {user_id}): {message.text}")
59
+ await update.message.reply_text("Извини, но я могу общаться только с моим владельцем.")
 
 
 
 
60
 
61
 
62
  async def start(update, context):
 
65
  print("Владелец начал диалог.")
66
  await update.message.reply_text("Привет!")
67
  else:
68
+ print(f"Посторонний пользователь (ID: {user_id}) попытался начать диалог.")
69
+ await update.message.reply_text("Извини, но я могу общаться только с моим владельцем.")
 
 
 
 
70
 
71
 
72
  async def clear_queue(update, context):
 
90
  global message_queue
91
  if update.effective_user.id == YOUR_USER_ID:
92
  if message_queue:
93
+ message = message_queue.popleft()
94
+ await forward_message(message)
95
+ message_queue.append(message) # Переносим в конец очереди
96
  print("Отправлено первое сообщение из очереди.")
97
  await update.message.reply_text("Отправлено первое сообщение из очереди.")
98
  else:
99
  print("Очередь пуста.")
100
  await update.message.reply_text("Очередь пуста.")
101
 
102
+
103
  async def delete_last_message(update, context):
104
  global message_queue
105
  if update.effective_user.id == YOUR_USER_ID:
106
  if message_queue:
107
+ deleted_message = message_queue.pop()
108
+ print(f"Удалено сообщение '{deleted_message}' из очереди.")
109
  await update.message.reply_text("Последнее сообщение удалено из очереди.")
110
  else:
111
  print("Очередь пуста, нечего удалять.")
112
  await update.message.reply_text("Очередь пуста, нечего удалять.")
113
 
114
 
115
+ async def forward_message(message):
116
  try:
117
+ await bot.send_message(chat_id=CHANNEL_ID, text=message)
118
+ print(f"Сообщение '{message}' успешно отправлено в канал.")
 
 
119
  except telegram.error.BadRequest as e:
120
+ print(f"Ошибка при отправке сообщения: {e}")
121
 
122
 
123
+ # --- Планировщик ---
124
+ def send_messages_from_queue():
125
  global message_queue
126
  if message_queue:
127
+ message = message_queue.popleft()
128
+ run(forward_message(message))
 
129
 
130
 
131
+ schedule.every().day.at("00:00").do(send_messages_from_queue)
132
+ schedule.every().day.at("04:00").do(send_messages_from_queue)
133
+ schedule.every().day.at("08:00").do(send_messages_from_queue)
134
+ schedule.every().day.at("12:00").do(send_messages_from_queue)
135
+ schedule.every().day.at("16:00").do(send_messages_from_queue)
136
+ schedule.every().day.at("20:00").do(send_messages_from_queue)
137
+
138
+
139
+ def run_scheduler():
140
+ while True:
141
+ schedule.run_pending()
142
+ time.sleep(1)
143
+
144
+
145
+ # --- Регистрация обработчиков Telegram ---
146
  start_handler = CommandHandler("start", start)
147
  clear_handler = CommandHandler("clear", clear_queue)
148
  test_handler = CommandHandler("test", toggle_test_mode)
149
+ send_now_handler = CommandHandler("send", send_now)
150
+ delete_last_handler = CommandHandler("del", delete_last_message)
151
  message_handler = MessageHandler(
152
  filters=filters.TEXT & ~filters.COMMAND, callback=handle_message
153
  )
 
155
  application.add_handler(start_handler)
156
  application.add_handler(clear_handler)
157
  application.add_handler(test_handler)
158
+ application.add_handler(send_now_handler)
159
+ application.add_handler(delete_last_handler)
160
  application.add_handler(message_handler)
161
 
162
+
163
+ # --- Обработчик ошибок Telegram ---
164
  async def error_handler(update, context):
165
  """Обработчик ошибок."""
166
  print(f'Произошла ошибка: {context.error}')
167
+
168
+
169
  application.add_error_handler(error_handler)
170
 
 
 
 
 
 
 
 
171
 
172
+ # --- Запуск приложения ---
173
+ if __name__ == "__main__":
174
+ scheduler_thread = Thread(target=run_scheduler)
175
+ scheduler_thread.start()
176
 
177
+ flask_thread = Thread(target=app.run, kwargs={'host': '0.0.0.0', 'port': 5000})
178
+ flask_thread.start()
 
 
179
 
180
+ application.run_polling()
 
181