Бот для заметок в Телеграмм код

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags

Nothing to show

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

  • Local
  • Codespaces

HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

БОТ Телеграм | Фильм по коду | Функционал пользователя

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Источник: github.com

Telegram-бот на Python для создания задач в MS Outlook и заметок в Evernote

В MS Outlook есть прекрасный раздел задач. Это удобно и быстро. Можно с утра (или с вечера) накидать себе задачек на день и постепенно расщёлкивать их. Вторым уровнем группируем задачи по матрице Эйзенхауера или используем любой другой удобный вам инструмент тайм-менеджмента.

Одна проблема с этими задачами: для их создания надо заходить в Outlook, щёлкать, писать, нажимать Enter, двигать в нужную группу. Это всё долго и не всегда удобно. Но есть в Outlook также правила, позволяющие письма содержащие определённые слова в теме автоматически делать задачами. Ещё быстрее и проще получится, если такие письма отправляются прямо из Telegram. О простейших ботах помогающих создавать задачи в MS Outlook и заметки в Evernote без необходимости сложных интеграций.

Бот: Telegram + Python + Docker

Строго говоря ботов два. Пока не получилось совместить весь функционал в одном боте так, чтобы это было удобно как переслать/накидать сообщение и нажать на кнопку «Send». Немного о стеке. Python был выбран за простоту кода и доступность для менеджеров проектов без глубоких познаний в программировании.

Еще по теме:  Каналы Телеграмм с незаконным контентом

Docker — удобно упаковать бота в контейнер и запускать в нём, без необходимости думать о версиях Linux на хостинге, настройках сервисов и так далее. В качестве хостера использовался DigitalOcean, в котором Docker-контейнеры разворачиваются легко и просто.

Конечно же использовался не чистый Telegram API, а удобный telebot. Для отправки писем вполне подошла стандартная библиотека smtplib. Для сокращения текста используется textwrap. А формированием сущности сообщения занимается тоже стандартная email.mime:

Пишем Телеграм Бота для Автопостинга новостей с Хабра | Телеграм бот + Парсер


import os import telebot import smtplib import textwrap from email.mime.text import MIMEText

Пароли в контейнер кладём аккуратно. Чтобы не хранить их открытым текстом в исходнике, используем переменные окружения:

#Configuration CFG_TOKEN = os.environ.get(‘CFG_TOKEN’) #TELEGRAM_BOT_TOKEN CFG_SMTP_LOGIN = os.environ.get(‘CFG_SMTP_LOGIN’) #’%YOUR_SMTP_LOGIN_ON_YANDEX%’ CFG_SMTP_PASS = os.environ.get(‘CFG_SMTP_PASS’) #’%YOUR_SMTP_PASS_ON_YANDEX%’ CFG_SMTP_FROM = os.environ.get(‘CFG_SMTP_FROM’) #’%FROM_EMAIL_ADDRESS%’ CFG_SMTP_TO = os.environ.get(‘CFG_SMTP_TO’) #’%TO_EMAIL_ADDRESS%’

При запуске Docker-контейнера берём переменные откуда нам удобно, например из файла .env или переменной окружения на хостовой машине.

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

try: CFG_OWNER_ID = int(os.environ.get(‘CFG_OWNER_ID’)) #YOUR_USER_ID_IN_TELEGRAM except: CFG_OWNER_ID = os.environ.get(‘CFG_OWNER_ID’)

Собственно письмо формируем по следующему алгоритму. Если текста сообщения менее или равна 40 символам, то помещаем его целиком в тему письма, а в теле пишем стандартный текст. Если более — помещаем первые 40 символов, а остаток кладём в тело письма. Это точно позволяет обойти какие-то правила антиспам-фильтра Яндекса, который использовался для рассылки сообщений.

msg = MIMEText(») if len(txt) > 40: txt = textwrap.shorten(txt, width=40, placeholder=». «) #Лишнее обрезаем тремя точками msg = MIMEText(message.text) else: msg = MIMEText(«Задача из Telegram»)

Если пересылаем сообщение другого пользователя (например, начальника) и делаем его сообщение задачей, то подсвечиваем в теме письма имя нашего контакта:

if «forward_sender_name» in message.json: txt = f'[] ‘ elif «forward_from» in message.json: txt = f'[] ‘

Метим наше сообщение в теме как «[TASK]», чтобы MS Outlook мог его отличить от обычных писем и обработать правилами:

msg[‘Subject’] = f'[TASK] ‘

Далее стандартно отправляем наше письмо, не забывая вернуть сообщение с успехом или ошибкой при отправке:

try: server = smtplib.SMTP_SSL(‘smtp.yandex.ru:465’) server.login(CFG_SMTP_LOGIN, CFG_SMTP_PASS) server.sendmail(CFG_SMTP_FROM, CFG_SMTP_TO, msg.as_string()) bot.send_message(message.from_user.id, «Задача отправлена в Outlook») server.quit() except Exception as err: bot.send_message(message.from_user.id, f»При отправке сообщения произошла ошибка: «)

Настройка MS Outlook

Правила MS Outlook настраиваются просто:

А как отправлять заметки в Evernote?

Для того, чтобы была возможность отправить сообщение в бота, которое автоматом станет заметкой в Evernote нужно написать код чуть по сложнее. Принцип тот же: отправляем сообщение, которое потом превращается в e-mail отправляемый на специальный адрес. Все письма поступающие по этому адресу становятся заметками.

Еще по теме:  Как записать свой канал в Телеграмме красиво на английском

Ключевой момент здесь — обработка типов сообщений и вложений. Определяем функции-обработчики для различных типов сообщений Telegram:

Пересылаемые фотографии и документы обязательно надо закешировать прежде чем их можно будет вложить в E-mail. Суть функции одна, поэтому привожу её только для фото:

