Sublime bot Telegram описание

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Бийбосунов Б. И., Бийбосунова С. К., Жолочубеков Н. Ж.

В данной статье подробно описана концепция Telegram ботов, история появления самого мессенджера и ботов для него, а также будет рассмотрен способ их создания. Разработан Telegram бот, дающий прогноз погоды, и исходя из нее дает советы пользователям.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Бийбосунов Б. И., Бийбосунова С. К., Жолочубеков Н. Ж.

Автоматизация учебного расписания через Telegram-bot

Использование функций мессенджера Telegram для обмена сообщениями между узлами распределенной вычислительной системы

Информационные технологии и системы для органов местного самоуправления в Кыргызстане
Automatic code generation from Nested Petri Nets to event-based systems on the Telegram platform
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры?

Множественные курсоры в Sublime text 3: реальный юзкейс

Вы всегда можете отключить рекламу.

DESCRIPTION OF THE TELEGRAM BOT CONCEPT AND ITS DEVELOPMENT

This article describes in detail the concept of Telegram bots, the history of the appearance of the messenger and bots for it, and will consider how to create them. There is designed Telegram bot, which gives the weather forecasting, and afterwards submitting advice towards users.

Текст научной работы на тему «Описание концепции Telegram ботов и их разработка»

д. физ-мат. наук, профессор, Кыргызский государственный университет имени И.Арабаева

Бишкек, Кыргызстан Бийбосунова С.К.

к.э.н., доцент, Кыргызский государственный университет имени И.Арабаева

Бишкек, Кыргызстан Жолочубеков Н.Ж.

Аспирант, Кыргызский государственный университет имени И.Арабаева

Бишкек, Кыргызстан DOI: 10.24411/2520-6990-2020-11485 ОПИСАНИЕ КОНЦЕПЦИИ TELEGRAM БОТОВ И ИХ РАЗРАБОТКА

Doctor of PhysicsНова Пошта», позволяет отслеживать свои посылки), доп. функции для канала/группы (Бот для проведения опросов -Pollbot), проведение операций с криптовалютой (К

примеру, от cryptorussia.ru. Однако надежность подобных ботов не полностью достоверна) и прочие (К примеру, бот «Флибуста», который позволяет сразу скачать книгу, которую вы запросили). В общем, Telegram боты очень даже актуальная тема, которая позволяет добавить множество полезных функций. В 2016 году был проведен конкурс по созданию Telegram ботов botprize с призовым фондом 200.000$ [2].

Рис 2 Пример реализации интерактивного Telegram бота с выбором кнопок

Способ создания Telegram ботов

Для создания Telegram бота необходимы базовые знания языка программирования Python [3]. Первым делом, необходимо установить сам Python на ПК. Делается это через официальный сайт Python.

About Downloads Docui

Community Success Stones News Events

Download for Windows

#3 Делаем Telegram-бот (мини-курс о создании телеграм-ботов, для не-программистов) | Подготовка

Source code Python 3.8.2

Windows Note that Python 3.S* cannot bt used on Windows XP

[‘ВДИДИД’, ‘АРР MacOSX or earlier.

Oü»er Platforms Not the OS you are looking for? Python can be used on many operating systems and environments. V*h the full list of downloads.

[(в, ‘Banana’), Alternative Implementations

Python is a programming language that lets you work quickly and integrate systems more effectively. >>> Learn More

Whether you’re new to programming or an experienced «.onj’acww*!!/ tn (earn and itv

Python source code and installers are available for download for all

Documentation tor Python’s standard library, along with tutorials

looking (or work or have a Python related position that you’re tryvtg to

Рис 3. Официальный сайт Python

Далее необходимо зайти в командную строку (В случае, если в качестве ОС используется один из дистрибутивов Linux — открыть терминал). Необходимо иметь интернет подключение для корректной работы. Вводим:

python3 -т pip install pyTelegramBotAPl

31 Вы’■

Downloading https://files■pvthonhosted.org/packaBes/62/ab/g9c686f69fcdaS7e35788b913dd34c9dgacb48dd263491^^ (65kB)

Collecting requests (from pyTelegramBotAPl)

Еще по теме:  Как сделать доступными комментарии в Telegram канале

Collecting six (from pyTelegramBotAPl)

Downloading https://files.pythonhosted.ong/packages/65/eb/lf97cb97bfc2390a276969c6fael6075da282f5058082d4cbl0c6c5cldba/six-l.14.8-py2.pyB-none-any.whl Collecting urllib3!=1.25.0,!=1.25.1,=1.21.1 (from requests->pyTelegramBotAPI)

Collecting chardet=3.0.2 (from requests->pyTelegramBotAPI) Downloading https://files.pythonhosted.ors/packages/bc/a9/98443b8/chardet-3.e.4-py2.py3-none-any.whl (133kB) I I 143kB 819kB/s

Collecting idna=2.5 (from requests->pyTelegramBotAPI) Downloading https://files.pythonhosted.Qrg/packages/89/e3/afebe61c546dl8fbl7Q9a61bee788254b4ae736cff7271c7de5de2dc4128/idna-2.9-py2.py3-none-any.whl (58kB) sikB

Collecting certifi>=2017.4.17 (from requests->pyTelegramBotAPI) Downloading https://files.pythonhosted.org/packages/b9/63/df50cac98ea0d5b006c55a399c3bfIdb9da7b5a24de7890bc9cfd5dd9e99/certifi-2019.11.28-py2.руЗ-попе-апу.whl (156kB)

Installing collected packages: urllib3, chardet, idnaj certifi, requests, six, pyTelegramBotAPl

Running setup.py install for pyTelegramBotAPl . done Successfully installed certifi-2019.11.28 chardet-3.0.4 idna-2.9 pyTelegramBotAPl-3.6.7 requests-2.23.0 six-1.14.0 urllib3-l.25.8

Рис 4 Результат загрузки pyTelegramBotAPI через командную строку

После завершения, открываем IDLE (Специальный встроенный IDE для написания программного кода на Python), создаем новый файл и прописываем следующее (Также возможно использовать IDE, как PyCharm, Visual Studio или же редакторы кода — Visual Studio Code, Sublime Text, Notepad++ и т.д. в связке с командной консолью): import telebot

def send welcome(message): bot.reply_to(message, «Howdy, how are you doing?»)

def echo_all(message): bot.reply_to(message, message.text)

Итак, мы прописали простого Telegram бота, который на ваше сообщение отвечает этим же сообщением, т.е. «эхо-бот».

3 гсроде «ечгеоагу’ра 13 градусов

Влажность воздуха 30% £ове-ы:

На улице прохпэлчо, оден=_есь сл€-ка потеплее

6:39:54 AM 6:39:55 AM 6:39:55 AM

Рис 5 Разработанный Telegram бот, дающий прогноз погоды, и исходя из нее дает советы

В данной статье мы рассмотрели концепцию Telegram ботов, историю их появления и способ их создания на языке программирования Python и специального модуля для него — pyTelegramBotAPI. Следует уточнить, что в последнее время актуальность использования и разработки Telegram ботов очень сильно возросла по сравнению с предыдущим годом. Можно сделать вывод, что это очень перспективное направление.

1. Общая информация про Telegram [Электронный ресурс]. — Режим доступа: https://en.wikipedia.org/wiki/Telegram_(software).

2. API на Python для создания Telegram бота [Электронный ресурс]. — Режим доступа: https ://github.com/eternnoir/pyTelegramBotAPI.

Источник: cyberleninka.ru

Как я Telegram бота на Go писал. Часть вторая. Прокачиваем бота.

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

В этот раз немного улучшим его: улучшим форматирование, добавим inline-режим и реализуем пару команд.

Улучшаем форматирование

Скажу сразу, что Telegram умеет в HTML и Markdown. Но, к сожалению, очень ограничено: если посмотреть документацию, то поддерживается только полужирное начертание, курсив, моноширинный шрифт и ссылки:

*полужирный* _курсив_ [ссылка](http://www.example.com/) `строчный моноширинный` «`text блочный моноширинный (можно писать код) «`
полужирный, полужирный курсив ссылка строчный моноширинный блочный моноширинный (можно писать код)

Лично мне больше по душе Markdown.

К счастью, библиотека, которую я использую для разработки бота так же умеет в HTML и Markdown.

Немного улучшим наши сообщения:

  1. Название заклинания будем отображать полужирным
  2. Курсивом добавим информацию про уровень заклинания, школу, класс, время действия и прочее
  3. Описание заклинания оставим обычным текстом

То есть сообщение будет выглядеть (в исходном виде) примерно так:

*Alter Self* *Level* _2_ *School* _T_ *Time* _1 action_ *Range* _Self_ *Components* _V, S_ *Duration* _Concentration, up to 1 hour_ *Classes* _Sorcerer, Wizard_ *Roll* _1d6+1_ You assume a different form. When you cast the spell, choose one of the following options, the effects of which last for the duration of the spell. While the spell lasts, you can end one option as an action to gain the benefits of a different one. Aquatic Adaptation: You adapt your body to an aquatic environment, sprouting gills, and growing webbing between your fingers. You can breathe underwater and gain a swimming speed equal to your walking speed. Change Appearance: You transform your appearance.

You decide what you look like, including your height, weight, facial features, sound of your voice, hair length, coloration, and distinguishing characteristics, if any. You can make yourself appear as a member of another race, though none of your statistics change. You also don’t appear as a creature of a different size than you, and your basic shape stays the same, if you’re bipedal, you can’t use this spell to become quadrupedal, for instance. At any time for the duration of the spell, you can use your action to change your appearance in this way again. Natural Weapons: You grow claws, fangs, spines, horns, or a different natural weapon of your choice.

Your unarmed strikes deal 1d6 bludgeoning, piercing, or slashing damage, as appropriate to the natural weapon you chose, and you are proficient with you unarmed strikes. Finally, the natural weapon is magic and you have a +1 bonus to the attack and damage rolls you make using it.

Еще по теме:  Как сделать кнопку Телеграмм в геткурсе

В общем — ничего сложного, правда?

Для того, чтобы отправить сообщение в Markdown-формате необходимо сказать об этом telegram-у при помощи свойства ParseMode структуры MessageConfig :

text := fmt.Sprintf( «*%s*n» + «*Level* _%v_n» + «*School* _%s_n» + «*Time* _%s_n» + «*Range* _%s_n» + «*Components* _%s_n» + «*Duration* _%s_n» + «*Classes* _%s_n» + «*Roll* _%s_n» + «%s», spell.Name, spell.Level, spell.School, spell.Time, spell.Range, spell.Components, spell.Duration, spell.Classes, strings.Join(spell.Rolls, «, «), strings.Join(spell.Texts, «n»)) msg := tgbotapi.NewMessage(update.Message.Chat.ID, text) msg.ParseMode = «markdown» bot.Send(msg)

Можно немного упороться и сделать дополнительную предобработку: вместо школы или компонент выводить текстовое название школы и компоненты, но оставим это на самостоятельное изучение — сейчас можно обойтись без этого.

Как мне кажется, выглядит довольно пристойно:

2016-10-08_23-57-20.png

inline боты

Я не буду рассказывать что это такое — можете посмотреть в документации. Вкратце — это штука позволяет обращаться к боту из любого чата telegram и отправить ответ бота в этот чат (или в приватный чат — если это реализовано в боте).

Для реализации этой функциональности в telegram-bot-api уже есть нужная функция: NewInlineQueryResultArticleMarkdown принимающая три параметра:

  1. id — идентификатор сообщения (толком не понял, для чего используется)
  2. title — текст, который будет отображаться в выпадающем списке
  3. messageText — ответ бота, если пользователь нажмёт на этот элемент списка.

Сделаем так: если в inline режиме что-то пишут боту — считаем это имя заклинания и находим всё подходящие и их описания. Далее отправляем весь список подходящих заклинаний и ждём действий пользователя.

Но для начала необходимо изменить код, который обрабатывает получение новых обновлений от telegram: при получении inline сообщения свойство update.Message не будет означено, вместо него будет получено update.InlineQuery и это необходим корректно обрабатывать:

if update.Message == nil update.InlineQuery != nil < // код для inline режима >else < // код для «обычного» режима >

ОК, добавим обработку inline сообщений:

query := update.InlineQuery.Query filteredSpells := Filter(spells.Spells, func(spell Spell) bool < return strings.Index(strings.ToLower(spell.Name), strings.ToLower(query)) >= 0 >) var articles []interface<> if len(filteredSpells) == 0 < msg := tgbotapi.NewInlineQueryResultArticleMarkdown(update.InlineQuery.ID, «No one spells matches», «No one spells matches») articles = append(articles, msg) >else < var i = 0 // добавим счётчик заклинаний, чтобы не показывать больше 10 for _, spell := range(filteredSpells) < text := fmt.Sprintf( «*%s*n» + «*Level* _%v_n» + «*School* _%s_n» + «*Time* _%s_n» + «*Range* _%s_n» + «*Components* _%s_n» + «*Duration* _%s_n» + «*Classes* _%s_n» + «*Roll* _%s_n» + «%s», spell.Name, spell.Level, spell.School, spell.Time, spell.Range, spell.Components, spell.Duration, spell.Classes, strings.Join(spell.Rolls, «, «), strings.Join(spell.Texts, «n»)) msg := tgbotapi.NewInlineQueryResultArticleMarkdown(spell.Name, spell.Name, text) articles = append(articles, msg) if i >= 10 < break >> > inlineConfig := tgbotapi.InlineConfig < InlineQueryID: update.InlineQuery.ID, IsPersonal: true, CacheTime: 0, Results: articles, >_, err := bot.AnswerInlineQuery(inlineConfig) if err != nil

  1. Вводим команду /setinline
  2. Выбираем DndSpellsBot
  3. Пишем сообщение, которое будет отображаться в качестве подсказки

2016-10-09_00-33-01.png

Снова запустим бота и попробуем обратиться к нему:

2016-10-09_01-17-00.png

Похоже, всё работает как надо.

Осталось добавить команды

Команды

Команда — особо сформированное сообщение боту. Всегда начинаются с / и длиной не более 32 символов. Имеют следующий вид:

/command [optional] [argument]

Добавим боту возможность фильтрации заклинаний только для определённого класса. Для этого будем использовать команду /setclass .

Имя класса будем выбирать на inline-клавиатуре.

2016-10-10_23-25-06.png

Во-вторых, необходимо в логике бота отличать команду от обычного сообщения. telegram-bot-api так же позволяет делать это довольно просто при помощи метода Command() входящего сообщения:

// Если сообщение — не команда, то Command() будет пустой строкой, // иначе — текст команды command := update.Message.Command() if command == «» < // Здесь логика для «обычных» сообщений >else < // Здесь — для команд >

Можно сделать просто — параметром к команде передавать имя класса. А можно воспользоваться возможностями мессенджера и показать пользователю список доступных классов в виде кнопок:

2016-10-14_08-21-36.png

Сделать это несложно (когда знаешь как делать):

switch command < case «setclass»: msg := tgbotapi.NewMessage(update.Message.Chat.ID, «Select your class») keyboard := tgbotapi.InlineKeyboardMarkup<>for _, class := range classes < var row []tgbotapi.InlineKeyboardButton btn := tgbotapi.NewInlineKeyboardButtonData(class, class) row = append(row, btn) keyboard.InlineKeyboard = append(keyboard.InlineKeyboard, row) >msg.ReplyMarkup = keyboard bot.Send(msg) >

В-третьих — запомним, по идентификатору пользователя, что он хочет получать заклинания для выбранного класса (для простоты — создадим map[int]string):

Еще по теме:  Easy win Телеграмм канал отзывы

// Перед функцие main добави наш словарь var classesMap map[int]string

В цикле обработки обновлений чата добавим обработку когда update.Message не означен, но есть update.CallbackQuery — ответ от inline-клавиатуры:

if update.CallbackQuery != nil

И, в-четвертых, нам необходимо учитывать этот класс в наших запросах на поиск заклинаний:

filteredSpells := Filter(spells.Spells, func(spell Spell) bool < class, ok := classesMap[update.Message.From.ID] classCond := true if ok < classCond = strings.Index(strings.ToLower(spell.Classes), strings.ToLower(class)) >= 0 > return strings.Index(strings.ToLower(spell.Name), strings.ToLower(query)) >= 0 classCond >)

Команду для очистки класса оставим на самостоятельную реализацию

Полный исходный код можно найти на bitbucket.

Источник: ashirobokov.wordpress.com

Самообучаемый чат-бот python, который умеет искать ответы в Wikipedia

Давно хотел сделать своего собственного Jarvis. Недавно удалась свободная минутка и я его сделал. Он умеет переписываться с Вами, а также искать ответы на Ваши вопросы в Wikipedia. Для его реализации я использовал язык Python.

Для начала установим все необходимые библиотеки. Их три: pyTelegramBotAPI, scikit-learn, а также Wikipedia. Устанавливаются они просто:

pip install pyTelegramBotAPI
pip install Wikipedia
pip install scikit-learn

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

import telebot, wikipedia, re from sklearn.feature_extraction.text import CountVectorizer from sklearn.linear_model import LogisticRegression wikipedia.set_lang(«ru») bot = telebot.TeleBot(‘Ваш ключ, полученный от BotFather’)

Теперь напишем код, для очистки всех ненужных нам знаков, которые вводит пользователь:

def clean_str(r): r = r.lower() r = [c for c in r if c in alphabet] return ».join(r) alphabet = ‘ 1234567890-йцукенгшщзхъфывапролджэячсмитьбюёqwertyuiopasdfghjklzxcvbnm?%.,()!:;’

Также Вам необходимо создать в папке, где находится Ваш код файл dialogues.txt, в нем мы будем создавать реплики на которые должен отвечать бот. Вот пример данного файла:

привет как делахорошо. кто тыя Джарвис.

Строка до знака означает вопрос пользователя, а после ответ нашего бота. После чего напишем такой код в наш файл с ботом:

def update(): with open(‘dialogues.txt’, encoding=’utf-8′) as f: content = f.read() blocks = content.split(‘n’) dataset = [] for block in blocks: replicas = block.split(‘\’)[:2] if len(replicas) == 2: pair = [clean_str(replicas[0]), clean_str(replicas[1])] if pair[0] and pair[1]: dataset.append(pair) X_text = [] y = [] for question, answer in dataset[:10000]: X_text.append(question) y += [answer] global vectorizer vectorizer = CountVectorizer() X = vectorizer.fit_transform(X_text) global clf clf = LogisticRegression() clf.fit(X, y) update()

Этот кусок кода читает файл dialogues.txt, потом превращает реплики в так называемые вектора, с помощью которых наш бот будет искать наиболее подходящий ответ к заданному нами вопросу. Например, если Вы написали в файле dialogues.txt вопрос «Ты знаешь Аню», а ответ на него «Да, конечно», то бот будет отвечать также и на похожие вопросы, например «Ты знаешь Васю».

Теперь напишем кусок кода, который будет генерировать ответы на основе векторов:

def get_generative_replica(text): text_vector = vectorizer.transform([text]).toarray()[0] question = clf.predict([text_vector])[0] return question

Этот кусок кода принимает вопрос от пользователя и возвращает ответ от бота.

Теперь напишем функцию для поиска информации в Википедии:

def getwiki(s): try: ny = wikipedia.page(s) wikitext=ny.content[:1000] wikimas=wikitext.split(‘.’) wikimas = wikimas[:-1] wikitext2 = » for x in wikimas: if not(‘==’ in x): if(len((x.strip()))>3): wikitext2=wikitext2+x+’.’ else: break wikitext2=re.sub(‘([^()]*)’, », wikitext2) wikitext2=re.sub(‘([^()]*)’, », wikitext2) wikitext2=re.sub(‘<[^<>]*>’, », wikitext2) return wikitext2 except Exception as e: return ‘В Википедии нет информации об этом’

Этот кусок кода получает вопрос пользователя, потом ищет ответ на него в Википедии и если ответ найден, то отдает его пользователю, а если ответ не найден, то пишет, что «В Википедии нет информации об этом».

Теперь пишем последний кусок кода:

В этом куске кода телеграмм бот при получении сообщения от пользователя отвечает на него и если ответ не верный, то пользователь пишет «не так». Если бот получает сообщение «не так», то он берет последний вопрос пользователя и спрашивает «а как?», после чего пользователь должен отправить ему правильный ответ. После этого бот обновляет свою базу данных вопросов и ответов и при следующих вопросах пользователя отвечает на них правильно. И если ответ на вопрос бот должен был взять из Википедии, то пользователь в ответ на вопрос «а как?», должен написать «wiki». Осталось в конце приписать строчку:

bot.polling(none_stop=True)

И можно запускать и тестировать бота.

Весь код файла с ботом прилагаю ниже:

Надеюсь, статья Вам понравилась 🙂

Источник: temofeev.ru

Рейтинг
( Пока оценок нет )
Загрузка ...