!survey Картузы 03.12.2023 12:10 Нет
import asyncio
from datetime import datetime, timedelta
from vkbottle.bot import Bot, Message
from config import token
bot = Bot(token=token)
# Структура для хранения информации о битве
class Battle:
def __init__(self, title, date, time, afk_state):
self.title = title
self.date = date
self.time = time
self.afk_state = afk_state
self.participants = []
battle = None
# Функция для создания опроса
async def create_survey(peer_id):
if battle:
message_text = f"Внимание!!! В {battle.time} состоится битва против {battle.title} АФК: {battle.afk_state}\n"
for i in range(7):
if i < len(battle.participants):
message_text += f"{i+1}) {battle.participants[i]}\n"
else:
message_text += f"{i+1})\n"
message_text += "\nДля того, чтобы попасть в список введите: !joinbattle"
# Отправляем сообщение в чат
await bot.api.messages.send(peer_id=peer_id, message=message_text, random_id=0)
# Функция для создания и отправки опроса после задержки
async def create_and_send_survey_after_delay(peer_id, delay_seconds):
# Ждём указанное количество секунд
await asyncio.sleep(delay_seconds)
# Затем создаём и отправляем опрос
await create_survey(peer_id)
@bot.on.chat_message(text=['!survey <title> <date> <time> <state>', '!survey'])
async def chat_message_handler(message: Message, title=None, date=None, time=None, state=None):
global battle
if not (title and date and time and state):
await message.answer('[Ошибка] Вы не ввели обязательные аргументы!')
return
try:
# Парсинг даты и времени из сообщения
battle_datetime = datetime.strptime(f'{date} {time}', '%d.%m.%Y %H:%M')
# Проверка на прошедшее время
if battle_datetime < datetime.now():
await message.answer('[Ошибка] Время битвы уже прошло!')
return
# Рассчитываем время для создания опроса (за 2 часа до битвы)
delay = (battle_datetime - timedelta(hours=2)) - datetime.now()
delay_seconds = delay.total_seconds()
if delay_seconds < 0:
await message.answer('[Ошибка] Время создания опроса уже прошло!')
return
# Запускаем асинхронную функцию с задержкой и отправкой опроса
asyncio.create_task(create_and_send_survey_after_delay(message.peer_id, delay_seconds))
await message.answer(f'Регистрирую опрос.\n\nНазвание: {title}\nДата: {date}\nВремя: {time}\nАФК: {state}')
except ValueError:
await message.answer('[Ошибка] Неправильный формат даты или времени!')
@bot.on.chat_message(text='!joinbattle')
async def join_battle_handler(message: Message):
global battle
if not battle:
await message.answer('На данный момент нет активной битвы для регистрации.')
return
if message.from_id in battle.participants:
await message.answer('Вы уже зарегистрированы в битве.')
return
if len(battle.participants) >= 7:
await message.answer('Извините, но все слоты уже заняты.')
return
battle.participants.append(message.from_id)
await message.answer('Вы добавлены в список участников битвы.')
# Запускаем бота
bot.run_forever()