Код бота:
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from datetime import datetime, timedelta
import time
# установка токена и id группы
token = 'vk1.a.JnY25aJ28uh35wTwx3SmvQyxlcTBEYu6xuYnUf6kPC5gNyjo-GkuEjfUoFl9KLGUBN-ZXbD2HjcOL0QMGn_LvBNB8Zr9FEwIcOPk9H3sAcaa3GnldaO-oi95vPvgFCQR_lCpOlKw9E73yIHpp502RzjuA'
group_id = '217447654'
try:
vk_session = vk_api.VkApi(token=token)
longpoll = VkLongPoll(vk_session, group_id)
except vk_api.AuthError as error_msg:
print(error_msg)
quit()
# инициализация переменных
users = {}
admin_id = '282381901'
# определение функций для отправки сообщений и сохранения информации о пользователе
def send_message(peer_id, text, keyboard=None):
vk_session.method('messages.send', {'peer_id': peer_id, 'message': text, 'random_id': 0, 'keyboard': keyboard})
def add_user(user_id, phone, date):
users[user_id] = {'phone': phone, 'date': date}
# создание клавиатуры
keyboard = VkKeyboard(one_time=True)
keyboard.add_button('Записаться', color=VkKeyboardColor.POSITIVE)
keyboard.add_button('Отменить запись', color=VkKeyboardColor.NEGATIVE)
# цикл обработки сообщений
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
# обработка сообщения от пользователя
if event.text == 'Начать':
send_message(event.peer_id, 'Добро пожаловать! Хотите записаться?', keyboard=keyboard.get_keyboard())
elif event.text == 'Записаться':
send_message(event.peer_id, 'Введите дату и время в формате ДД.ММ.ГГГГ ЧЧ:ММ')
users[event.peer_id] = {'state': 'date'}
elif event.text == 'Отменить запись':
if event.peer_id in users:
del users[event.peer_id]
send_message(event.peer_id, 'Ваша запись отменена')
else:
send_message(event.peer_id, 'У вас нет активной записи')
elif event.peer_id in users and users[event.peer_id]['state'] == 'date':
try:
date = datetime.strptime(event.text, '%d.%m.%Y %H:%M')
users[event.peer_id]['date'] = date
users[event.peer_id]['state'] = 'phone'
send_message(event.peer_id, 'Введите Ваш номер телефона: ')
except ValueError:
send_message(event.peer_id, 'Некорректный формат даты и времени, попробуйте еще раз')
elif event.peer_id in users and users[event.peer_id]['state'] == 'phone':
try:
phone = int(event.text)
add_user(event.peer_id, phone, users[event.peer_id]['date'])
send_message(event.peer_id, 'Вы успешно записались на {} на номер {}'.format(users[event.peer_id]['date'].strftime('%d.%m.%Y %H:%M'), phone))
del users[event.peer_id]
except ValueError:
send_message(event.peer_id, 'Некорректный формат номера телефона, попробуйте еще раз')
# обработка сообщения от администратора
elif event.peer_id == admin_id and event.text == 'Записи':
if len(users) > 0:
message = 'Список записей:\n\n'
for user_id, info in users.items():
message += 'Пользователь ID {}\nДата и время: {}\nНомер телефона: {}\n\n'.format(user_id, info['date'].strftime('%d.%m.%Y %H:%M'), info['phone'])
send_message(admin_id, message)
else:
send_message(admin_id, 'Список записей пуст')
# отправка уведомления за день до записи
for user_id, info in users.items():
if (info['date'] - datetime.now()).days == 1:
send_message(user_id, 'Напоминаем, что завтра в {} у вас запись. Номер телефона для связи: {}'.format(info['date'].strftime('%H:%M'), info['phone']))
Выдает ошибку:
C:\Program Files\Sublime Text 3\Projects>4567.py
Traceback (most recent call last):
File "C:\Program Files\Sublime Text 3\Projects\4567.py", line 35, in <module>
for event in longpoll.listen():
File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python311\Lib\site-packages\vk_api\longpoll.py", line 619, in listen
for event in self.check():
^^^^^^^^^^^^
File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python311\Lib\site-packages\vk_api\longpoll.py", line 558, in check
timeout=self.wait + 10
~~~~~~~~~~^~~~
TypeError: can only concatenate str (not "int") to st