ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Python telebot кнопки (https://forum.antichat.xyz/showthread.php?t=1400693)

chapo 04.09.2021 16:05

Как сделать такие кнопки? Если текст кнопки "/get", то все норм, но если изменить текст кнопки на "Узнать погоду", то бот ничего не отправляет в ответ

https://forum.antichat.xyz/attachmen...98df50009d.png

python:





Код:

@bot
.
message_handler
(
commands
=
[
'start'
]
)
def
start_command
(
message
)
:
keyboard
=
telebot
.
types
.
ReplyKeyboardMarkup
(
True
)
keyboard
.
row
(
'узнать погоду'
)
bot
.
send_message
(
message
.
chat
.
id
,
'Привет!'
,
reply_markup
=
keyboard
)
bot
.
send_message
(
message
.
chat
.
id
,
'Привет, ты запустил бота Chapos Weather Bot, напиши "/get" если хочешь узнать погоду (леха пасаси)'
)
@bot
.
message_handler
(
commands
=
[
'узнать погоду'
]
)
def
start_command
(
message
)
:
res
=
requests
.
get
(
api_url
+
'id='
+
cityid
+
'&units='
+
cf
+
'&APPID='
+
apikey
)
if
res
.
status_code
==
200
:
bot
.
send_message
(
message
.
chat
.
id
,
'Ожидание ответа от api.openweathermap.org...'
)
res_payload_dict
=
res
.
json
(
)
data
=
res
.
json
(
)
bot
.
send_message
(
message
.
chat
.
id
,
'Город: '
+
str
(
data
[
'name'
]
)
+
'\nТемпература: '
+
str
(
data
[
'main'
]
[
'temp'
]
)
+
' (ощущается как '
+
str
(
data
[
'main'
]
[
'feels_like'
]
)
+
')'
)
else
:
bot
.
send_message
(
message
.
chat
.
id
,
'Ошибка при обращении к API'
)


dalbaebebannuy 04.09.2021 16:50

у тебя должен быть callback на кнопку

chapo 04.09.2021 19:45

Цитата:

Сообщение от dalbaebebannuy

у тебя должен быть callback на кнопку

как его создать? в гайдах не нашел

Rei 04.09.2021 20:03

у тя калбек на команду, а при нажатии на кнопку юзер просто считай текст отправляет

pomidorq 04.09.2021 20:59

Я делал по другому, создавал кнопку с текстом, при её нажатии отправлялся текст, и обработчиком перехватывал его, и выдавал какую-нибудь функцию. Насчёт callback data в кнопках такого типа, я сам не знаю :)

Насколько я понял callback есть только у InlineKeyboardMarkup. (кнопки на сообщениях, а не снизу)

Python:





Код:

@bot.message_handler
(
commands
=
[
'start'
]
)
def
start
(
message
)
:
"""sticker"""
#start_sticker = open('stickers/hello_sticker.tgs', 'rb')
"""start keyboard"""
markup
=
types
.
ReplyKeyboardMarkup
(
resize_keyboard
=
True
,
row_width
=
3
)
button1
=
types
.
KeyboardButton
(
'Узнать погоду в городе'
)
markup
.
add
(
button1
)
"""start message"""
#bot.send_sticker(message.chat.id, start_sticker)
bot
.
send_message
(
message
.
chat
.
id
,
'Привет!\nЯ помогу тебе узнать погоду в городе.\n\nПросто нажми на кнопку ниже,\nили используй команду /weather.'
,
reply_markup
=
markup
)
@bot.message_handler
(
content_types
=
[
'text'
]
)
def
sendweather
(
message
)
:
global
city
if
message
.
text
==
'Узнать погоду в городе'
:
"""YOUR CODE"""


Neon3333 04.09.2021 21:30

Вы че совсем уже инопланетяне обдолбаные, я ипу. Какие нах колбэки для текстовых кнопок вы че...

Хотя тут и не только такого начитаться можно🔞

Цитата:

Сообщение от chapo

Как сделать такие кнопки? Если текст кнопки "/get", то все норм, но если изменить текст кнопки на "Узнать погоду", то бот ничего не отправляет в ответ

python:





Код:

@bot
.
message_handler
(
commands
=
[
'start'
]
)
def
start_command
(
message
)
:
keyboard
=
telebot
.
types
.
ReplyKeyboardMarkup
(
True
)
keyboard
.
row
(
'узнать погоду'
)
bot
.
send_message
(
message
.
chat
.
id
,
'Привет!'
,
reply_markup
=
keyboard
)
bot
.
send_message
(
message
.
chat
.
id
,
'Привет, ты запустил бота Chapos Weather Bot, напиши "/get" если хочешь узнать погоду (леха пасаси)'
)
@bot
.
message_handler
(
commands
=
[
'узнать погоду'
]
)
def
start_command
(
message
)
:
res
=
requests
.
get
(
api_url
+
'id='
+
cityid
+
'&units='
+
cf
+
'&APPID='
+
apikey
)
if
res
.
status_code
==
200
:
bot
.
send_message
(
message
.
chat
.
id
,
'Ожидание ответа от api.openweathermap.org...'
)
res_payload_dict
=
res
.
json
(
)
data
=
res
.
json
(
)
bot
.
send_message
(
message
.
chat
.
id
,
'Город: '
+
str
(
data
[
'name'
]
)
+
'\nТемпература: '
+
str
(
data
[
'main'
]
[
'temp'
]
)
+
' (ощущается как '
+
str
(
data
[
'main'
]
[
'feels_like'
]
)
+
')'
)
else
:
bot
.
send_message
(
message
.
chat
.
id
,
'Ошибка при обращении к API'
)



Посмотри на "свой" код, если у тебя полная паста, то возьми потрать 2 мин времени и открой доку к либе, которую используешь, питоновский код можно читать как книгу и я поражаюсь тому, как вы умудряетесь проебаться даже тут.. У тебя в хэндлере







-_-:





Код:

commands
=
[
'узнать погоду'
]



Вот и ждет твой телебот не сообщение с текстом узнать погоду, а сообщение с текстом /узнать погоду, потому что хэндлер у тебя на команду.

И вообще, пока не ушел далеко, очень советую

True way:





Код:

pip uninstall pyTelegramBotAPI
pip install aiogram



Время: 15:02