Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # В базе данных я создал 2 столбца для теста.
- # Названия столбцов: id и nickname.
- # Дефолт значения: None, Безымянный
- # Редактировать базу данных можно программой Sqlite Studio, так-же создавать столбцы и т.д.
- from vkbottle import Bot, Message, VKError, keyboard_gen
- import sqlite3 as sql
- # VkBottle
- token = 'ТОКЕН' # Токен LongPool (Version: 1.103) (String)
- group_id = 1234567 # Айди группы (Integer) (Циферками)
- bot = Bot(token, group_id, debug=True, log_to_file=False) # Подключаемся
- # SqLite3
- connection = sql.connect('data.db', check_same_thread=False) # Подключаемся к БД. (Нужно создать файл data.db)
- q = connection.cursor() # Создаём курсор, чтобы управлять базой данных через него
- @bot.on.message_both('Регистрация', lower=True)
- @bot.on.message_both('/Регистрация', lower=True)
- # Реакция на сообщение в ЛС и в чате на слово "Регистрация"
- # lower=True - это функция, с помощью которой бот будет распознавать команду в любом виде регистра
- # Пример: "РЕгИстрация", "РЕГИСТРАЦИЯ", "РегИСТРАция"
- async def registration(ans: Message):
- # Создаём ассинхронную функцию(def) "registration", которая будет отвечать на сообщение
- q.execute(f"SELECT id FROM players WHERE id = {ans.from_id}")
- # Выбирает столбец "id" из таблицы "players" где id равен айди человека, который написал команду.
- result = q.fetchall()
- # Сохраняет результат в переменную "result".
- if len(result) == 0:
- # Если длинна переменной "result" равно 0 (потому что пользователя нету в базе данных)
- user = await bot.api.users.get(user_ids=ans.from_id)
- # Записывает в переменную данные, полученые через users.get (VK)
- user_first_name = user[0]['first_name']
- # Выбирает только first_name (Имя) из user
- q.execute(f"INSERT INTO players (id, nickname) VALUES ('{ans.from_id}', '{user_first_name}')")
- # Вставляет пользователя в таблицу (именно вставляет, если его не существует!!!)
- connection.commit()
- # Сохраняет базу данных
- await ans(f'@id{ans.from_id} ({user_first_name}), вы успешно зарегистрировались!')
- # Отправляет сообщение
- else:
- # Если иначе, то отправляет сообщение, что человек уже зарегистрирован.
- await ans('Вы уже зарегистрированы!')
- @bot.on.message_both('Ник <text>', lower=True)
- @bot.on.message_both('/Ник <text>', lower=True)
- async def nickname_change(ans: Message, text):
- q.execute(f"SELECT * FROM players WHERE id = {ans.from_id}")
- # Выбирает выбирает все столбцы из таблицы "players" где id равен айди человека, который написал команду.
- result = q.fetchall()
- # Сохраняет результат в "result"
- if len(result) == 0:
- # Если длинна переменной "result" равно 0 (потому что пользователя нету в базе данных)
- await ans('Вы не зарегистрированы. Введите <</регистрация>>, для регистрации.')
- elif len(text) > 15:
- # Если длина текста больше 15, то отправить сообщение
- await ans('Ваш ник превышает лимит в 15 символов. \nПовторите попытку.') # \n - это перенос на новую строку
- else:
- q.execute(f"UPDATE players SET nickname = '{text}'")
- # Обновляет таблицу players, установкой nickname на наш text
- connection.commit()
- # Сохраняет базу данных
- await ans(f'Ваш ник был установлен на {text}!')
- @bot.on.message_both('Ник', lower=True)
- @bot.on.message_both('/Ник', lower=True)
- # Реакция на сообщение в ЛС и в чате на слово "Ник"
- # lower=True - это функция, с помощью которой бот будет распознавать команду в любом виде регистра
- # Пример: "НИК", "НиК"
- async def nickname_check(ans: Message):
- # Создаём ассинхронную функцию(def) "nickname_check", которая будет отвечать на сообщение
- q.execute(f"SELECT * FROM players WHERE id = {ans.from_id}")
- # Выбирает выбирает все столбцы из таблицы "players" где id равен айди человека, который написал команду.
- result = q.fetchall()
- # Сохраняет результат в "result"
- if len(result) == 0:
- # Если длинна переменной "result" равно 0 (потому что пользователя нету в базе данных)
- await ans('Вы не зарегистрированы. Введите <</регистрация>>, для регистрации.')
- else:
- nickname = result[0][1]
- # В переменную nickname записывает nickname из result. В таблице только 2 столбца.
- # Первый столбец: id, а второй: nickname.
- # Т.к. в Python отсчет начинается с 0, то чтобы вывести nickname, нужно писать в список не 2, а 1.
- # [0] - Это самый первый пользователь в базе данных. Первым пользователем является человек, который написал команду.
- # Он является первым, потому что в q.execute мы вписали WHERE id = {ans.from_id} (В переводе: Где айди равен айди человека, который написал команду)
- # Данный метод вообразительно ставит нашего пользователя на самый верх списка (на номер 1).
- # Но т.к. опять-же счет в Python начинается с 0, то мы вводим, не [1], а [0]
- await ans(f'Ваш ник: {nickname}')
- # Выводит нашую переменную nickname
- bot.run_polling() # Запускает бота
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement