0 / 0 / 0
Регистрация: 13.12.2017
Сообщений: 3
1

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

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

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

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

Некоторые кнопки не работают.
Программирую впервые. Раньше решала только задачи по численным методам на C.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2017, 13:14
Ответы с готовыми решениями:

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

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

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

Телеграм-бот
Скачал я бота, а он с ошибками, или просто на виндовс не работает. В общем помогите: Код бота: ...

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

4
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
13.12.2017, 13:35 2
Цитата Сообщение от 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  [ТС] 3
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
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
14.12.2017, 00:40 4
Отформатируйте ваш код. Сейчас самостоятельно вы уже не сможете это сделать, поэтому попросите модераторов, скинув им правильно отформатированный вариант. Кнопка python с тегами
Код
[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  [ТС] 5
А что скажите о поиске из документов?
Я вот не представляю, как это сделать.
0
15.12.2017, 06:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2017, 06:44
Помогаю со студенческими работами здесь

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

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

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

Телеграм бот-граббер
Есть бот-граббер на telethon. В него встроены функции авто-замены, плохих слов и тегов. Принцип...

Телеграм-бот погоды
Доброго времени суток, друзья. В общем сделал я бота и захотел, чтобы при слове привет от...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru