Stack Overflow на русском Asked on March 6, 2021
Пишу бота для группы в контакте, не могли бы вы подсказать, как сделать, чтобы после отправки определенного сообщения, бот запоминал следующее сообщение пользователя.
Например пользователь отправляет сообщение: ‘Запомнить’.И следующее сообщение от этого пользователя бот заносит в базу данных.
Есть база данных куда оно будет сохраняться, но как настроить на это условие понять не могу.
Все очень просто. Заведем переменную FLAG типа данных bool и если пользователь прислал нам сообщение 'Запомнить', то ставим значение этой переменной True, после запоминания следующего сообщения просто ставим False.
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType, VkChatEventType
import random
FLAG = False
def send_private_message(user_id, message):
vk.method('messages.send', {'user_id': user_id, 'message': message, "random_id": random.randint(1, 2147483647)})
def message_init(user_id, message):
global FLAG
if message == 'запомнить':
FLAG = True
elif FLAG:
FLAG = False
#добавляем значение переменной в базу данных
print(message)
# API-ключ созданный ранее
token = ""
# Авторизуемся как сообщество
vk = vk_api.VkApi(token=token)
# Работа с сообщениями
longpoll = VkLongPoll(vk)
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW and event.from_user:
message_init(event.peer_id, event.message.lower())
Correct answer by asdfjsldfksjdsdjklas on March 6, 2021
Вообще такие вопросы лучше гуглить самому, ибо так больше инфы найдете, а еще:
Удобно будет для таких целей заюзать ORM
. В питоне рекомендую SqlAlchemy
.
Настроим SqlAlchemy
для работы с Sqlite3
:
%PROJECT_DIR%/core.py
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine(f'sqlite:///test.db', echo=False)
Base.metadata.create_all(engine, checkfirst=True)
Session = sessionmaker(bind=engine)
Создадим модель таблицы:
%PROJECT_DIR%/source/database/models/user.py
from sqlalchemy import Column, Integer, String
from core import Base
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
message = Column(String)
def __init__(self, id:int, message: str):
self.id = id
self.message = message
Потом напишем методы для работы с базой данных:
%PROJECT_DIR%/source/database/methods.py
from source.database.models.user import User
from core import Session
class Methods:
def __init__(self):
self.session = Session()
def add_message(self, id: int, message: str):
self.session.add(User(id, message))
self.session.commit()
def get_messages(self, id: int):
for user in self.session.query(User).filter_by(id=id):
yield user.message
Ну и обрабатываем...
%PROJECT_DIR%/main.py
from source.database.methods import Methods
methods = Methods()
while True:
longpoll = VkLongPoll(self.vk)
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
if event.to_me:
if # custom statement... :
methods.add_message(event.user_id, event.text)
Рад был помочь ^^
Answered by icYFTL on March 6, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP