TransWikia.com

Пишу бота для группы в контакте

Stack Overflow на русском Asked on March 6, 2021

Пишу бота для группы в контакте, не могли бы вы подсказать, как сделать, чтобы после отправки определенного сообщения, бот запоминал следующее сообщение пользователя.

Например пользователь отправляет сообщение: ‘Запомнить’.И следующее сообщение от этого пользователя бот заносит в базу данных.

Есть база данных куда оно будет сохраняться, но как настроить на это условие понять не могу.

2 Answers

Все очень просто. Заведем переменную 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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP