 |

22.07.2023, 15:06
|
|
Познающий
Регистрация: 23.01.2022
Сообщений: 83
С нами:
2266889
Репутация:
23
|
|
У некоторых ботов в вк есть такие кнопки для управления ими:
При нажатии на одну из них, отправляется сообщение с текстом, который написан в этой кнопке. Мне нужно нажать на неё, я пробовал с просто написать сообщение с тем, что написано в кнопке, но бот как-то понимает, что я написал это, а не нажал на кнопку:
код:
Код:
import
vk_api
#часть кода с токеном удалил
vk
=
vk_session
.
get_api
(
)
vk_session
.
method
(
"messages.send"
,
{
"random_id"
:
0
,
"message"
:
"выход"
,
"peer_id"
:
id
}
)
Как можно нормально сделать такое нажатие на кнопку?
|
|
|

23.07.2023, 08:44
|
|
Познавший АНТИЧАТ
Регистрация: 17.11.2021
Сообщений: 1,134
С нами:
2363906
Репутация:
8
|
|
Могу предложить свою версию на
Писал за 5 минут, поэтому говнокод,
предоставляет задать некую команду, так называемый target для кнопки клавиатуры VK.
Бот отвечает только на нажатия клавиатуры, если скопировать и вставить текст - бот нечего не ответит.
keyboard.py:
Код:
from
vkbottle
.
bot
import
Bot
,
Message
from
vkbottle
import
Keyboard
,
KeyboardButtonColor
,
Text
token
=
"str"
bot_token
=
token
bot_group_id
=
0
# int
bh
=
Bot
(
bot_token
,
bot_group_id
)
bh
.
labeler
.
vbml_ignore_case
=
True
btn_hello
=
"Приветик!"
btn_bh
=
"BlastHack"
btn_primary
=
"Синий"
btn_red
=
"Красненький"
@bh.on.private_message
(
text
=
[
'/gk'
,
'Привет'
]
)
async
def
get_keyboard
(
bh
:
Message
)
:
await
bh
.
answer
(
message
=
"Клавиатура:"
,
keyboard
=
(
Keyboard
(
one_time
=
False
,
inline
=
False
)
.
add
(
Text
(
btn_hello
,
payload
=
{
'cmd'
:
'hello'
}
)
,
color
=
KeyboardButtonColor
.
POSITIVE
)
.
add
(
Text
(
btn_bh
,
payload
=
{
'cmd'
:
'bh'
}
)
,
color
=
KeyboardButtonColor
.
POSITIVE
)
.
row
(
)
.
add
(
Text
(
btn_primary
,
payload
=
{
'cmd'
:
'btn_p'
}
)
,
color
=
KeyboardButtonColor
.
PRIMARY
)
.
add
(
Text
(
btn_red
,
payload
=
{
'cmd'
:
'btn_r'
}
)
,
color
=
KeyboardButtonColor
.
NEGATIVE
)
)
.
get_json
(
)
)
@bh.on.private_message
(
payload
=
{
'cmd'
:
'hello'
}
)
async
def
hello
(
bh
:
Message
)
:
await
bh
.
answer
(
btn_hello
)
@bh.on.private_message
(
payload
=
{
'cmd'
:
'bh'
}
)
async
def
cmd_bh
(
bh
:
Message
)
:
await
bh
.
answer
(
btn_bh
)
@bh.on.private_message
(
payload
=
{
'cmd'
:
'btn_p'
}
)
async
def
cmd_primary
(
bh
:
Message
)
:
await
bh
.
answer
(
btn_primary
)
@bh.on.private_message
(
payload
=
{
'cmd'
:
'btn_r'
}
)
async
def
cmd_negative
(
bh
:
Message
)
:
await
bh
.
answer
(
btn_red
)
bh
.
run_forever
(
)
|
|
|

05.08.2023, 14:23
|
|
Познающий
Регистрация: 23.01.2022
Сообщений: 83
С нами:
2266889
Репутация:
23
|
|
Сообщение от Mamashin
Бот отвечает только на нажатия клавиатуры, если скопировать и вставить текст - бот нечего не ответит.
мне и надо нажать на кнопку, мне не нужно их создавать
неактуал, я смог сделать что хотел
|
|
|

08.02.2025, 10:56
|
|
Новичок
Регистрация: 08.02.2025
Сообщений: 1
С нами:
665731
Репутация:
1
|
|
Сообщение от kyurew
мне и надо нажать на кнопку, мне не нужно их создавать
неактуал, я смог сделать что хотел
Можете, пожалуйста, поделиться решением?
|
|
|

17.02.2025, 20:40
|
|
Познающий
Регистрация: 23.01.2022
Сообщений: 83
С нами:
2266889
Репутация:
23
|
|
Сообщение от SoberBuddy
Можете, пожалуйста, поделиться решением?
Привет, сам код для нажатия кнопки примерно такой:
code:
Код:
mes
=
vk_session
.
method
(
"messages.getHistory"
,
{
"peer_id"
:
айди_группы
,
"count"
:
1
# количество сообщений
}
)
for
i
in
mes
[
"items"
]
[
0
]
[
"keyboard"
]
[
"buttons"
]
[
0
]
:
# во всей ***не, которую даёт getHistory, перебирает чисто кнопочки
if
"текст_кнопки"
in
i
[
"action"
]
[
"label"
]
:
# ищет кнопку с нужным текстом
button
=
[
i
[
"action"
]
[
"label"
]
,
i
[
"action"
]
[
"payload"
]
]
# записывает текст и payload кнопки в отдельный массив
vk_session
.
method
(
"messages.send"
,
{
"random_id"
:
0
,
"message"
:
button
[
0
]
,
# текст, который отправляется при нажатии кнопки, обычно такой же как и текст на кнопке
"peer_id"
:
айди_группы
,
"payload"
:
button
[
1
]
# некоторые боты добавляют эту ***ню, не ебу, но нужно, чтоб нажалась
}
)
получаешь последнее сообщение, если просто выведешь то, что тебе выдаст метод getHistory, то там будет много всякой ***ни, эти кнопки снизу, как бы привязаны к последнему сообщению и можешь так их получать. Кнопки, как на скрине в первом сообщении темы, могут быть на разных строках, т.к. *** знает где какая может быть и, чтобы в случае их перемещения ничего не сломалось, я делал перебор этих кнопок через цикл, когда находит кнопку с нужной надписью, сохраняет её точный текст и payload, а потом уже отправляет ответ сообщение, которое имитирует нажатие самой кнопки.
этот перебор, конечно, можно было бы сделать и лучше и без лишнего массива, сразу отправлять ответ, но я давно не занимался этим и мне пох было особо. Можешь поразбираться в том, что тебе возвращает getHistory
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|