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

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +61 -78
main.py CHANGED
@@ -1,45 +1,24 @@
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,16 +26,24 @@ async def handle_message(update, context):
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,8 +52,12 @@ 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,64 +81,50 @@ async def send_now(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,27 +132,33 @@ message_handler = MessageHandler(
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
 
 
 
 
 
 
 
 
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
  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
  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
  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
  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()