Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.06 KB | None | 0 0
  1. # В базе данных я создал 2 столбца для теста.
  2. # Названия столбцов: id и nickname.
  3. # Дефолт значения: None, Безымянный
  4. # Редактировать базу данных можно программой Sqlite Studio, так-же создавать столбцы и т.д.
  5.  
  6. from vkbottle import Bot, Message, VKError, keyboard_gen
  7. import sqlite3 as sql
  8.  
  9. # VkBottle
  10. token = 'ТОКЕН' # Токен LongPool (Version: 1.103) (String)
  11. group_id = 1234567 # Айди группы (Integer) (Циферками)
  12. bot = Bot(token, group_id, debug=True, log_to_file=False) # Подключаемся
  13.  
  14. # SqLite3
  15. connection = sql.connect('data.db', check_same_thread=False) # Подключаемся к БД. (Нужно создать файл data.db)
  16. q = connection.cursor() # Создаём курсор, чтобы управлять базой данных через него
  17.  
  18. @bot.on.message_both('Регистрация', lower=True)
  19. @bot.on.message_both('/Регистрация', lower=True)
  20. # Реакция на сообщение в ЛС и в чате на слово "Регистрация"
  21. # lower=True - это функция, с помощью которой бот будет распознавать команду в любом виде регистра
  22. # Пример: "РЕгИстрация", "РЕГИСТРАЦИЯ", "РегИСТРАция"
  23. async def registration(ans: Message):
  24. # Создаём ассинхронную функцию(def) "registration", которая будет отвечать на сообщение
  25.     q.execute(f"SELECT id FROM players WHERE id = {ans.from_id}")
  26.     # Выбирает столбец "id" из таблицы "players" где id равен айди человека, который написал команду.
  27.     result = q.fetchall()
  28.     # Сохраняет результат в переменную "result".
  29.     if len(result) == 0:
  30.         # Если длинна переменной "result" равно 0 (потому что пользователя нету в базе данных)
  31.         user = await bot.api.users.get(user_ids=ans.from_id)
  32.         # Записывает в переменную данные, полученые через users.get (VK)
  33.         user_first_name = user[0]['first_name']
  34.         # Выбирает только first_name (Имя) из user
  35.         q.execute(f"INSERT INTO players (id, nickname) VALUES ('{ans.from_id}', '{user_first_name}')")
  36.         # Вставляет пользователя в таблицу (именно вставляет, если его не существует!!!)
  37.         connection.commit()
  38.         # Сохраняет базу данных
  39.         await ans(f'@id{ans.from_id} ({user_first_name}), вы успешно зарегистрировались!')
  40.         # Отправляет сообщение
  41.     else:
  42.         # Если иначе, то отправляет сообщение, что человек уже зарегистрирован.
  43.         await ans('Вы уже зарегистрированы!')
  44.  
  45. @bot.on.message_both('Ник <text>', lower=True)
  46. @bot.on.message_both('/Ник <text>', lower=True)
  47. async def nickname_change(ans: Message, text):
  48.     q.execute(f"SELECT * FROM players WHERE id = {ans.from_id}")
  49.     # Выбирает выбирает все столбцы из таблицы "players" где id равен айди человека, который написал команду.
  50.     result = q.fetchall()
  51.     # Сохраняет результат в "result"
  52.     if len(result) == 0:
  53.         # Если длинна переменной "result" равно 0 (потому что пользователя нету в базе данных)
  54.         await ans('Вы не зарегистрированы. Введите <</регистрация>>, для регистрации.')
  55.     elif len(text) > 15:
  56.         # Если длина текста больше 15, то отправить сообщение
  57.         await ans('Ваш ник превышает лимит в 15 символов. \nПовторите попытку.') # \n - это перенос на новую строку
  58.     else:
  59.         q.execute(f"UPDATE players SET nickname = '{text}'")
  60.         # Обновляет таблицу players, установкой nickname на наш text
  61.         connection.commit()
  62.         # Сохраняет базу данных
  63.         await ans(f'Ваш ник был установлен на {text}!')
  64.  
  65. @bot.on.message_both('Ник', lower=True)
  66. @bot.on.message_both('/Ник', lower=True)
  67. # Реакция на сообщение в ЛС и в чате на слово "Ник"
  68. # lower=True - это функция, с помощью которой бот будет распознавать команду в любом виде регистра
  69. # Пример: "НИК", "НиК"
  70. async def nickname_check(ans: Message):
  71. # Создаём ассинхронную функцию(def) "nickname_check", которая будет отвечать на сообщение
  72.     q.execute(f"SELECT * FROM players WHERE id = {ans.from_id}")
  73.     # Выбирает выбирает все столбцы из таблицы "players" где id равен айди человека, который написал команду.
  74.     result = q.fetchall()
  75.     # Сохраняет результат в "result"
  76.     if len(result) == 0:
  77.         # Если длинна переменной "result" равно 0 (потому что пользователя нету в базе данных)
  78.         await ans('Вы не зарегистрированы. Введите <</регистрация>>, для регистрации.')
  79.     else:
  80.         nickname = result[0][1]
  81.         # В переменную nickname записывает nickname из result. В таблице только 2 столбца.
  82.         # Первый столбец: id, а второй: nickname.
  83.         # Т.к. в Python отсчет начинается с 0, то чтобы вывести nickname, нужно писать в список не 2, а 1.
  84.         # [0] - Это самый первый пользователь в базе данных. Первым пользователем является человек, который написал команду.
  85.         # Он является первым, потому что в q.execute мы вписали WHERE id = {ans.from_id} (В переводе: Где айди равен айди человека, который написал команду)
  86.         # Данный метод вообразительно ставит нашего пользователя на самый верх списка (на номер 1).
  87.         # Но т.к. опять-же счет в Python начинается с 0, то мы вводим, не [1], а [0]
  88.         await ans(f'Ваш ник: {nickname}')
  89.         # Выводит нашую переменную nickname
  90.  
  91. bot.run_polling() # Запускает бота
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement