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