@kali_debian

Как создать ожидание сообщения (Python)?

Имеется код чат бота вк который отправляет дз из бд, и расписание (.jpg). Мне нужна задержка чтоб получить сообщение и его содержимое записать в бд.
import vk_api
import config
from vk_api.bot_longpoll import VkBotEventType, VkBotLongPoll
import json
import sqlite3
import os
import requests
THIS_FOLDER = os.path.dirname(os.path.abspath(__file__))
my_file = os.path.join(THIS_FOLDER, 'mydb.db')
raspisanie = os.path.join(THIS_FOLDER, 'raspisanie.jpg')

conn = sqlite3.connect(my_file)
conn.text_factory = sqlite3.OptimizedUnicode
cursor = conn.cursor()

cursor.execute("SELECT homework FROM Homework")

homework = cursor.fetchall()
vk = vk_api.VkApi(token="***")
 
vk._auth_token()
 
vk.get_api()
 
longpoll = VkBotLongPoll(vk, "***")
 
keyboard = {
    "one_time": False,
    "buttons": [
        [{
                "action": {
                    "type": "text",
                    "payload": "{\"button\": \"1\"}",
                    "label": "Чё сегодня задали?"
                },
                "color": "positive"
            },
            {
                "action": {
                    "type": "text",
                    "payload": "{\"button\": \"2\"}",
                    "label": "Задать дз"
                },
                "color": "negative"
            }],[{
                "action": {
                    "type": "text",
                    "payload": "{\"button\": \"3\"}",
                    "label": "Расписание"
                },
                "color": "secondary"
            }],[
            {
                "action": {
                    "type": "text",
                    "payload": "{\"button\": \"3\"}",
                    "label": "Помощь"
                },
                "color": "primary"
            },
            {
                "action": {
                    "type": "open_app",
                    "app_id": ***,
                    "owner_id": -***,
                    "hash": "",
                    "label": "***"
                }
            }
        ]
    ]
}
otmena = {
    "one_time": False,
    "buttons": [
        [{
                "action": {
                    "type": "text",
                    "payload": "{\"button\": \"2\"}",
                    "label": "Назад"
                },
                "color": "negative"
            }]
    ]
}
creators = {
    "one_time": False,
    "buttons": [
        [{
                "action": {
                    "type": "open_link",
                    "link": "https://vk.com/***",
                    "payload": "{\"button\": \"2\"}",
                    "label": "Создатель"
                }
            },{
                "action": {
                    "type": "open_link",
                    "link": "https://vk.com/***",
                    "payload": "{\"button\": \"2\"}",
                    "label": "Бета-тестер"
                }
            }],[
            {
                "action": {
                    "type": "text",
                    "payload": "{\"button\": \"2\"}",
                    "label": "Назад"
                },
                "color": "negative"
            }]
    ]
}

otmena = json.dumps(otmena, ensure_ascii=False).encode('utf-8')
keyboard = json.dumps(keyboard, ensure_ascii=False).encode('utf-8')
creators = json.dumps(creators, ensure_ascii=False).encode('utf-8')
keyboard = str(keyboard.decode('utf-8'))
otmena = str(otmena.decode('utf-8'))
creators = str(creators.decode('utf-8'))

while True:
    for event in longpoll.listen():
        if event.type == VkBotEventType.MESSAGE_NEW:
            a = vk.method('photos.getMessagesUploadServer')
            b = requests.post(a['upload_url'], files={'photo': open(raspisanie, 'rb')}).json()
            c = vk.method('photos.saveMessagesPhoto', {'photo': b['photo'], 'server': b['server'], 'hash': b['hash']})[0]
            d = 'photo{}_{}'.format(c['owner_id'], c['id'])

            if event.object.text.lower() == "начать":      
                vk.method("messages.send", {"peer_id": event.object.from_id, "message": "Ну сообственно, кнопки внизу :)",
                "keyboard": keyboard, "random_id": 0})
            if event.object.text.lower() == "задать дз":
                vk.method("messages.send", {"peer_id": event.object.from_id, "message": "Напишите дз одним сообщением.","keyboard": otmena, "random_id": 0})
            #ЗАДЕРЖКА НУЖНА ТУТ (ОЖИДАНИЕ СООБЩЕНИЯ)
            if event.object.text.lower() == "чё сегодня задали?":
                cursor.execute("SELECT homework FROM Homework")
                result = cursor.fetchall()
                vk.method("messages.send", {"peer_id": event.object.from_id, "message": result,"keyboard": keyboard, "random_id": 0})
            if event.object.text.lower() == "помощь":
                vk.method("messages.send", {"peer_id": event.object.from_id, "message": """         
                1. Длина сообщения содержащего дз не должна превышать 500 символов. 
                2. ВСЁ ЛОГИРУЕТСЯ ПО ЭТОМУ ДАЖЕ НЕ ПЫТАЙСЯ КРАШНУТЬ БОТА/УДАЛИТЬ ДЗ ИНАЧЕ ПОПАДЕШЬ В БАН!
                3. Если нужно добавить дз то писать необходимо заново так как при записи предыдущая удаляется.
                4. Другая проблема? Пиши [***|ему].""",
                "keyboard": creators, "random_id": 0})
            if event.object.text.lower() == "назад":
                vk.method("messages.send", {"peer_id": event.object.from_id, "message": "Действие отменено.","keyboard": keyboard, "random_id": 0})
            if event.object.text.lower() == "расписание":
                vk.method('messages.send', {"peer_id": event.object.from_id, "keyboard": keyboard, 'attachment': d, "random_id": 0})
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
@alekssamos
Программист любитель
# в начале
lc = {}

# где ты пишешь про задержку
			if event.object.text.lower() == "задать дз":
				vk.method("messages.send", {"peer_id": event.object.from_id, "message": "Напишите дз одним сообщением.","keyboard": otmena, "random_id": 0})
				lc[peer_id] = "waitdz"
			
			# ещё  условие
			if lc.get(peer_id) == "waitdz":
				if len(event.object.text) < 500:
					## здесь записывай в базу event.object.text
					try: del lc[peer_id]
					except KeyError: pass
					### удаляем ключ из словаря
				else:
					vk.method("messages.send", {"peer_id": event.object.from_id, "message": "Длина сообщения содержащего дз не должна превышать 500 символов. ","keyboard": otmena, "random_id": 0})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
04 апр. 2020, в 23:07
30000 руб./за проект
04 апр. 2020, в 23:05
100000 руб./за проект
04 апр. 2020, в 22:57
2000 руб./за проект