С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/55: Рейтинг темы: голосов - 55, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 13.12.2017
Сообщений: 3

Телеграм бот в python

13.12.2017, 13:14. Показов 11835. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем)
Очень нужна ваша помощь в создании бота.

Идея бота в поиске слов из заданных документов.
Не представляю как это осуществить.
Сделала кнопки бота, команды.

Некоторые кнопки не работают.
Программирую впервые. Раньше решала только задачи по численным методам на C.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.12.2017, 13:14
Ответы с готовыми решениями:

Телеграм бот на python
Здравствуйте, при создании бота на языке Python выдает следующую ошибку: AttributeError: module 'telebot' has no attribute 'TeleBot' ...

Бот для телеграм на python
Есть задание (ниже кода) # -*- coding: utf-8 -*- import mysql.connector cnx = mysql.connector.connect(user='root',password='root',...

Телеграм бот python-telegram-bot. Не переходит на след функцию
Добрый день. Делаю бота для конторы по прокату машин с помощью python-telegram-bot. После выбора автомобиля, переходит на выбор...

4
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
13.12.2017, 13:35
Цитата Сообщение от Baisalbayeva Посмотреть сообщение
Идея бота в поиске слов из заданных документов.
1) Сначала напишите саму процедуру поиска слов.
Бот - это просто интерфейс а-ля GUI или консоль.
Накидать туда кнопок - это уже конечный этап.
2) Прочитайте документацию по telegram (есть и частичный русский перевод на tlgrm.ru).
Выберите в каком режиме будет работать бот - будете ли вы(пользователь) просто писать ему команды типа /start /хочу_пиццу /покажи_котика или же это будет инлайновый бот, ожидающий любого ввода от пользователя и затем выполняющий заданную ему процедуру (тот же поиск по каким-то документам\сайтам и т.д.)
3) Выберите фреймворк для работы с API telegram. Работать с голым API будет тяжеловато.
Вариантов немного или telebot (pyTelegramBotAPI) или telepot.
Если хотите, что вам отвечали не советами, а по конкретной проблеме - выкладывайте код с конкретной проблемой.
0
0 / 0 / 0
Регистрация: 13.12.2017
Сообщений: 3
13.12.2017, 13:42  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import telebot
from telebot import types
Token=''
bot = telebot.TeleBot(Token)
@bot.message_handler(commands=['start'])
def start(m):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(*[types.InlineKeyboardButton(text=name, callback_data=name) for name in
    ['Поиск', 'Выбрать документ']])
    msg=bot.send_message(m.chat.id, 'Здравствуйте, чем я могу помочь?',
        reply_markup=keyboard)
@bot.callback_query_handler(func=lambda c:True)
def inline(c):
    if c.data=='Поиск':
        bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id, text='Введите запрос',
        parse_mode='Markdown')
    if c.data=='Выбрать документ':
        bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id, text='Для продолжения нажмите /doc',
        parse_mode='Markdown')
@bot.message_handler(commands=['doc'])
def doc(m):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(*[types.InlineKeyboardButton(text=name, callback_data=name) for name in ['ПравилаИиОР','Политика УР','Правила определения РА,РТ,КРП']])
    msg=bot.send_message(m.chat.id, 'Предлагаю к вниманию следующие документы:',
        reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call:True)
def inline(call):
    if call.data=='ПравилаИиОР':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,text='Вы выбрали документ "Правила идентицификации и оценки рисков". Введите запрос', parse_mode='Markdown')
    if call.data=='Политика УР':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Вы выбрали документ "Политика управления рисками". Введите запрос', parse_mode='Markdown')
    if call.data=='Правила определения РА,РТ,КРП':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,text='Вы выбрали документ "Правила определения риск-аппетита, риск-толерантности, ключевых рисковых показателей". Введите запрос', parse_mode='Markdown')
@bot.message_handler(commands=['info'])
def info(m):
    keyboard = types.InlineKeyboardMarkup()
    url_button = types.InlineKeyboardButton(text="Қазақстан темiр жолы", url="http://www.railways.kz/ru")
    keyboard.add(url_button)
    bot.send_message(m.chat.id, "Перейти на официальный сайт", reply_markup=keyboard)
@bot.message_handler(commands=['help'])
def help(m):
    msg=bot.send_message(m.chat.id, 'Помогу найти нужные понятия. Для продолжения нажмите /start')
bot.polling()
Добавлено через 3 минуты


Да, я понимаю. Скидываю код.
Я просто не знаю с какой стороны подойти к делу, поэтому начала с самого простого)


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def doc(m):
keyboard = types.InlineKeyboardMarkup()
keyboard.add(*[types.InlineKeyboardButton(text=name, callback_data=name) for name in ['ПравилаИиОР','Политика УР','Правила определения РА,РТ,КРП']])
msg=bot.send_message(m.chat.id, 'Предлагаю к вниманию следующие документы:',
reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call:True)
def inline(call):
if call.data=='ПравилаИиОР':
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,text='Вы выбрали документ "Правила идентицификации и оценки рисков". Введите запрос', parse_mode='Markdown')
if call.data=='Политика УР':
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Вы выбрали документ "Политика управления рисками". Введите запрос', parse_mode='Markdown')
if call.data=='Правила определения РА,РТ,КРП':
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,text='Вы выбрали документ "Правила определения риск-аппетита, риск-толерантности, ключевых рисковых показателей". Введите запрос', parse_mode='Markdown')

Появились кнопки, но при нажатии действие не происходит.

Поиск должен осуществляться после выбора документа и ввода слова, которое нужно найти
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
14.12.2017, 00:40
Отформатируйте ваш код. Сейчас самостоятельно вы уже не сможете это сделать, поэтому попросите модераторов, скинув им правильно отформатированный вариант. Кнопка python с тегами
Code
1
[python]код[/python]
предназначена именно для того, чтобы ваш код имел читабельный вариант.
-------------------------
Запустил я ваш бот. Какие кнопки у вас не работают?
Те, которые после сообщения "Предлагаю к вниманию следующие документы:"?
Вы заметили, что на них появляются часики - это значит, что вы не отправили серверу никакого обратного действия на callback_query_handler. Я не знаю как это делается в библиотеке telebot (я работаю с другим фреймворком), но предполагаю, что в декораторе @bot.callback_query_handler должно быть что-то типа
Python
1
func=lambda c: c.data
вместо
Python
1
func=lambda call:True
То есть отправка текста кнопок. Этот текст придет в callback on_chat (или как он там называется в telebot) и далее вы должны это как-то обработать. В общем, вам нужно внимательнее ознакомиться с документацией на библиотеку, которую вы используете.
У меня с фреймворком telepot никаких недопониманий такого рода не возникло, хотя он намного сложнее простецкого telebot'а и примеров по нему в разы меньше.

Добавлено через 35 минут
В общем попробуйте поиграться с этим вариантом. Здесь все кнопки работают. У вас был лишний callback_query_handler - я его закомментировал и соединил его код с другим.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import telebot
from telebot import types
import time
 
Token=''
bot = telebot.TeleBot(Token)
 
@bot.message_handler(commands=['start'])
def start(m):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(*[types.InlineKeyboardButton(text=name, callback_data=name) for name in ['Поиск', 'Выбрать документ']])
    msg=bot.send_message(m.chat.id, 'Здравствуйте, чем я могу помочь?',reply_markup=keyboard)
 
#@bot.callback_query_handler(func=lambda c:True)
#def inline(c):
#    if c.data=='Поиск':
#        bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id, text='Введите запрос',
#    parse_mode='Markdown')
#    if c.data=='Выбрать документ':
#        bot.edit_message_text(chat_id=c.message.chat.id, message_id=c.message.message_id, text='Для продолжения нажмите /doc',parse_mode='Markdown')
 
@bot.message_handler(commands=['doc'])
def doc(m):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(*[types.InlineKeyboardButton(text=name, callback_data=name) for name in ['ПравилаИиОР','Политика УР','Правила определения РА,РТ,КРП']])
    msg=bot.send_message(m.chat.id, 'Предлагаю к вниманию следующие документы:',reply_markup=keyboard)
 
@bot.message_handler(commands=['info'])
def info(m):
    keyboard = types.InlineKeyboardMarkup()
    url_button = types.InlineKeyboardButton(text="Қазақстан темiр жолы", url="http://www.railways.kz/ru")
    keyboard.add(url_button)
    bot.send_message(m.chat.id, "Перейти на официальный сайт", reply_markup=keyboard)
 
@bot.message_handler(commands=['help'])
def help(m):
    msg=bot.send_message(m.chat.id, 'Помогу найти нужные понятия. Для продолжения нажмите /start')
 
def doc(m):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(*[types.InlineKeyboardButton(text=name, callback_data=name) for name in ['ПравилаИиОР','Политика УР','Правила определения РА,РТ,КРП']])
    msg=bot.send_message(m.chat.id, 'Предлагаю к вниманию следующие документы:',reply_markup=keyboard)
 
@bot.callback_query_handler(func=lambda call: call.data)  #func=lambda call:True
def inline(call):
    
    if call.data=='Поиск':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Введите запрос',parse_mode='Markdown')
    if call.data=='Выбрать документ':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Для продолжения нажмите /doc',parse_mode='Markdown')
    
    
    if call.data=='ПравилаИиОР':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,text='Вы выбрали документ "Правила идентицификации и оценки рисков". Введите запрос', parse_mode='Markdown')
    if call.data=='Политика УР':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Вы выбрали документ "Политика управления рисками". Введите запрос', parse_mode='Markdown')
    if call.data=='Правила определения РА,РТ,КРП':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,text='Вы выбрали документ "Правила определения риск-аппетита, риск-толерантности, ключевых рисковых показателей". Введите запрос', parse_mode='Markdown')
 
if __name__== "__main__":
    
    bot.polling(none_stop=True, interval=0)
Добавлено через 3 минуты
P.S. ИМХО, но telebot уж очень сильно упрощает работу с API Telegram - в итоге для многих пользователей не затруднивших себя изучением документации самого Telegram Bot API, код превращается в "черный ящик" выполняющий какую-то магию.
1
0 / 0 / 0
Регистрация: 13.12.2017
Сообщений: 3
15.12.2017, 06:44  [ТС]
А что скажите о поиске из документов?
Я вот не представляю, как это сделать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.12.2017, 06:44
Помогаю со студенческими работами здесь

Телеграм-бот
Скачал я бота, а он с ошибками, или просто на виндовс не работает. В общем помогите: Код бота: #!/usr/bin/python3.4 # -*- coding:...

Телеграм бот
Здравствуйте, возможно это глупый вопрос,но недавно начал изучать python. Узнал что с помощью его можно сделать бота в телеграме. И так как...

Телеграм Бот
Доброго времени суток!!! возникла проблема при создании бота в телеграм на языке Python 3, при помощи библиотеки "telebot" ...

телеграм бот калькулятор
Имеется скрипт клавиатуры и калькулятора, как сделать так чтобы функция калькулятора принимала ввод с клавиатуры за аргументы в функции.def...

ТЕЛЕГРАМ БОТ АЙОГРАМ
ВСЕМ ПРИВЕТ НУЖНА ПОМОЩЬ С БОТОМ Проблема в том что я написал бота(просто тестовый с двумя кнопками у которых свой ответ) и он никак не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru