Rooni commited on
Commit
11ff301
·
verified ·
1 Parent(s): fc79b23

Create main.py

Browse files
Files changed (1) hide show
  1. main.py +181 -0
main.py ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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:
46
+ user_id = message.from_user.id
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):
63
+ user_id = update.effective_user.id
64
+ if user_id == YOUR_USER_ID:
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):
73
+ global message_queue
74
+ if update.effective_user.id == YOUR_USER_ID:
75
+ message_queue.clear()
76
+ print("Очередь сообщений очищена.")
77
+ await update.message.reply_text("Очередь сообщений очищена.")
78
+
79
+
80
+ async def toggle_test_mode(update, context):
81
+ global test_mode
82
+ if update.effective_user.id == YOUR_USER_ID:
83
+ test_mode = not test_mode
84
+ status = "включен" if test_mode else "выключен"
85
+ print(f"Тестовый режим {status}.")
86
+ await update.message.reply_text(f"Тестовый режим {status}.")
87
+
88
+
89
+ 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
+ )
154
+
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
+