код на python для бота телеграмм погода
Простой Telegram-бот на Python за 30 минут
На Хабре, да и не только, про ботов рассказано уже так много, что даже слишком. Но заинтересовавшись пару недель назад данной темой, найти нормальный материал у меня так и не вышло: все статьи были либо для совсем чайников и ограничивались отправкой сообщения в ответ на сообщение пользователя, либо были неактуальны. Это и подтолкнуло меня на написание статьи, которая бы объяснила такому же новичку, как я, как написать и запустить более-менее осмысленного бота (с возможностью расширения функциональности).
Часть 1: Регистрация бота
Самая простая и описанная часть. Очень коротко: нужно найти бота @BotFather, написать ему /start, или /newbot, заполнить поля, которые он спросит (название бота и его короткое имя), и получить сообщение с токеном бота и ссылкой на документацию. Токен нужно сохранить, желательно надёжно, так как это единственный ключ для авторизации бота и взаимодействия с ним.
Часть 2: Подготовка к написанию кода
Как уже было сказано в заголовке, писать бота мы будем на Python’е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести
После, в терминале Linux, или командной строке Windows вводим
Теперь все готово для написания кода.
Часть 3: Получаем сообщения и говорим «Привет»
Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll’ом.
Открывайте ваш любимый текстовый редактор, и давайте писать код бота!
Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:
Теперь объявим метод для получения текстовых сообщений:
В этом участке кода мы объявили слушателя для текстовых сообщений и метод их обработки. Поле content_types может принимать разные значения, и не только одно, например
Будет реагировать на текстовые сообщения, документы и аудио. Более подробно можно почитать в официальной документации
Теперь добавим в наш метод немного функционала: если пользователь напишет нам «Привет», то скажем ему «Привет, чем я могу помочь?», а если нам напишут команду «/help», то скажем пользователю написать «Привет»:
Данный участок кода не требует комментариев, как мне кажется. Теперь нужно добавить в наш код только одну строчку (вне всех методов).
Теперь наш бот будет постоянно спрашивать у сервера Телеграмма «Мне кто-нибудь написал?», и если мы напишем нашему боту, то Телеграмм передаст ему наше сообщение. Сохраняем весь файл, и пишем в консоли
Где bot.py – имя нашего файла.
Теперь можно написать боту и посмотреть на результат:
Часть 4: Кнопки и ветки сообщений
Отправлять сообщения это несомненно весело, но ещё веселее вести с пользователем диалог: задавать ему вопросы и получать на них ответы. Допустим, теперь наш бот будет спрашивать у пользователя по очереди его имя, фамилию и возраст. Для этого мы будем использовать метод register_next_step_handler бота:
И так, данные пользователя мы записали. В этом примере показан очень упрощённый пример, по хорошему, хранить промежуточные данные и состояния пользователя нужно в БД, но мы сегодня работаем с ботом, а не с базами данных. Последний штрих – запросим у пользователей подтверждение того, что все введено верно, да не просто так, а с кнопками! Для этого немного отредактируем код метода get_age
И теперь наш бот отправляет клавиатуру, но если на нее нажать, то ничего не произойдёт. Потому что мы не написали метод-обработчик. Давайте напишем:
Остаётся только дописать в начало файла одну строку:
Вот и всё, сохраняем и запускаем нашего бота:
Погода-бот: DialogFlow + OpenWeather + Python
Постановка задачи
Задача ставилась следующим образом: написать телеграм-бота, который распознавал бы вопросы о том, какая сегодня погода в том или ином городе и выдавал информацию о погоде.
DialogFlow
Для распознавания человеческой речи как нельзя лучше подходит фреймворк DialogFlow, уже имеющий встроенный в него ML. Давайте приступим к работе.
Переходим по ссылке https://dialogflow.cloud.google.com/, авторизуемся в своем аккаунте гугл и переходим на страницу создания бота. Нажимаем на «Create new agent» и вводим имя агенту: «weather-bot». Выбираем дефолтный язык русский.
Основной объект, с которым работает DialogFlow — интенты или намерения. При взаимодействии с ботом всегда срабатывает то или иное намерение, и задача вас как разработчика — сопроводить каждое намерение разнообразными тренировочными фразами, чтобы бот каждый раз максимально правильно угадывал тот или иной интент.
Итак, переходим во вкладку «Intents». При создании бота автоматически создаются два интента: «Default Fallback Intent» и «Default Welcome Intent». Welcome Intent вызывается тогда, когда происходит запуск бота либо вы пишете ему приветственное сообщение. Fallback вызывается во всех случаях, когда бот не понимает, что вы ему пишете, т.е. во всех случаях, когда ни один другой интент не срабатывает. Оставляем дефолтные интенты без изменений и жмем на «Create intent», называя его «get-weather». Именно с этим намерением мы и продолжим работать в данной статье.
Переходим в наш интент «get-weather», затем — во вкладку «Training phrases» и создаем несколько тренировочных фраз, например, таких:
Заметим, что DialogFlow автоматически определяет города как параметры location. Это очень удобно, поскольку мы будем передавать эти самые параметры в бэкенд нашего приложения.
В самом DialogFlow осталось сделать совсем немного — разрешить ему вебхуки для взаимодействия с бэкендом нашего бота. Для этого листаем в самый низ, разворачиваем вкладку «Fulfillment» и ставим галочку на «Enable webhook call for this intent».
Приступим к написанию серверной части нашего бота. Писать будем на Python в связке с Flask. Для получения информации о погоде был выбран OpenWeather API. Зарегистрируйтесь на этом сайте, затем вам на почту придет API KEY — он и понадобится в нашем приложении. Кроме того, поскольку информация о погоде в этом API выдается по параметрам latitude и longitude — ширина и долгота — нам необходимо как-то преобразовывать город в его ширину и долготу. В этом нам поможет Python-библиотека geopy.
Импортируем все необходимое:
Создаем Flask application:
и вставляем в переменную API_KEY свой API KEY:
Пишем роут для пути «/»:
и далее функцию results(), в которой и будет осуществлена вся логика программы:
Осталось дописать роут, по которому будет переход в наше приложение, назовем его webhook:
и запустить приложение:
И это все?
Не совсем. Программа лежит на нашей локальной машине, но DialogFlow о ней ничего не знает. Чтобы превратить нашу машину в сервер, который станет доступен в интернете, нужна особая утилита. Этим требованиям соответствует ngrok. Скачиваем ее, запускаем и вводим в консоли следующее: «ngrok http 5000». Появится https-ссылка, которую необходимо скопировать и поместить в DialogFlow. Копируем, переходим в Fulfillment в DialogFlow, ставим Webhook в состояние enabled и вставляем в получившееся поле ссылку. Дописываем роут, т.е. «/webhook». Должно получиться что-то похожее на следующее:
Теперь запускаем наше Python-приложение. Осталось совсем немного — подключить интеграцию с Telegram. Переходим на вкладку «Integrations», выбираем телеграм, далее следуем инструкции по получению токена, вставляем токен, и вуаля — приложение готово! Остается его протестировать:
Надеюсь, данная статья была вам полезна и сподвигнет на собственные эксперименты в этой области. Код проекта доступен по ссылке.
Телеграм-бот погоды
Доброго времени суток, друзья. В общем сделал я бота и захотел, чтобы при слове привет от пользователя бот выдавал одну фразу, а при слове пока другую. Я всё это прописал, но вылазит ошибка якобы ресурс не найден. (Это если пишу пока) Если пишу привет, он выдаёт мою фразочку и погоду в городе привет(хз что это за город) У меня вопрос в том, как сделать так чтобы когда пишешь боту привет и пока он не искал инфу о погоде а просто писал тебе мои запрограммированные фразочки?
import random
import pyowm
import telebot
owm_ru = pyowm.OWM(‘6040159249e4cef8bc7f28a713e725f0′, language=’ru’)
bot = telebot.TeleBot(«1122122246:AAECsMx0G3i-h0SdGM4GbtUUcpvRXzJomuQ»)
@bot.message_handler(commands=[‘start’])
def start_message(message):
bot.send_message(message.chat.id, ‘Выбирай что хочешь узнать’, reply_markup=keyboard1)
@bot.message_handler(commands=[‘start’])
def start_message(message):
bot.send_message(message.chat.id, ‘Привет. Вводи город или страну для того, чтобы узнать погоду’)
weath = [‘На улице пипец, лучше сиди дома’,’Ну, и куда ты намылился в такую погоду?»’,’Доставай валенки, мы идём гулять’]
weath2 = [‘На улице норм, можешь выходить и особо не утепляться’,’Прохладно, надевай что-нибудь от ветра’,’Полёт нормальный, косуха в самый раз’]
weath3 = [‘На улице очень жарко, можешь выходить в трусах’,’Жарево, выходи в футболке’, ‘Солненчо и душно, как в Египте’]
@bot.message_handler(content_types=[‘text’])
def send_text1(message):
observation = owm_ru.weather_at_place(message.text)
w = observation.get_weather()
temp = w.get_temperature(‘celsius’)[«temp»]
answer = ‘ В городе / стране ‘ + message.text + ‘ сейчас ‘ + w.get_detailed_status() + «\n»
answer += ‘Температура составляет ‘ + str(temp) + «\n——————————————-\n»
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Простой Telegram-бот на Flask с информированием о погоде
Всем привет, в этой статье я расскажу как сделать простейшего телеграмм бота на Python для отправки текущей погоды в Москве.
Статья расчитана на новичков в Python, которые бы хотели узнать больше о том, как взаимодействовать с внешними сервисами по API.
Как все будет работать?
Регистрация телеграмм бота
На этом этапе нам нужно создать бота и получить к нему доступы. Для этого запускаем бота botfather в Telegram командой ниже.
Создаем нового бота согласно инструкциям из сообщения от бота.
!
Бот создан, но если ему написать какое-нибудь сообщение, он никак на него не отреагирует. Исправим это.
Справка о Flask
Flask — фреймворк для создания веб-приложений на языке программирования Python, использующий набор инструментов Werkzeug, а также шаблонизатор Jinja2. Относится к категории так называемых микрофреймворков — минималистичных каркасов веб-приложений, сознательно предоставляющих лишь самые базовые возможности.
Поддерживается установка посредством пакетного менеджера PyPI, версия 1.0 совместима с Python 2.7, Python 3.3 и выше.
Установка Flask
Для изоляции зависимостей пакетов Python создадим папку проекта и виртуальное окружение. Для этого в терминале выполним команды ниже. Подробнее о виртуальных окружениях.
После завершения установки и активации виртуального окружения установим Flask.
Подробнее на странице Installation.
Запуск простейшего приложения Flask
В директории weather_bot создадим файл app.py с содержимым.
Запустим полученное приложение.
Перейдем по адресу http://127.0.0.1:5000/ и убедимся, что отображается текст «Hello, World!».
Подробнее на странице Quickstart.
Создание туннеля к localhost с помощью ngrok
Ngrok — это сервис, позволяющий создавать туннели на локальный компьютер пользователя.
Получение сообщений из телеграмм бота
Для того, чтобы Telegram пересылал сообщения на наш сервер, нужно сообщить ему адрес. У нас уже создан туннель, поэтому передадим адрес туннеля в Telegram. Это делается с помощью метода POST setWebhook. Подробнее на странице документации.
где
Подробнее о cURL на странице wiki.
Если получен ответ «ok»: true, то все в порядке.
Проверим, что сообщения доходят до нашего локального сервера. Для этого в файле app.py обновим код.
Перезапустим Flask. Для этого остановим сервер из терминала комбинацией клавиш Ctrl+C и повторно запустим его.
Отправим нашему боту сообщение с произвольным текстом. В консоли должно отобразиться тело запроса из Telegram. Это признак того, что все в порядке.
!
Ответ на сообщения пользователей
Мы научились получать сообщения от пользователей, но еще не умеем их отправлять. Для проверки отправки сообщений будем отвечать текстом «pong» на все сообщения.
Для отправки сообщений пользователям в API Telegram используется метод sendMessage. Подробнее на странице документации.
Запросы будем делать с помощью библиотеки requests, которой нет в списке стандартных, поэтому установим ее. Для этого в терминале с активированным виртуальным окружением выполним команду нижу.
Для отправки сообщений нам нужно знать id чата. Его можно вытащить из тела Telegram-запроса.
Напишем функцию для отправки сообщений, в которую будем передавать id чата и текст сообщения.
Подробнее о библиотеке requests на странице.
Вот так выглядит код в файле app.py
Отправка пользователю информации о погоде
Используем метод current Weatherstack API для получения информации о погоде.
Передадим 2 обязательных Query Params: access_key — секретный ключ вида 86a3fe972756lk34a6a042bll348b1e3, который можно получить после регистрации, и query — город, по которому получаем информацию о погоде, в нашем случае — Moscow.
Подробнее на странице документации.
Внутри функции receive_update() вместо сообщения с текстом «pong» передадим погоду.
Код всего Flask-приложения состоит из 3 функций: получения сообщений из Telegram, отправка сообщений в Telegram и получение информации о погоде из Weatherstack.
Вот и всё! Таким несложным образом мы научили наш бот информировать нас о погоде в Москве.
Знаю, каждый Python программист уже создавал сотню разных Tg-ботов, тема уже заезженная, не актуальная, но этот бот писался для себя, имею под рукой vds сервер, есть возможность развернуть, так что… Могу и буду!
1. Мониторить погоду с какого-нибудь хорошего источника
2.Получать инфу через запрос
3.Хочу знать погоду на конкретной геолокации
4.Выводить погоду в телегу в «нескучном виде» ( текст глаза режет )
1.Получил информацию с помощью сервиса openweather.
2.Далее указал параметры в которых меня интересует погода
Дубликаты не найдены
Программирование на python
209 постов 7.1K подписчиков
Правила сообщества
Публиковать могут пользователи с любым рейтингом. Однако!
• уважение к читателям и авторам
• простота и информативность повествования
• тег python2 или python3, если актуально
• код публиковать в виде цитаты, либо ссылкой на специализированный сайт
• допускать оскорбления и провокации
• распространять вредоносное ПО
• просить решить вашу полноценную задачу за вас
Я написал это все в своего бота, изменив координаты и апи, у меня почему-то выдает температуру меньше, чем показывает сайт, он показывает +16, а выдает +13, непонятно..
Для таких простых ботов можно и бессерверные вычисления какие-нибудь использовать, AWS Lamba типа или Яндекс Cloud Functions ( https://cloud.yandex.ru/services/functions ), у гугла тоже что-то подобное должно быть.
У меня бот который просто сообщения озвучивает висит в яндексе.
На баше простой скрипт написан в несколько строк.
Если просто для маленького бота, то есть бесплатный Oracle Always Free: 1/8 ядра, 1Гб оперативки, 50Гб диска — и таких недовиртуалок дают две.
Делюсь своим погодным ботом без уведомлений
Последние полгода в свободное время писал погодного бота.
Возможно, бот будет полезен на устройствах с небольшим количеством памяти.
Основная идея была в том чтобы бот не присылал ни одного уведомления,
вместо этого он обновляет сообщения с прогнозом.
Интересно ваше мнение, предложения, критика.
Ключевые особенности бота:
✅ Присылает 3 сообщения с погодой (на 7 дней, сегодня, сейчас)
✅ Редактирует сообщения («7 дней» и «сегодня» раз в сутки; «сейчас»: каждый час)
✅ В любой момент можно отправить название города,
бот пришлет погоду в этом городе
✅ Если населенных пунктов с таким названием несколько,
бот пришлет варианты с мини картой на выбор
✅ Можно создать виджет на рабочем столе
Так выглядит прогноз:
🪁- ветер и его направление
Себе добавил вот такой удобный виджет.
Работает как на Android так и на iOS.
1) Долгий тап по пустому месту на рабочем столе
2) Появляются доп. настройки
3) Нажать «виджеты», найти раздел «Telegram»
4) Выбрать виджет 4×2
5) В настройках виджета выбрать чат с ботом
Благодарю за внимание!
Ps: готов к критике, отзывам, улучшениям
Можно также писать на почту: weatherisbot@gmail.com
Вопрос исчерпан
Как я не стала программистом
Да, я мало игралась с куклами в детстве, больше интересовало смотреть, как отец что-то паяет, как пустые гильзы превращаются в его руках в патроны, как он сам чинит кашляющий Днепр.
Видимо, этим и был подарок обусловлен. Это было году в 92, наверное, точно не раньше.
Это был единственный и первый компьютер на всю округу, мы тогда жили в поселке. Хз, в соседних городах компьютеры уже, наверное, у кого-то и были. Но тогда взрослые мужики приходили к отцу посмотреть на него, поцокать, потом сесть пить пиво.
Потом уже были IBM, и прочие. Программирование было забыто благополучно.
Ну разве что до сих пор пригождается небольшое знание php и всякого там по сайтам.
А недавно ребенок на днюху запросил себе книгу по Python. Хочу, говорит, программировать.
Да, к своим десяти он ловко ворочает в фотошопе и КорелДро, Скретч юзает с первого класса, но загорелся настоящим программированием.
И на днюху он таки получил книгу.
Вчера установила Пайтон, сегодня села с ним поразбирать, чо да как.
А суть та же. Прошибло реально почти до слез. Вспомнила вмиг и своего лыжника с убогими ёлками, лично прорисованными. И торчание за компом ночами.
Какая-то петля времени прям)
Как показывать, что много работал на удалёнке
Телеграмм Бот для пинга сервера
Добрый день господа.
Долго искал бота для телеги, дабы слал сообщения когда сервак ляжет.
Но нашёл готовые варики, где нужно реально поебатся
Поэтому сделал свой варик
всё что нам нужно это:
1 установить питон
2 ввести в cmd(консоль) «pip install pyTelegramBotAPI» установит APi для поддержки питона Бота от телеги
3 ввести в cmd(консоль)»pip install ping3″ установить api для поддержки пинговки сервера
4 скачать два файла bot.py и config.py
5 регаем своего бота у BotFather в телеграмм, инструкцию тоже легко найти
6 открываем config.py программой notepad++ вводим туда токен полученый у BotFather для вашего бота
7 получаем id своего телеграмма у бота userinfobot
7 открываем bot.py редактируем как вам нужно, внутри комментарии как заполнять. а так-же свой id вводим заместо 3333333
Бот постоянно будет показывать(каждые 240 секунд) 0 0 когда работает в консоле, а так же
будет выводить в консоль текст, офлайн или онлайн
ВАЖнО. Оба файлы должны находится в одной папке!
Разворачиваем Django приложение в Docker контейнере
Привет, Pikabu. Когда разворачивал своё первое настоящее Django приложение в интернете потратил кучу времени на изучение всех необходимых технологий. А когда работа была закончена, осознал, что через месяц не буду помнить и половины того, что узнал и как делал. Петому решил набросать для себя небольшую шпаргалку, затем немного заморочился, красиво оформил и решил поделиться с вами. Может кому пригодится.
Вот ссылка на репозиторий: https://github.com/YuriyCherniy/how-to-dockerize-django-app в котором лежит тестовое приложение на Django с инструкцией. Пройдя все шаги, пользователь получит приложение, завёрнутое в Docker контейнер, подключённое к базе данных Postgres, настроенный Nginx в качестве обратного прокси и раздающий статические файлы, а также SSL сертификат для домена.
Буду рад в помощи по улучшению руководства. Пишите какие места непонятны, может где-то можно, что-то сделать эффективней, где-то оптимальней, где-то безопасней и т.д и т.п.
Моя хранилка ссылок на Django с парочкой особенностей
Привет, Pikabu! Продолжаю учить Python и Django. После своего перового игрушечного проекта захотелось сделать, что-то настоящее, что будет работать в интернете. Но, что? Навыки еще слабые, нужно придумать, что-то не сложное и в то же время хоть немного интересное для себя и возможно ещё кого-то. Немного поразмыслив над идеями, остановился на сервисе хранения закладок. Логика работы сервиса обещала быть не сложной, на этом и остановился. Первый результат работы можно заценить здесь: linky.su Регистрация не требуется, достаточно авторизации через Google, Yandex или VK. Электронные почты не собираю.
Проект хоть и не сложный, но помог мне углубить знания Django, так как Generic Class Based View перестали решать мои задачи. Познакомился с рядом полезных библиотек, немного попарсил сайты с помощью beautifulsoup, научился работать с авторизацией через сторонние сервисы, разобрался с хранением чувствительных данных в переменных окружения. Познакомился с sentry и попутно поработал с логированием. Углубился в тестирование, научился работать с mock объектами. Стало страшно все сломать даже небольшим изменением кода. С тестами реально спокойней жить. Из смежных технологий научился работать с Postgres и Nginx, завернул приложение в Docker, управляю контейнером через docker-compose.
Спасибо за внимание, кому любопытно поюзайте немного, а я посмотрю на ворох ошибок, которые вы мне сгенерируете =) Код пока не выкладываю в открытый доступ, что-то я стесняюсь. Может позже, когда буду более уверенным в его правильности.
С это серый кардинал все языков
Какой ты сегодня?
Если понравился пост, заходите к нам в инстаграм: instagram.com/fiztehscience
Фильмы телеграм. ТОП-5 лучших киноботов
Перебрал несколько десятков ботов, где-то неудобная логика, где-то удобная, но мало картин, где-то картин много, но нельзя скачивать. В общем, сделал свой рейтинг из 5 ботов, благодаря которым можно найти практически любую картину.
Самый удобный и быстрый из всего рейтинга.
Можно найти практически любой фильм. Около миллиона картин с переводами и разного качества.
Можно скачивать, делиться списком избранных фильмов.
2 место нашего чарта
Минимум функциональности, больше скорости. Можно добавлять фильмы и делиться с друзьями. Также имеется вкладка избранные, для сохранения фильмов и дальнейшего просмотра.
Большая библиотека, но все же находит не все. Рекомендую
Популярный бот, имеет англоязычную версию. Собрана огромная коллекция фильмов. Вообще это каталог описаний к фильмам, в нем нельзя просматривать картины. Возможно найдет своего пользователя.
Собрано огромное множество фильмов и сериалов. Можно скачивать, смотреть трейлеры, следить за новинками.
Из недостатков. ну только то, что в менюшках реклама.
Классный бот. Есть фильтры, новинки, поиск, а самое главное, ты просто вводишь фильм и сразу смотришь его.
Новый тест TelegramTV бота
Доброго времени суток.
Появилось немного свободного времени. И я решил посвятить это время своему хобби. «Говнокодингу». Уверен так назовут мой код, гуру.
А именно доработкой своего TelegramTV бота: @t_tv_bot (текущая версия)
Что я сделал в новой версии на данный момент:
— Взял за основу базы каналов всем нам известный сервис iPTV, чье имя нельзя произносить в слух. Более 1000 каналов.
— Добавил возможность подгрузить весь список каналов по команде /playlist
— Добавил возможность посмотреть список доступных групп каналов по команде /groups
— Добавил возможность подгрузить список каналов только нужной группы
— Добавил поиск нужного канала в базе по названию
Ссылка на тестовый TelegramTV bot: @ttvdemo_bot
Приглашаю всех протестить мое творение и высказать свои мнения.
По ограничениям на данный момент.
Я крайней степени бич. Поэтому на данный момент использую только один временный аккаунт базы, поэтому возможно возможность просмотра будет ограничена из-за занятости аккаунта. пробуйте открыть нужный канал через какое-то время.
Ссылки на потоки во время теста временные, поэтому копировать, воровать и прочее бесполезно. Не тратьте время.
С нетерпением жду комментарии
КАК НАПИСАТЬ TELEGRAM BOT НА VBA?
У моего заказчика случился один инцидент. Ну, как инцидент, обычная житейская история. У него в компании есть девушка (или женщина, все относительно), которая следит за днями рождений сотрудников, собирает деньги на подарок и т.д., короче, Шура – профсоюзная активистка из «Служебного романа» (помните?: «… если сегодня кто-нибудь еще родится или умрет, я останусь без обеда…»), только помоложе и без профсоюза.
И вот однажды подходит эта «Шура» к одному из сотрудников и просит его помочь ей поднять на этаж пиццу.
— У меня сегодня День рождения, я заказала на всех пиццу…
— (Ой-йо-мойо(. )) ну… это… я тебя поздравляю, пошли за пиццей… Коллеги! у «Шуры» сегодня День рождения!
Тут, конечно, началось… в спешке, пока «Шура» и «Шурик» исчезли в направлении пиццы, торопливые сборы ассигнаций, в ближайший цветочный ларёк направлялся гонец, и воздухе витала мысль: «Просрали полимеры день рождения девушки, которая о каждом из нас не забывала»…
Дабы не попадать в следующий раз впросак, заказчик попросил меня написать для их корпоративного Telegram чата некую программку, которая бы утром поздравляла тех, у кого день рождения (в компании около 200 человек), а за три дня до дня рождения персонально направляла каждому сотруднику группы/отдела, в котором работает будущий именинник, telegram-сообщение о грядущем событии.
«Деньги в руки – будут звуки». Что в результате получилось? Есть чат, в котором сотрудники обсуждают разные вопросы, в нем каждое утро в 9-00 появляется средних размеров сообщение на тему «10 знаменитых людей, родившихся в этот день». Если в «этот день» родился кто-то из компании заказчика, то этот кто-то оказывается в компании знаменитостей. Такой вот каламбур. Также индивидуально некоторые сотрудники получают сообщение от бота «Шура – профсоюзная активистка» о ДР за три дня до «грустного праздника».
Вот, такая преамбула.
Для реализации поставленной задачи я использовал API Telegram, c# и серверную инфраструктуру заказчика на платформе Microsoft.
Попробую в этом посте заполнить «брешь». Сначала нужно сделать то, что делается для любого языка программирования – создать и прописать бота.
2) Нужно новорожденного бота пригласить в свою группу.
3) Все, бот может отправлять сообщения в эту группу.
Общая часть закончена. Теперь специфика Visual Basic for Application.
Попробуем отправить сообщение на VBA. Заранее прошу прощения за лубочный вид кодов. Как с помощью тега типа
Конкретно этот код работает. Проблема возникнет, если вы попытаетесь отправить сообщение на русском языке. В этом случае от Telegram вы получите ответ: «Bad Request: strings must be encoded in UTF-8».
У VBA, к сожалению, нет встроенной функции перевода в требуемый формат (UTF-8). «Что же делать? Что же делать? Надо выпить».
Можно придумать свой собственный велосипед на тему: «URL Encoding», в соответствии с RFC-3986, можно найти на просторах интернета множество чужих велосипедов разной степени глючности и «доработать напильником», но я бы предложил велосипед не изобретать, а воспользоваться функцией JavaScript encodeURIComponent(), она заменяет «неправильные» символы процентными (escape-) последовательностями, представляющими кодировку символа UTF-8.
Это окошко в возможности JavaScript меня уже неоднократно выручало.
Соответственно, функция SendAMessage2TheTelegram будет выглядеть так:
Теперь сообщения с русскими буквами прекрасно перевариваются Telegram API. Отдельный вопрос: как узнать id чата, если речь идет о группе или даже конкретной персоне, а не о канале?
Для этого нужно отправить какое-либо сообщение боту из чата, в который вы планируете отправлять сообщения бота.
Например, такое: «/myid @UserNameOfMybot».
После чего посмотреть на историю сообщений бота с помощью команды, которую можно отправить из, например, Google Chrome:
Посмотреть на последние строчки истории и найти собственное сообщение в структуре JSON. Там должен быть и такой фрагмент: «chat»:<"id": 123456789. 123456789- на месте этих цифр должен быть ID чата для переменной ChatID.
Изначально я думал создать на c# com компонент для VBA, с большим набором функций по работе с Telegram. Но нужен ли такой com-компонент? – я пока не решил. Так что этот вопрос тоже можно обсудить.
Ответ на пост «Как я с голосовыми сообщениями боролся»
Посмотрел пост и решил реализовать такой же «блокиратор», но только для коротких сообщений. Есть у меня в диалогах любители отправить 5 голосовых по 2 слова. Если сообщение достаточно большое (10+ секунд), то там может и что-то важное затесаться, что неудобно печатать. Ниже попробую максимально просто описать как установить его для себя пользователю Windows. (Пост выглядит большим и страшным, но я просто старался очень подробно описать что требуется для запуска. Если у вас когда либо был опыт в использовании Python, то многие пункты для вас уже выполнены.)
Установка Python с официального сайта. После завершения установки нам нужно открыть консоль. Можно открыть ее нажав кнопку пуск и вписав в поиск CMD,
либо же нажав сочетание клавиш Windows + R и вписать команду CMD там.
1. pip install telethon
2. pip install colorama
С помощью обычного блокнота открываем файл и вставляем свои данные. Нас интересуют строки
api_id = 000000
api_hash = «»
selfbot.start(«PHONE NUMBER»)
Скрипт будем запускать посредством той же командной строки.
Если у вас желание поиграться со скриптом в течение небольшого времени, то делаем следующие шаги:
1. В консоли открываем папку где находится скачанный скрипт посредством команды
Узнать расположение файла можно открыв его свойства, нажав по нему ПКМ и выбрав последний пункт меню.
2. Запускаем скрипт командой
При первом запуске он попросит вас ввести код из телеграма для доступа к аккаунту, как при входе с нового устройства.
Готово! Скрипт запущен и фильтрует голосовые короче 10 секунд, показывая любителям отправить вам два слова посредством голоса не самую приятную для них надпись «Пользователь ограничил функцию голосовых сообщений.»
Если вы хотите изменить время для фильтрации голосовых, нужно найти строку
if (event.message.voice) and (event.message.voice.attributes[0].duration Показать полностью 3
Как я с голосовыми сообщениями боролся
Сижу я, значит, пью чай, спорю в переписке с одной знакомой дамой об отношении к голосовым сообщениям. (Я из тех, кто считает их лютой дичью.) И внезапно понимаю, что столь желанной функции запрета приема голосовых сообщений от создателей мессенджеров я не дождусь, а просить каждого невоспитанного писать текстом.
Значит, настало время взять ситуацию в свои руки, и воспользоваться тем, что api Телеграма, в котором я переписываюсь чаще всего, открыт. Наверняка уже есть какое-то готовое решение в сети.
штош, иду в гугл. Ииии ничего нет, максимум боты для групп. Обидно, досадно, но ладно, придется вспоминать навыки кодинга, полученные и благополучно забытые лет 5 назад.
Снова иду в гугл, и нахожу телеграм-клиент, написанный на Python, где в примерах уже написана самая сложная часть кода, и даже уже дан пример ответа на сообщения. Вот куда-то сюда надо будет вставить ответ на голосовухи:
Обращаю внимание на подсказку где брать api_id и api_hash для авторизации, получаю, и переношу все это в текстовой файл, попутно удалив лишние строки:
Устанавливаю на компьютер Python, устанавливаю telethon (клиент телеграма, о котором идет речь), запускаю скрипт, авторизируюсь по номеру телефона, и вижу, что мой аккаунт теперь на любое входящее сообщение в ответ присылает «тестовое сообщение». Отлично, половина работы сделана =)
Теперь нужно каким-то образом вычислять какое из входящих сообщений является голосовухой, и какое из них прислано в личном чате (не в группе и не в канале). И эта информация, видимо, прячется в переменной «event». Курение документации в течение часа, к сожалению, ни к чему не приводит, все как на китайском. Отчаиваюсь, иду за дополнительной кружкой чая, в голове матеря любителей голосовух.
Спустя время приходит в голову идея: ищу расширение, которое полностью распечатывает массив, и вывожу всё содержимое «event» в консоль. И в куче текста вижу это:
попалась, голосовуха проклятая!! Щас мы тебя задетектим. Так подумал я, и ничего не получилось: прямой путь к переменной по многомерному массиву не возвращает что-либо типа bool, или хотя бы текст. В итоге скрипт при запуске жалуется на тип данных, и отрубается.
Что ж, пора снова наливать чай и копаться в документации. И снова ничего не выходит.
Проверяю: ессс, работает. Скрипт всегда отвечает «тестовое сообщение» на голосовуху.
Ну и дело остается за малым:
1) Добавить проверку на то, что чат личный. Тут все просто: ID каналов и групп всегда отрицательный, а у личных чатов он положительный.
2) Добавить удаление голосовухи из чата. С этим тоже проблем не возникло, кое-что полезное из документации все же удалось вытащить.
3) Поменять текст сообщения. Чтобы он был курсивным, пришлось поставить по 2 подчеркивания по краям.
Telegram TV
Продолжаю свой творческий путь в области «ботостроения» для Telegram.
Сегодня хочу поделиться с вами еще одним тв ботом. Бета версия.
В отличии от предыдущего проекта. Данный бот больше заточен под выдачу единственной, рабочей ссылки, в формате m3u8
При наличии плеера, способного подхватывать ссылки «на лету» (использую MX Player) при клике по ссылке, поток автоматически откроется в данном плеере.
по команде /playlist бот отобразить список доступных на данный момент каналов.
Пишите, свое мнение о данной идее. Если понравится буду развивать.
Познакомьтесь с 24-летним программистом, который отслеживает каждую сломанную машину для мороженого McDonald’s в США
Вы хотите McFlurry или Shamrock Shake. Вы едете в McDonald’s. Но когда вы, наконец, добираетесь до прилавка, вы слышите эти ужасные слова: «Машина для мороженого сломана».
Несколько часов назад, 24-летний инженер-программист запустил McBroken ( mcbroken.com ) — веб-сайт, цель которого — положить конец таким инцидентам раз и навсегда. На сайте представлена карта всех местоположений McDonald’s в США, обозначенных группами точек. Локации с работающим автоматом для мороженого отмечены зеленой точкой; места со сломанным — красной. В столбце справа собрана статистика — в настоящее время сломано 7,54% автоматов по производству мороженого McDonald’s в США и 15,22% автоматов в Нью-Йорке.
McBroken придумал Рашик Захид. В июле он посетил McDonald’s в районе Кройцберг в Берлине и попытался заказать McSundae в киоске с сенсорным экраном, но мороженого там не оказалось. Он попытался сделать заказ из мобильного приложения, но также не смог. Его поездка была напрасной.
«Я подумал, что с этим можно что-то сделать», — сказал Захид.
Итак, он создал бота.
Захид начал с мобильного приложения McDonald’s, которое уже позволяет размещать заказ в любом месте McDonald’s. Это работает как покупки на Amazon или Grubhub — вы добавляете товары, которые хотите, в корзину, и платите, когда будете готовы. Но если в выбранном вами месте нет работающей машины для мороженого, вы не можете добавлять в корзину какие-либо продукты, содержащие мороженое — они помечены как «В настоящее время недоступны».
«Мне нравится копаться в разных приложениях и просто изучать функции безопасности и внутренние API-интерфейсы», — сказал Захид. «Я хорошо знаком с тем, как реконструировать приложения. Я подумал: «Хорошо, это должно быть довольно легко».
Это оказалось сложнее, чем он думал. Первоначально он создал API, который пытался добавлять McSundae из каждого местоположения McDonald’s в корзину один раз в минуту.
Приложение выяснило, что он задумал, и заблокировало его: «Это было похоже на то, что меня принимали за бота», — вспомнил он.
После ночи проб и ошибок Захид выяснил волшебные временные рамки. Теперь его бот пытается добавлять McSundae каждые 30 минут. Если бот успешно добавляет элемент, он сообщает на сайт, что машина в этом местоположении работает. Если нет, то это место помечается красной точкой. (Пользователь Twitter, утверждающий, что он сотрудник McDonald’s, подтвердил, что метод работает.)
Захид впервые протестировал McBroken в Германии, у которой около 1500 точек. Он ездил на велосипеде во все McDonald’s Берлина, вручную заказывая мороженое, чтобы определить, верную ли информацию возвращает его бот. Тест прошел успешно. Сегодня он расширил свою сеть на США.
«Я подумал, что это было бы очень интересно для Германии, но было бы замечательно для США, которые в основном являются столицей Макдональдса», — сказал Захид.
В течение 20 минут после запуска McBroken принял 10 000 посетителей. Сначала он работал вяло, а затем «упал». «Я запустил сайт на сервере, который стоит 5 долларов в месяц, поэтому он должен был выйти из строя», — сказал Захид. После этого он устранил все проблемы, и теперь утверждает, что сайт «работает идеально».
Но он задумал этот сайт как шутку — и был шокирован, узнав, что люди считают его действительно полезным. «Я сделал это просто для удовольствия», — сказал Захид. «Но люди говорили:« Вау, это лучшее, что я видел за всю неделю».
Кто знает, устранит ли McDonalds эту возможность отслеживания, но Дэвид Товар, вице-президент McDonald’s по коммуникациям в США, похоже, поддерживает такой сервис. «Только настоящий фанат McDonalds пойдет на все, чтобы помочь клиентам получить наше восхитительное мороженое!» он написал в Твиттере сегодня.
Бот Флибуста на телеграмме
Сегодня прямо на глазах перестал работать бот флибусты на Андроиде, на IOS он не работает давно. Теперь и тут.
Пишет что этот бот недоступен в связи с авторскими правами.
Ну что же, остается только прокси.
UPD: К посту есть вопросы #comment_177865952
Погодная станция Dozor meteo
— измерение температуры, влажности, давления;
— наружный блок влажности/температуры;
— 2 удаленно управляемых выхода 12/220B;
— 1 логический/счетный вход;
— до 5 точек контроля температуры;
— автономная работа (без сети WiFi);
— WiFi-подключение к интернету;
— управление через приложение или бот Telegram
Ниже описана версия прибора для сборки из готовых модулей датчиков и МК на основе Arduino Nano. Есть версия конструкции на «рассыпухе», позволяющая получить небольшой размер и эстетичный внешний вид.
Назначение полей дисплея и кнопок
1. Канал управления (вкл./выкл.)
2. Счетно-контрольный вход.
3. Поле «Влажность» (наруж. блок)
5. Температура Tout (наружный блок)
6. Температура Tk (комнатная), датчик расположен внутри модуля.
7. Дополнительный датчик T1(DS18B20)
8. Дополнительный датчик T2(DS18B20)
9. Дополнительный датчик T3(DS18B20)
10. Обратный отсчет до сеанса связи с сервером.
11. Индикатор НЕ-успешности последнего сеанса связи с сервером.
12. Кнопка управления.
Для сборки прибора Дозор meteo на основе Arduino Nano понадобятся:
— Arduino nano – «рулит» всем в конструкции;
— модуль ESP-01. Это WiFi модуль на основе ESP8266, используется для связи прибора с интернетом и отправки данных на сервер народного мониторинга. Можно заменить практически любым модулем на основе ESP8266;
— модуль GY-68 (BMP180 со встроенным стабилизатором 3,3V и конвертером уровня I2C). Измеряет давление и температуру в помещении;
— модуль HTU21D. Используется в составе внешнего модуля и «отвечает» за наружную температуру и влажность;
— МК Attiny13a. Используется в наружном модуле;
— дисплей 128Х64 COG с контроллером UC1701
На нем можно лицезреть актуальные показания датчиком. Очень удобная, но не обязательная часть прибора. Без него работает, но показания можно посмотреть либо на сайте народного мониторинга или в приложении смартфона;
-м/с стабилизатора 3,3V.Нужна для питания ESP-01 и дисплея. Можно использовать соответствующий выход Power board (модуль питания для Arduino);
— DS18B20, цифровой датчик
Если необходимо коммутировать (управлять) нагрузками, то необходим узел на оптосимисторах AHQ2223 (IC1, IC3) в корпусе DIP-7, и транзисторные ключи для управления ими. Если коммутация не нужна- часть схемы, выделенная как switching module можно не использовать. Если же такая необходимость есть, необходимо помнить, что указанные оптосимисторы рассчитаны на максимальный ток 0,8A, что вполне достаточно коммутации нагрузки до 150Вт (220Вольт). Также следует учитывать, что симисторы- полупроводниковые приборы, используемые в цепях переменного тока. Поэтому если надо управлять нагрузкой, рассчитанной для работы в цепи постоянного тока, вместо симистора надо поставить либо реле, либо транзистор с малым сопротивлением силового перехода.
Счетно-контрольный вход устройства (X2) можно использовать, например, для контроля уровня жидкости в баке.
Т.к. напряжение питания Arduino составляет 5V, а все модули датчиков, в том числе и дисплей, линии управления (UART, SPI) приходится подключать к модулям через резистивные делители (R2, R3; R5-R13). Исключение составляют модуль GY-68 и HTU21D. GY-68 имеет на «борту» собственный стабилизатор 3,3V, а HTU21D питается как и весь наружный модуль напряжением 3,3V. Дисплей- попадаются варианты исполнения как со встроенным стабилизатором, так и без него.
Если будет встроенный стабилизатор, то дисплей можно запитать от 5V, но резистивные делители всё равно желательны. Были случаи, когда на дисплей на управляющие контакты поступало напряжение 5V, и дисплей оставался жив. Но скорее всего это не полезно для дисплея. Документация на контроллер UC1701, установленный в данном дисплее по вопросу толерантности цифровых входов к напряжению 5V теряет нить разговора молчит.
Несколько неудобно конечно, когда элементы имеют разные значения питающих напряжений, но Arduino требует жертв…
Часть схемы, выделенная как OUTDOOR MODULE (внешний модуль) используется для измерений наружных (на улице) температуры и влажности.
Наружный и внутренний модуля соединены трёхпроводной линией – «земля», «+» и сигнальный провод. Микроконтроллеры модулей общаются по протоколу 1-wire, где внутренний модуль- ведущий. Это конечно несколько усложнило конструкцию внешнего модуля, но результат налицо. В результате такого решения удалось отнести внешний модуль на десятки метров от внутреннего. С «чистой» шиной I2C такой результат недостижим- буквально на 5 метрах начинались «глюки». В результате дополнительных экспериментов по применению 2-х транзисторного «драйвера» шины 1-Wire удалось получить расстояние в 80м! Кабель, как ни странно, желательно использовать не экранированный-меньше погонная емкость.
Ведущий посылает в линию 1-wire запрос «запустить преобразование всех датчиков», который совпадает со стандартным запросом для датчиков DS18B20 ($CC+$44), что удобно с точки зрения программной реализации- одним запросом «запускаются» все 1-wire устройства. Ведомый МК принимает этот запрос, и инициирует преобразование влажности и температуры(МС HTU21D)по «своей» шине I2C. После окончания преобразования полученный результат считывается внутренним модулем. При этом наружный модуль не мешает работе датчиков DS18B20(которые можно подключить в линию в любом месте), независимо от режима работы- будь то замер температуры или считывание ROM. Если наружный модуль не подключать, устройство сохраняет работоспособность, но данные будут искажены.
После сборки устройства (или до)необходимо запрограммировать микроконтроллеры устройства- саму Arduino и МК ATtiny13a наружного модуля. ПО написано в среде Algorithm Builder ( почти ассемблер ), поэтому прошивки публикуются «как есть», полнофункциональные, в виде готовых «хексов».
В архиве есть 2 файла – DM_indoor_V1_nano.hex (для Arduino Nano 16 MHz) и DM_outdoor_V1_tiny13a.hex (для наружного модуля). Для «заливки» в Arduino готового «хекса» есть несколько программ, например X-loader и GC-uploader.
С программированием Arduino проблем быть не должно(если прочитать указанную выше ссылку на help)- выбрал «хекс», выбрал порт, нажал «программ» и вуаля.
«Тиньку» же придется «прошивать» при помощи программатора и одной из множества программ, например, ProgISp. Последняя кстати, замечательно работает с дешевым программатором USB ISP с родины Мао.
Конечно, «заливка» чего-либо не из Arduino IDE— это несомненно «два», но кто сказал, что будет легко? иначе никак… Можно конечно было использовать ещё одну Arduino, но она великовата для конструкции наружного модуля, описанного далее. Хотя, возможно…
В общем, для ATtiny13a надо запрограммировать fuse-биты и «залить» прошивку.
Состояние Fuse-bit для ATtiny13a в данной конструкции должно быть такое
После правильной сборки и программирования настроек «железа» не требуется. Перед включением необходимо пройтись по соединениям, включить устройство. Причем во время работы желательно не подключать кабель USB ПК-Arduino, т.к. в схеме используется интерфейс UART- могут быть конфликты. Используйте плату Power board.
После подключения проверить наличие напряжения 3,3V на выходе стабилизатора (C2). На дисплее должна появиться заставка. Если всё ок- входим в режим настроек. Для этого выключаем питание, нажимаем кнопку S1 и её удерживая включаем питание (кнопку продолжаем удерживать). Примерно через 2-3 сек. На дисплее появится надпись «SETUP MODE». Так же будет выведена информация о SSID и пароле WiFi, периоде отправке данных, которая хранится в памяти прибора.
Для изменения настроек (П.2) необходимо нажать кнопку еще раз. Появится надпись WEB SETUP.
В WI-FI сети появится точка доступа Dozor_meteo. Необходимо подключится к ней и зайти (набрать в окне любого браузера) на адрес 192.168.4.1.
Тут необходимо ввести название и пароль домашней точки доступа( первые 2 поля), и 3-е поле –период отправки данных на сервер.. Тут рекомендуется установить значение Т>300 сек. Доступный диапазон – 60- 999 сек. Но для установки периода Т
Далее необходимо отключить датчик Т1 и подключить датчик Т2 (если он необходим), и коротко нажать на кнопку. Очередной датчик (Т2) занесен в память устройства. Далее регистрируется датчик Т3. Т.е. получается такой алгоритм:
— войти в режим регистрации DS SETUP, отпустить кнопку;
— подключить датчик Т1, коротко нажать на кнопку;
— отключить датчик Т1, подключить Т2, короткое нажатие;
— отключить датчик Т2, подключить Т3, короткое нажатие;
Следующее нажатие инициирует выход из режима настойки.
Если необходимо удалить какой либо из зарегистрированных датчиков (или все), то при программировании достаточно не подключить соответствующий датчик. В соответствующей строке появится сообщение о ошибке и датчик будет удален из памяти прибора.
Конструкция наружного модуля станции ДОЗОР meteo
Если есть желающие повторить конструкцию, опишу один из вариантов устройства наружного модуля.
Задача- конструкция модуля должна обеспечивать защиту датчиков от дождя, но при этом он не должен быть герметичным. Для верности показаний необходимо обеспечить естественную конвекцию воздуха внутри модуля. При этом избежать дополнительных токарно-фрезеровальных работ, и выполнить все из материалов, доступных в любом в магазине. В результате изысканий получилась такая конструкция.
Для изготовления необходимы
1. Пластиковая труба D25mm 25-30 см. Можно использовать водопроводную «под пайку» либо трубу для кабелей.
2. Заглушка сантехническая под систему D32mm. 1 шт
4. Клеевой состав ( герметик, «эпоксидка», клей «Титан»)
На одном конце трубы необходимо с отступом от края 5-8мм (до края отверстия) просверлить отверстия D4-6мм 4-8 шт.
На внутреннюю грань заглушки нанести валик клея или герметика. С клеем усерствовать не надо- до отверсий в трубке клей не должен «добраться».
При вертикальной установке такая конструкция обеспечивает хорошую дождезащиту, но при этом за счет естественной вентиляции внутри плата датчика постоянно обдувается восходящим потоком, обеспечивая верность показаний температуры и влажности. Был проведен эксперимент- на корпусе модуля с наружной стороны примерно посередине расположил доп. датчик температуры DS18B20 (тоже в тени), который фиксировал температуру на улице вместе с наружным модулем. При этом показания доп. датчика в светлое время суток были всегда на 0,5 – 0,8 град. больше, чем внутри модуля. Ночью же показания практически сравнивались. Объяснением (один из вариантов) этого может быть тот факт, что доп. датчик дополнительно нагревался ИК-излучением от посторонних объектов.
Модуль необходимо закрепить к стене при помощи кронштейнов в месте, защищенном от прямых солнечных лучей. Крепить надо заглушкой вверх. (мало ли. ).