PDA

Просмотр полной версии : VK Бот на Python 2 часть - Keyboard / Динамичное меню


Mamashin
14.09.2021, 06:04
да я все же выжил.

Всем привет. Уже писал тему с ботом для вк, там мы использовали модуль 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)




https://forum.antichat.xyz/attachments/27841820/img_ac2b791c8b.png

https://forum.antichat.xyz/attachments/27841820/img_4ef240d0f5.png


Затем, заходим в "Сообщения" включаем их, так же включаем возможности ботов, по желанию можно включить кнопку "Начать" и указать приветствие.




https://forum.antichat.xyz/attachments/27841820/img_783c830ef9.png

https://forum.antichat.xyz/attachments/27841820/img_384d21839b.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
(
)







https://forum.antichat.xyz/attachments/27841820/img_e1235a14e8.png

https://forum.antichat.xyz/attachments/27841820/img_001af3f352.png

https://forum.antichat.xyz/attachments/27841820/img_54fec77ba3.png




Теперь рассмотрим клавиатуру и напишем простое динамичное меню, так же добавим ответ на сообщение которое мы не знаем =)

Keyborad + Menu:





[CODE]
# - НАДА -
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'
}
)
)
)
)
#






https://forum.antichat.xyz/attachments/27841820/img_c4930a04c6.png

https://forum.antichat.xyz/attachments/27841820/img_6f5fc728fc.png

https://forum.antichat.xyz/attachments/27841820/img_95e9a635e2.png

https://forum.antichat.xyz/attachments/27841820/img_0a0de8f35c.png




Вроде бы все, прикреплю исходный файл к теме, так же видео дабы показать как это все работает =)

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

Думаю, основное я вам донёс :)

Видео:



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

misteralen
14.09.2021, 08:20
опять вк апи не признают🙁

F0RQU1N and
14.09.2021, 12:17
этих гайдов миллион просто, тем более на питоне, так нахуя ещё один?????

Mamashin
14.09.2021, 18:55
этих гайдов миллион просто, тем более на питоне, так нахуя ещё один?????


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

laiser
14.09.2021, 23:13
этих гайдов миллион просто, тем более на питоне, так нахуя ещё один?????


да хоть 5 миллионов тебе то что? Кому-то понятен его гайд, а у других не понятно.

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

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

https://github.com/vkbottle/vkbottle/raw/master/docs/tutorial/assets/api-highlighting.png

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

vkbottle/docs/tutorial/index.md at master · vkbottle/vkbottle (https://github.com/vkbottle/vkbottle/blob/master/docs/tutorial/index.md)

Сustomizable asynchronous VK API framework. Contribute to vkbottle/vkbottle development by creating an account on GitHub.

github.com

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

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

https://github.com/vkbottle/vkbottle/raw/master/docs/tutorial/assets/api-highlighting.png

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

vkbottle/docs/tutorial/index.md at master · vkbottle/vkbottle (https://github.com/vkbottle/vkbottle/blob/master/docs/tutorial/index.md)

Сustomizable asynchronous VK API framework. Contribute to vkbottle/vkbottle development by creating an account on GitHub.

github.com



Часть кода с импортами я взял исходника своего бота, так же random оказался лишним, гайд я писал не для новичков, а примерно для таких людей как ты =), если бы я писал данную тему для новичков, она бы вышла примерно сейчас
https://forum.antichat.xyz/attachments/27842411/img_a071c44ca8.png



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

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

https://github.com/vkbottle/vkbottle/raw/master/docs/tutorial/assets/api-highlighting.png

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

vkbottle/docs/tutorial/index.md at master · vkbottle/vkbottle (https://github.com/vkbottle/vkbottle/blob/master/docs/tutorial/index.md)

Сustomizable asynchronous VK API framework. Contribute to vkbottle/vkbottle development by creating an account on GitHub.

github.com



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

kfor
15.09.2021, 00:29
Часть кода с импортами я взял исходника своего бота, так же random оказался лишним, гайд я писал не для новичков, а примерно для таких людей как ты =), если бы я писал данную тему для новичков, она бы вышла примерно сейчас

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


хардкоры не смотрят туториалы на бластхаке

Mamashin
15.09.2021, 03:54
хардкоры не смотрят туториалы на бластхаке


это и не туториал =)

madrasso
15.09.2021, 06:38
Часть кода с импортами я взял исходника своего бота, так же random оказался лишним, гайд я писал не для новичков, а примерно для таких людей как ты =), если бы я писал данную тему для новичков, она бы вышла примерно сейчас

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


Таким как он не нужен твой гайд

Mamashin
16.09.2021, 14:47
Таким как он не нужен твой гайд


Если бы он был не нужен, он бы не распинался пол часа в моей теме, чтобы проанализировать мой гайд, и высказаться плохой он или хороший =)

kru_tin
18.09.2021, 04:58
Если бы он был не нужен, он бы не распинался пол часа в моей теме, чтобы проанализировать мой гайд, и высказаться плохой он или хороший =)


цени фанатов)

madrasso
18.09.2021, 08:19
Если бы он был не нужен, он бы не распинался пол часа в моей теме, чтобы проанализировать мой гайд, и высказаться плохой он или хороший =)


Информативности для него было ноль, он наоборот указал на твои ошибки. Гайд как раз-таки максимум для новичков, да и ***ня это, а не гайд. Да и цвет на черной теме уебанский.
https://forum.antichat.xyz/attachments/27844494/img_d234f54e40.png

kfor
18.09.2021, 13:40
Если бы он был не нужен, он бы не распинался пол часа в моей теме, чтобы проанализировать мой гайд, и высказаться плохой он или хороший =)


если ты начал писать гайд, делай его понятным и информативным, а также показывай чистый и правильный код, а не эту ***ню

Mamashin
18.09.2021, 21:48
если ты начал писать гайд, делай его понятным и информативным, а также показывай чистый и правильный код, а не эту ***ню


я пишу эти гайды от не*** делать =)



Информативности для него было ноль, он наоборот указал на твои ошибки. Гайд как раз-таки максимум для новичков, да и ***ня это, а не гайд. Да и цвет на черной теме уебанский.


если ты сам склонился к тому, что тот гайд для новичков, то сколько новичков по твоему используют тёмную тему бх? =)



если ты начал писать гайд, делай его понятным и информативным, а также показывай чистый и правильный код, а не эту ***ню


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

madrasso
19.09.2021, 06:09
если ты сам склонился к тому, что тот гайд для новичков, то сколько новичков по твоему используют тёмную тему бх? =)


Много. Новичков в языке, а не на форуме.



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


Тогда зачем учить новичков "***не"?

Mamashin
21.09.2021, 05:53
Много. Новичков в языке, а не на форуме.

Тогда зачем учить новичков "***не"?


На основе своих прошлых гайдов я сделал вывод, что моя ***ня довольно полезная вещь новичкам на бх =)