def cachFile(file_info): dt = datetime.datetime.now() timestamp = dt.timestamp() downloaded_file = bot.download_file(file_info.file_path) ext = os.path.split(file_info.file_path)[1].split(‘.’)[1] cached_file_name = str(timestamp) + ‘.’ + ext src = tempfile.gettempdir() + os.path.sep + cached_file_name with open(src, ‘wb’) as new_file: new_file.write(downloaded_file) return src def getPhotoCached(message): cached_files = [] ff = message.photo[-1] file_info = bot.get_file(ff.file_id) asrc = cachFile(file_info) cached_files.append(asrc) return cached_files if _is_photo(message): #Photo handler cached_files = getPhotoCached(message) #Attach into e-mail for f in cached_files: with open(f, ‘rb’) as file: msg.attach(MIMEImage(file.read()))

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

if len(txt) > 30: txt_subject = textwrap.shorten(txt, width=30, placeholder=». «) elif len(txt) == 0: #Стандартный заголовой для заметок без текста включает «Из Telegram», текущую дату и время now = datetime.datetime.now() txt_subject = ‘Из Telegram ‘ + str(now) else: txt_subject = txt msg[‘Subject’] = f’ # #из_telegram’

Процесс отправки e-mail стандартный и описан выше.

Источник: habr.com

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

Author's picture

В этой серии заметок хотел бы немного коснуться данной темы. Серия будет включаться в себя три раздела:

  1. Разработка бота на Go для поиска заклинаний для Dungeon And Dragons
  2. Публикация бота на платформе heroku
  3. Добавление аналитики использования бота

Итак, начнём!

go get gopkg.in/telegram-bot-api.v4

И, наконец-то, в-пятых, написать код самого бота.

config.json

Создадим пустой Go-файл dndspellsbot.go в папке dndspellsbot. Туда же добавим конфигурационный файл config.json со следующим содержимым:

Конечно же, можно обойтись без этих усложнений и зашить токен прямо в коде бота, но в случае, если вы случайно зальетё код вашего бота в какой-то публичный репозиторий на github/bitbucket/whatever, то утечёт и токен, а это, согласитесь, неприятно. И это только сейчас у нас такой простой конфиг — в дальнейшем будут добавляться новые свойства и всё будет храниться в одном месте. Удобно, согласитесь? Получить этот токен из конфигурационного файла довольно просто стандартными средствами Go:

package main import ( «fmt» «gopkg.in/telegram-bot-api.v4» «log» «os» «encoding/json» ) type Config struct < TelegramBotToken string >func main() < file, _ := os.Open(«config.json») decoder := json.NewDecoder(file) configuration := Config<>err := decoder.Decode( log.Panic(err) >fmt.Println(configuration.TelegramBotToken) >

Еще по теме:  Пул первого Телеграмм что это

Теперь при добавлении в config.json новых свойств и модификации структуры Config можно получать необходимые параметры конфигурации.

ping?

В репозитории telegram-bot-api есть пример echo-бота — бота, который отвечает вам те же сообщением. Возьмём его за основу:

bot, err := tgbotapi.NewBotAPI(configuration.TelegramBotToken) if err != nil < log.Panic(err) >bot.Debug = false log.Printf(«Authorized on account %s», bot.Self.UserName) u := tgbotapi.NewUpdate(0) u.Timeout = 60 updates, err := bot.GetUpdatesChan(u) if err != nil < log.Panic(err) >// В канал updates будут приходить все новые сообщения. for update := range updates < // Создав структуру — можно её отправить обратно боту msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.Text) msg.ReplyToMessageID = update.Message.MessageID bot.Send(msg) >

2016-10-03_21-46-08.png

Вы уже добавила вашего бота в свой список контактов? Если нет — сейчас самое время. Теперь самое интересное — запускаем наше приложение командой go run dndspellsbot.go и пишем что-нибудь нашему боту. Если всё сделано правильно, то бот ответит вам вашим же сообщением: Однако, мы хотели не этого. Опустим подробности парсинга XML — пост не об этом (полный код можно будет найти по ссылке в конце статьи). Будем считать, что у нас есть слайс всех заклинаний и любой запрос пользователя к боту — это запрос на поиск подходящего заклинания по его имени (усложнять можно бесконечно, но на данный момент этого достаточно):

. query := update.Message.Text // Получим те заклинания, в имени которых есть искомое слово или фраза filteredSpells := Filter(spells.Spells, func(spell Spell) bool < return strings.Index(strings.ToLower(spell.Name), strings.ToLower(query)) >= 0 >) // Если не нашлось ни одного заклинания — скажем об этом пользователю if len(filteredSpells) == 0 < msg := tgbotapi.NewMessage(update.Message.Chat.ID, «No one spells matches») bot.Send(msg) >// Каждое заклинание отправляем отдельным сообщением for _, spell := range(filteredSpells) < text := «» for _, t := range(spell.Texts) < text = text + t + «n» >msg := tgbotapi.NewMessage(update.Message.Chat.ID, fmt.Sprintf(«%sn%s», spell.Name, text)) bot.Send(msg) > . // Функция фильтрации слайсов func Filter(spells []Spell, fn func(spell Spell) bool) []Spell < var filtered []Spell for _, spell := range(spells) < if fn(spell) < filtered = append(filtered, spell) >> return filtered >

Теперь, при любом запросе от пользователя, бот будет возвращать все подходящие заклинания из phb.xml . В следующей статье немного улучшим нашего бота: добавим форматирование сообщений, inline-режим и добавим пару команд. Код бота можно найти на bitbucket.

Если вам понравилась статья, то можете зайти в мой telegram-канал. В канал попадают небольшие заметки о Python, .NET, Go.

Источник: makesomecode.me

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