Телеграмм-боты
Прогноз погоды
Всем привет! Я долго думал над тем какого ещё можно написать бота для телеграмм. И вот, придумал - бота для прогноза погоды. Так вот, за основу я взял бота отсюда, только поменял библиотеку aiogram на telebot, ну и упростил код) Чтобы сделать бота нам будет необходимо получить токен из этого сайта и от BotFather. (Чтобы узнать как это сделать перейдите по этой ссылке (Ага, это та же ссылка что и в начале)).
Когда со всеми настройками будет покончено, переходим в нашу IDE и начинаем писать код:)
# Импортируем нужные библиотеки
import requests
import telebot
import math
bot = telebot.TeleBot('Ваш токен от BotFather')
# Создаём функцию, обрабатывающую команду старт
@bot.message_handler(commands=["start"])
def start(m, res=False):
# Отправляем сообщение пользователю
bot.send_message(m.chat.id, 'Доброго времени суток) Напиши мне название города, и я скажу какая там погода.')
# Обрабатываем входные данные
@bot.message_handler(content_types=["text"])
def handle_text(message):
# Присваиваем переменной 'city' значение вводимых данных
city = message.text.strip()
# Создаём функцию в которой делаем get-запрос
def get_weather(city):
api_key = 'Ваш api из сайта погоды'
url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&lang=ru&appid={api_key}&units=metric'
response = requests.get(url)
weather_data = response.json()
# На сайте погоды поищите, там где-то в api было сказано как вытягивать данные
if weather_data['cod'] == 200:
weather_description = weather_data['weather'][0]['description']
temp = weather_data['main']['temp']
wind = weather_data["wind"]["speed"]
humidity = weather_data["main"]["humidity"]
pressure = weather_data["main"]["pressure"]
return f'Сейчас в городе {city} {weather_description}. Температура: {temp}°C. Ветер: {wind}м/с. Влажность: {humidity}%. Давление: {math.ceil(pressure / 1.333)} мм.рт.ст'
else:
return 'Извините, не удалось получить информацию о погоде.'
# Отправляем ответ пользователю
bot.send_message(message.chat.id, get_weather(city))
# Запускаем бота
bot.polling(none_stop=True, interval=0)
На этом всё, наш бот готов. До встречи)
Как написать чат-бота в телеграмм...
Не хочу делать долгое вступление, поэтому перейдём сразу к делу.
Чтобы создать любого бота в телеграмм нужно получить свой токен, для этого перейдите по ссылке: https://t.me/BotFather и выполните инструкции бота (приложение к получению токена смотрите ниже⬇️)
Теперь когда у нас есть токен, можем начать программировать своего бота.
Для начала создадим папку (можете назвать как хотите), а в этой папке создадим txt-файл "boltun.txt" (лучше не меняйте название, если не разбираетесь в кодинге) и файл Python (также можете назвать как хотите). Ну, вот всё и готово;)
Шучу), теперь перейдём к самой важной части - кодингу: открываем наш Python файл в среде разработки (я пользуюсь Thonny), скачиваем все нужные библиотеки (telebot, os и fuzzywuzzy) и вставляем туда такой код:
# Импортируем все нужные библиотеки
import telebot
import os
from fuzzywuzzy import fuzz
# Создаем бота, пишем свой токен
bot = telebot.TeleBot('Здесь пишим свой токен, полученый от BotFather')
#Загружаем массив
mas=[]
#Открываем txt файл и загружаем его в массив
f = open('boltun.txt', 'r')
mas = f.readlines()
# С помощью fuzzywuzzy вычисляем наиболее похожую фразу и выдаем в качестве ответа следующий элемент списка
def answer(text):
try:
text=text.lower().strip()
if os.path.exists('boltun.txt'):
a = 50
n = 0
nn = 0
for q in mas:
if('u: ' in q):
# С помощью fuzzywuzzy получаем, насколько похожи две строки
aa=(fuzz.token_sort_ratio(q.replace('u: ',''), text))
if(aa > a and aa!= a):
a = aa
nn = n
n = n + 1
# В качестве ответа отправляем следующую строку со списка
s = mas[nn + 1]
return s
else:
return 'Ошибка'
except:
return 'Ошибка'
# Команда «Старт»
@bot.message_handler(commands=["start"])
# Получение сообщений от юзера
@bot.message_handler(content_types=["text"])
def handle_text(message):
s=answer(message.text)
bot.send_message(message.chat.id, s)
# Запускаем бота
bot.polling(none_stop=True, interval=0)
# Код был частично взят из сайта https://xakep.ru/
Теперь нужно что-то написать в txt-файл. Пишем так: первая строка (u: 'Запрос')
Вторая строка ('Ответ')
Ну, типо этого:
u: привет
Привет!
И так далее...
Ну всё, наш бот готов, результаты выполнения программы смотрите ниже⬇️
Как сделать так, чтобы мой бот работал постоянно...
Как сделать так, чтобы мой бот работал постоянно? Вот ответ: опубликовать его на сервере.
Покажу на примере этого облачного сервера: https://www.pythonanywhere.com/
(На этом сервере можно разместить только один проект)
Заходим на сайт, кликаем на три полоски, а теперь ищем "Files". У "Files" создаём новый файл. В открывшейся редактор вставляем код бота. И снова три полоски, в списке ищем "Consoles". А консоль нам нужна такая: "Bush...", в ней мы устанавливаем плагины. Кликаем на три полоски, ищем "Files" и находим нашего бота. Сохраняем код нажатием на "Save" и запускаем, кликая "Run". Всё, наш бот больше не будет отключаться) А, регистрация, ну я думаю вы и сами справитесь)
(Приложение к установке на сервере смотрите внизу⬇️)