VK API как получить второе сообщение
Я написал вот такой код. Создал основной цикл для поиска новых сообщений, если пользователь в беседе напишет /start, то запустится второй цикл, который принимает сообщение, проверяет на существование id беседы в БД, после чего второй цикл останавливается.
for event in longpoll.listen():
if event.type == VkBotEventType.MESSAGE_NEW:
if event.from_chat:
id = event.chat_id
msg = event.object.message['text'].lower()
try:
dey = event.message.action['type']
invite_id = event.message.action['member_id']
except:
dey = ''
invite_id = -100
if dey == 'chat_invite_user':
sender(id, f'Приветствую тебя, @id{invite_id}!')
if msg == 'привет':
sender(id, 'Приветствую!')
elif msg == 'расписание':
file = open('site.txt', 'w', encoding="utf-8")
file.write((requests.get('https://academicol.ru/students/schedule')).text)
file.close()
file = open('site.txt', 'r', encoding="utf-8")
sender(id, f'🕛Завтра в {file.read()}')
elif msg == '/debug':
sender(id, f'Отладочная информация: {db.get_chats(id)}')
elif msg == '/start':
sender(id, 'Введите вашу группу в формате ЧXXX-Ч: ')
if event.type == VkBotEventType.MESSAGE_NEW:
if(not db.chat_exists(id)):
# если беседы нет в базе, добавляем его
msgGroup = event.object.message['text'].lower()
db.add_chat(id, msgGroup)
sender(id, 'Ваша группа будет занесена в базу данных')
break
else:
sender(id, 'Ваша группа уже добавлена в базу данных')
break
Но в итоге я получил это:
Я
/start
Бот
Введите вашу группу в формате ЧXXX-Ч:
Я
2ПСО-9 #бот это сообщение не читает
Я
/start
Бот
Введите вашу группу в формате ЧXXX-Ч:
Ваша группа будет занесена в базу данных
В итоге заносит в БД не "2ИСП-9", а команду "/start"
Как сделать "первончальную настроку" для бота?
Ответы (1 шт):
Автор решения: Komedik
→ Ссылка
Перед тем, как начать, создайте в папке с главным файлом - "example.py" (Образец кода). Можно дать любое название, а лучше указывать для чего образец, например: "addChat_example.py"
### Главный файл ###
import shutil
import time
import os
def programmCall(file): # Функция для вызова программ, не открывая дополнительную cmd
import subprocess
subprocess.Popen('python', file, 'argzzz1', 'argzzz2')
if msg == '/start':
# Советую здесь написать код, чтобы главный файл не реагировал на сообщения,
# Пока пользователь использует индивидуальную функцию, например, занести его в игнор лист
file = f'addChat_{id}.py' # Файл индивидуальной работы
shutil.copyfile('addChat_example.py', file) # Копируем образец и переносим в файл индивид. работы
with open('now id', 'w') as f: # Создаём файл, в котором передадим id
f.write(str(id))
programmCall(file) # Запускаем файл индивид. работы
time.sleep(0.5) # Ожидание, чтобы успело получить id
os.remove('now id') # Удаляем файл передачи id, так как он больше не нужен, а если его не удалить, то возможно, будет ошибка
sender(id, 'Введите вашу группу в формате ЧXXX-Ч:')
Теперь перейдём к коду файла индивид. работы
### Файл индивидуальной работы ###
with open('now id', 'r') as f:
id = int(f.read())
meFile = 'addChat_{str(id)}' # Название файла индивид. работы
# Здесь такой же импорт модулей и установка бота
for event in longpoll.listen():
if event.type == VkBotEventType.MESSAGE_NEW:
if event.to_me:
if event.from_chat:
new_id = event.user_id # Получаем новый id
if new_id == id: # Если нам написал тот же пользователь
# Здесь уже код. Теперь каждый раз, когда Вам в этом коде нужно будет ожидать сообщение - выполняйте for event in longpoll.listen() каждый раз, а при завершении поиска ответа оттуда, пишите - break
msg = event.object.message['text'].lower()
if (not db.chat_exists(id)):
# если беседы нет в базе, добавляем его
msgGroup = event.object.message['text'].lower()
db.add_chat(id, msgGroup)
sender(id, 'Ваша группа будет занесена в базу данных')
# Уберите пользователя из игнор листа
os.remove(meFile) # Удалить себя. break всё равно придётся написать, так как если запущен цикл, код не перестаёт работать, пока не прекратиться цикл, даже если файл с кодом удалён
break
else:
sender(id, 'Ваша группа уже добавлена в базу данных')
# Уберите пользователя из игнор листа
os.remove(meFile)
break