Задать вопрос
@RDewize

Почему опрос не создаётся?

Пишу скрипт на Python. А если быть точнее для ВК при помощи vkbottle.
Почему я регистрирую опрос например на 12:10, жду пока наступит 10:10, а опрос не создаётся.
spoiler

!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()
  • Вопрос задан
  • 84 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы