Гайд VK Бот на Python 2 часть - Keyboard / Динамичное меню

Mamashin

Известный
Автор темы
1,077
594
да я все же выжил.
Всем привет. Уже писал тему с ботом для вк, там мы использовали модуль vk_api(честно сказать не очень для постоянной основы).
Сегодня немного познакомлю вас с таким модулем как vkbottle, ко всем строкам в коде буду оставлять комментарии, так что не бойтесь.
Хотел бы начать с того, что данный модуль действительно удобен во многом - код, реакция на ошибки со стороны вк, структура.
НАДА:
1. Python(Желательно 3.9) - python.org
2. Любой кодовый редактор(НЕ БЛОКНОТ!) - Notepad ++, Atom, VSC, IDLE Python, PyCharm, я использую Sublime Text и вам советую.
3. Сама библиотека vkbottle - Установка: pip install vkbottle
4. Так же библиотека asyncio - pip install asyncio

Так же:
pip install requests

ВНИМАНИЕ! В данном гайде я не буду рассказывать как создать python-файл и как запустить его, так как если вы не знаете этого, данная тема будет вам довольно сложна и не понятно, советую вам начать с vk_api если так надо.

Начнём с настройки сообщества, перед этим создаем его, создаем API ключ, ставим галочки на нужные евенты, так же и с LongPoll, затем ставим самую последнию версию Long Poll Api(Советую 5.131)
1631578632799.png
1631578699121.png
Затем, заходим в "Сообщения" включаем их, так же включаем возможности ботов, по желанию можно включить кнопку "Начать" и указать приветствие.


1631578823956.png

1631578849668.png

Теперь копируем наш созданный API ключ, так же нам нужно ID сообщества(цифры после public....) если у вас паблик уже с аудиторией, вы можете узнать ID своего паблика тут -regvk.com

Теперь наконец-то, мы можем перейти к коду =)
Для начала импортируем нужные нам библиотеки и библиотеки которые мы установили.
Затем создадим переменные в которые поместим и передадим нужные нам данные, в нашем случае это токен и id нашей группы.
Так же, дабы не ходить во круг и около, создадим первую функцию ответа на сообщение!

One:
# - НАДА -
import asyncio
import requests
import random

# - Вк -

from typing import Optional
from vkbottle import GroupEventType, GroupTypes, Keyboard, Text, VKAPIError
from vkbottle.bot import Bot, Message
from vkbottle import Keyboard, KeyboardButtonColor, Text, OpenLink
from vkbottle.tools import DocMessagesUploader

# Переменные

group_id = '206644831'
secret = 'ВАШ ТОКЕН'

# Для удобства

bot_token = secret
bot_group_id = group_id
vk = Bot(bot_token, bot_group_id)

# Приветствие

# Есть 3 типа - private_message - ожидание\ответ только в личные сообщения группы!
# chat_message - ожидание\ответ только в беседе!
# message - ожидание\ответ и в беседе и в личные сообщения!

@vk.on.private_message(text=['Начать', 'Ку', 'Привет'])
# Сама функция:
async def privet(message: Message):
    # Ответ на сообщение
    await message.answer('Приветик!')

# Толик видиорегистратор система мене
vk.run_forever()

Теперь сразу разберем вопрос с вложениями видео/фото/файлы и тд
В методах вк -vk.com/dev, в категории messages, есть метод attachment - отвечающий за прикрепление вложений к сообщению.
Создадим пару функций..


Two:
# - НАДА -
import asyncio
import requests
import random

# - Вк -

from typing import Optional
from vkbottle import GroupEventType, GroupTypes, Keyboard, Text, VKAPIError
from vkbottle.bot import Bot, Message
from vkbottle import Keyboard, KeyboardButtonColor, Text, OpenLink
from vkbottle.tools import DocMessagesUploader

# Переменные

group_id = '206644831'
secret = 'ВАШ ТОКЕН'
ya = 'doc381260583_611979108'
ya2 = 'photo381260583_457378962'
ya3 = 'video-200537102_456239073'

# Для удобства

bot_token = secret
bot_group_id = group_id
vk = Bot(bot_token, bot_group_id)

# Приветствие

# Есть 3 типа - private_message - ожидание\ответ только в личные сообщения группы!
# chat_message - ожидание\ответ только в беседе!
# message - ожидание\ответ и в беседе и в личные сообщения!

@vk.on.private_message(text=['Начать', 'Ку', 'Привет'])
# Сама функция:
async def privet(message: Message):
    # Ответ на сообщение
    await message.answer('Приветик!')

# Фото
@vk.on.private_message(text='фото')
async def photo(message: Message):
    await message.answer('Вот твоя фотка ', attachment=ya2)

# Видео
@vk.on.private_message(text='видео')
async def video(message: Message):
    await message.answer('Вот твое видео ', attachment=ya3)

# Файл
@vk.on.private_message(text='файл')
async def file(message: Message):
    await message.answer('Вот твой файл ', attachment=ya)


# Толик видиорегистратор система мене
vk.run_forever()
1631580869413.png

1631580903420.png

1631580928264.png

Теперь рассмотрим клавиатуру и напишем простое динамичное меню, так же добавим ответ на сообщение которое мы не знаем =)
Keyborad + Menu:
# - НАДА -
import asyncio
import requests
import random

# - Вк -

from typing import Optional
from vkbottle import GroupEventType, GroupTypes, Keyboard, Text, VKAPIError
from vkbottle.bot import Bot, Message
from vkbottle import Keyboard, KeyboardButtonColor, Text, OpenLink
from vkbottle.tools import DocMessagesUploader

# Переменные

group_id = '206644831'
secret = 'ВАШ ТОКЕН'
ya = 'doc381260583_611979108'
ya2 = 'photo381260583_457378962'
ya3 = 'video-200537102_456239073'

# Для удобства

bot_token = secret
bot_group_id = group_id
vk = Bot(bot_token, bot_group_id)

# Приветствие

# Есть 3 типа - private_message - ожидание\ответ только в личные сообщения группы!
# chat_message - ожидание\ответ только в беседе!
# message - ожидание\ответ и в беседе и в личные сообщения!

@vk.on.private_message(text=['Начать', 'Ку', 'Привет'])
# Сама функция:
async def privet(message: Message):
    # Ответ на сообщение
    await message.answer('Приветик!')

# Фото
#@vk.on.private_message(text='фото')
#async def photo(message: Message):
#    await message.answer('Вот твоя фотка ', attachment=ya2)

# Видео
#@vk.on.private_message(text='видео')
#async def video(message: Message):
#    await message.answer('Вот твое видео ', attachment=ya3)

# Файл
#@vk.on.private_message(text='файл')
#async def file(message: Message):
#    await message.answer('Вот твой файл ', attachment=ya)

# Меню
@vk.on.private_message(text=['/mm', 'menu', 'меню'])
@vk.on.private_message(payload={'cmd': 'menu'})
async def menu(message: Message):
    await message.answer(
        # Сообщение при отправлении клавиатуры
        message = 'Меню: ',
        # Клавиатура
        keyboard = (
            # one_time - True - одноразовая клавиатура, False - постоянная клавиатура
            # inline - True - клавиатура прикрепляется к сообщению(РАССМОТРИМ), False - клавиаутра в стандартном положении
            # .add - добавить кнопку
            # .row - отступ
            # Цвета: POSITIVE - Ярко зеленый, SECONDARY(можно нечего не указывать) - БЛЕДНО БЕЛЫЙ
            # PRIMARY - СИНИЙ, NEGATIVE - КРАСНЫЙ

            Keyboard(one_time = False, inline = False)
            .add(Text('Инфа'), color=KeyboardButtonColor.POSITIVE)
            .add(Text('ЛУЧШИЙ ПОРТАЛ'), color=KeyboardButtonColor.NEGATIVE)
            .row()
            .add(Text('Магаз'), color=KeyboardButtonColor.PRIMARY)
            )
    )

@vk.on.private_message(text='Магаз')
async def magaz(message: Message):
    await message.answer(
        message = 'Пятерочка: ',
        keyboard = (
            Keyboard(one_time = False, inline = False)
            .add(Text('Сигареты'), color=KeyboardButtonColor.POSITIVE)
            .add(Text('Чипсы'), color=KeyboardButtonColor.POSITIVE)
            .row()
            .add(Text('Блейзуха'), color=KeyboardButtonColor.POSITIVE)
            .add(Text('Круггетсы'), color=KeyboardButtonColor.NEGATIVE)
            .row()
            .add(Text('Назад', payload={'cmd': 'menu'}))
            )
    )

# <3

@vk.on.private_message(text='ЛУЧШИЙ ПОРТАЛ')
async def blasthk(message: Message):
    await message.answer(
        message = 'ЛУЧШИЙ СУКА САЙТ:',
        keyboard = (
            Keyboard(inline = True)
            .add(OpenLink('https://blast.hk/', 'ЛУЧШИЙ ПОРТАЛ'))

        )
    )
# нада сделать

@vk.on.private_message()
async def main(message):
    await message.answer('Я не знаю, что ответить на это =(\n\nВозможно потом когда нибудь я смогу ответить тебе на это =)')


# Толик видиорегистратор система мене
vk.run_forever()
1631582804203.png

1631582837235.png

1631583094611.png

1631583122340.png

Вроде бы все, прикреплю исходный файл к теме, так же видео дабы показать как это все работает =)
Если у вас есть срочные вопросы можете задавать их напрямую в
вк(кликабельно), а так пишите в данной теме.
Думаю, основное я вам донёс :)

Видео:

p.s я импортировал модуль Random, хотел сделать отправку рандомных ответов, думаю кто знает python тот сам знает как это сделать.
 

Вложения

  • bot.py
    4.2 KB · Просмотры: 227
Последнее редактирование:

F0RQU1N and

Известный
1,309
498
этих гайдов миллион просто, тем более на питоне, так нахуя ещё один?????
 
  • Нравится
Реакции: Mamashin

Mamashin

Известный
Автор темы
1,077
594
этих гайдов миллион просто, тем более на питоне, так нахуя ещё один?????
На бх вряд ли соберётся миллион таких гайдов, когда я писал 1-ю часть на бх не было не 1-й темы насчёт ВК ботов, а так пусть будет 2 миллиона =)
 

kFor

Известный
99
24
Зачем ты импортируешь requests и asyncio, если они не используются в твоем коде? Зачем ты устанавливаешь requests, если это синхронная либо, а vkbottle - асинхронный фреймворк? Вместо requests нужно юзать aiohttp

почему ты рекомендуешь саблайм? тот же самый pycharm намного лучше своими подсказками и форматированием кода. твои неиспользуемые импорты он бы сам убрал. Использование нормальных IDE (Pycharm) значительно ускорит скорость разработки и позволит не обращаться в документацию api вконтакте каждый раз
api-highlighting.png




Очень плохой гайд, учитывая, что у vkbottle есть свой туториал для новичков, который более понятный и информативный.
 
  • Нравится
Реакции: Mamashin

Mamashin

Известный
Автор темы
1,077
594
Зачем ты импортируешь requests и asyncio, если они не используются в твоем коде? Зачем ты устанавливаешь requests, если это синхронная либо, а vkbottle - асинхронный фреймворк? Вместо requests нужно юзать aiohttp

почему ты рекомендуешь саблайм? тот же самый pycharm намного лучше своими подсказками и форматированием кода. твои неиспользуемые импорты он бы сам убрал. Использование нормальных IDE (Pycharm) значительно ускорит скорость разработки и позволит не обращаться в документацию api вконтакте каждый раз
api-highlighting.png




Очень плохой гайд, учитывая, что у vkbottle есть свой туториал для новичков, который более понятный и информативный.
Часть кода с импортами я взял исходника своего бота, так же random оказался лишним, гайд я писал не для новичков, а примерно для таких людей как ты =), если бы я писал данную тему для новичков, она бы вышла примерно сейчас
1631649879337.png


Зачем ты импортируешь requests и asyncio, если они не используются в твоем коде? Зачем ты устанавливаешь requests, если это синхронная либо, а vkbottle - асинхронный фреймворк? Вместо requests нужно юзать aiohttp

почему ты рекомендуешь саблайм? тот же самый pycharm намного лучше своими подсказками и форматированием кода. твои неиспользуемые импорты он бы сам убрал. Использование нормальных IDE (Pycharm) значительно ускорит скорость разработки и позволит не обращаться в документацию api вконтакте каждый раз
api-highlighting.png




Очень плохой гайд, учитывая, что у vkbottle есть свой туториал для новичков, который более понятный и информативный.
Насчёт саблайма, данный кодовый редактор как и этот гайд для хардкоров, вообще я бы советовал только Notepad ++
 

kFor

Известный
99
24
Часть кода с импортами я взял исходника своего бота, так же random оказался лишним, гайд я писал не для новичков, а примерно для таких людей как ты =), если бы я писал данную тему для новичков, она бы вышла примерно сейчас Посмотреть вложение 114250


Насчёт саблайма, данный кодовый редактор как и этот гайд для хардкоров, вообще я бы советовал только Notepad ++
хардкоры не смотрят туториалы на бластхаке
 

madrasso

Потрачен
883
325
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Часть кода с импортами я взял исходника своего бота, так же random оказался лишним, гайд я писал не для новичков, а примерно для таких людей как ты =), если бы я писал данную тему для новичков, она бы вышла примерно сейчас Посмотреть вложение 114250


Насчёт саблайма, данный кодовый редактор как и этот гайд для хардкоров, вообще я бы советовал только Notepad ++
Таким как он не нужен твой гайд
 
  • Нравится
Реакции: kru_tin

madrasso

Потрачен
883
325
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Если бы он был не нужен, он бы не распинался пол часа в моей теме, чтобы проанализировать мой гайд, и высказаться плохой он или хороший =)
Информативности для него было ноль, он наоборот указал на твои ошибки. Гайд как раз-таки максимум для новичков, да и хуйня это, а не гайд. Да и цвет на черной теме уебанский.
1631938744874.png
 
  • Влюблен
  • Нравится
Реакции: Mamashin и kFor

kFor

Известный
99
24
Если бы он был не нужен, он бы не распинался пол часа в моей теме, чтобы проанализировать мой гайд, и высказаться плохой он или хороший =)
если ты начал писать гайд, делай его понятным и информативным, а также показывай чистый и правильный код, а не эту хуйню
 
  • Ха-ха
  • Влюблен
Реакции: James Saula и Mamashin

Mamashin

Известный
Автор темы
1,077
594
если ты начал писать гайд, делай его понятным и информативным, а также показывай чистый и правильный код, а не эту хуйню
я пишу эти гайды от нехуй делать =)

Информативности для него было ноль, он наоборот указал на твои ошибки. Гайд как раз-таки максимум для новичков, да и хуйня это, а не гайд. Да и цвет на черной теме уебанский.Посмотреть вложение 114694
если ты сам склонился к тому, что тот гайд для новичков, то сколько новичков по твоему используют тёмную тему бх? =)

если ты начал писать гайд, делай его понятным и информативным, а также показывай чистый и правильный код, а не эту хуйню
К слову, где я что либо писал, про то что я учитель или пишу какие то УЛЬТРА СУПИР МЕГА ТОП ПОНЯТНЫЕ гайды? Это моя тема и писать её, рекомендовать что либо в ней, выбирать оформление могу только я =), я не сказал тебе, что ты не прав, но если ты так хорошо разбираешься в донесении информации именно для новичков, почему бы тебе самому не написать гайд? Я думаю ты более нормальный и здоровый человек в отличии от меня, и можешь написать гайд днём =), спасибо
 
Последнее редактирование: