-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest.py
More file actions
368 lines (308 loc) · 21.3 KB
/
Copy pathtest.py
File metadata and controls
368 lines (308 loc) · 21.3 KB
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
import telebot # Подключаем библиотеки
from telebot import types
from translate import Translator
import requests
import json
from table import *
bot = telebot.TeleBot('7573737157:AAEyyrtOvK_kCTEJqgy2hXpzsCCU-ljanQk') # Токен бота
API = 'cfeb1d257f852fa9b5835f8fb87cb466' # API на сайте OpenWeatherMap
lang = None # Переменная для языка
print('The bot is ready to start working. Open Telegram and press the button "start".\nIf you want to choose another language, write "/start".') # Начальное сообщение
@bot.message_handler(commands=['start']) # Команда "старт" и кнопки для выбора языка
def start(message):
markup = types.ReplyKeyboardMarkup()
btn1 = types.KeyboardButton('Русский')
btn2 = types.KeyboardButton('English')
markup.row(btn1, btn2)
btn3 = types.KeyboardButton('Español')
btn4 = types.KeyboardButton('中文')
btn5 = types.KeyboardButton('Беларуская')
markup.row(btn5, btn3, btn4)
bot.send_message(message.chat.id, 'Choose the language!', reply_markup= markup)
bot.register_next_step_handler(message, click)
def click(message): # Оформление действий с кнопками
global lang
if message.text == 'Русский': # Вывод привественного сообщения на соответствующем языке
bot.send_message(message.chat.id, f'Привет @{message.from_user.username}! Напишите город, погода которого вас интересует.', parse_mode='html')
lang = 'ru'
elif message.text == 'English':
bot.send_message(message.chat.id, f'Hello @{message.from_user.username}! Write the city, whose weather you are interested in.', parse_mode='html')
lang = 'en'
elif message.text == 'Español':
bot.send_message(message.chat.id, f'¡Hola @{message.from_user.username}! Escribe la ciudad cuyo clima te interesa.', parse_mode='html')
lang = 'es'
elif message.text == '中文':
bot.send_message(message.chat.id, f'你好 @{message.from_user.username}!写下你感兴趣的城市的天气。', parse_mode='html')
lang = 'zh'
elif message.text == 'Беларуская':
bot.send_message(message.chat.id, f"Прывітанне @{message.from_user.username}! Напішыце горад, надвор'е якога вас цікавіць.", parse_mode='html')
lang = 'be'
@bot.message_handler(content_types = ['text']) # Вывод информации о погоде
def get_weather(message):
global lang
city = message.text.strip().lower() # Преобразование названия города в строку
try:
try:
if lang == 'be':
translator = Translator(from_lang=lang, to_lang='ru')
ru_city = translator.translate(city.lower())
translator = Translator(from_lang='ru', to_lang='english')
en_city = translator.translate(ru_city.lower())
elif lang != 'en': # Перевод названия города на английский язык
translator = Translator(from_lang=lang, to_lang='english')
en_city = translator.translate(city.lower())
else:
en_city = city # Если выбран английский язык, то перевод не требуется
res = requests.get(f'https://api.openweathermap.org/data/2.5/weather?q={en_city}&appid={API}&units=metric') # Ввод URL-адреса на сайт OpenWeatherMap
if res.status_code == 200: # Если URL-адрес корректный, обрабатываем данные о погоде
data = json.loads(res.text)
sky = data["weather"][0]["description"]
if lang == 'be':
translator = Translator(from_lang='en', to_lang='ru')
ru_sky = translator.translate(sky.lower())
translator = Translator(from_lang='ru', to_lang='be')
sky = translator.translate(ru_sky.lower())
elif lang != 'en': # Данные о состоянии неба; если выбран английский язык, то перевод не требуется
translator = Translator(from_lang='english', to_lang=lang)
sky = translator.translate(sky.lower())
temp = data["main"]["temp"] # Температура
f_temp = data["main"]["feels_like"] # Ощущается как (температура)
hum = data["main"]["humidity"] # Влажность
wind = data["wind"]["speed"] # Скорость ветра
if lang == 'ru': # Вывод информации о погоде в чат на соответствующем языке
bot.reply_to(message, f'Сейчас погода в <u><b>{city.title()}</b></u>:\n\n<b>Небо:</b>\t\t{sky}\n<b>Температура:</b>\t\t{temp}°C\n<b>Ощущается как:</b>\t\t{f_temp}°C\n<b>Влажность:</b>\t\t{hum}%\n<b>Ветер:</b>\t\t{wind} м/с', parse_mode='html')
bot.send_message(message.chat.id, 'Если вас интересует погода в другом городе, напишите его название.')
if lang == 'en':
bot.reply_to(message ,f'The weather right now in <u><b>{city.title()}</b></u>:\n\n<b>Sky:</b>\t\t{sky}\n<b>Temperature:</b>\t\t{temp}°C\n<b>Feels like:</b>\t\t{f_temp}°C\n<b>Humidity:</b>\t\t{hum}%\n<b>Wind:</b>\t\t{wind} m/s', parse_mode='html')
bot.send_message(message.chat.id, 'If you are interested in the weather in another city, write its name.')
if lang == 'es':
bot.reply_to(message, f'El tiempo ahora mismo en <u><b>{city.title()}</b></u>:\n\n<b>Cielo:</b>\t\t{sky}\n<b>Temperatura:</b>\t\t{temp}°C\n<b>Sensación térmica:</b>\t\t{f_temp}°C\n<b>Humedad:</b>\t\t{hum}%\n<b>Viento:</b>\t\t{wind} m/s', parse_mode='html')
bot.send_message(message.chat.id,'Si estás interesado en el clima de otra ciudad, entonces escribe su nombre.')
if lang == 'zh':
bot.reply_to(message, f'<u><b>{city.title()}</b></u>现在天气:\n\n天空:\t\t{sky}\n温度:\t\t{temp}°C\n感觉像:\t\t{f_temp}°C\n湿度:\t\t{hum}%\n风:\t\t{wind} 米/秒', parse_mode='html')
bot.send_message(message.chat.id, '如果你对另一个城市的天气感兴趣,就写下它的名字。')
if lang == 'be':
bot.reply_to(message, f"Зараз надвор'е ў <u><b>{city.title()}</b></u>:\n\n<b>Неба:</b>\t\t{sky}\n<b>Тэмпература:</b>\t\t{temp}°C\n<b>Адчуваецца як:</b>\t\t{f_temp}°C\n<b>Вільготнасць:</b>\t\t{hum}%\n<b>Вецер:</b>\t\t{wind} м/с", parse_mode='html')
bot.send_message(message.chat.id, "Калі вас цікавіць надвор'е ў іншым горадзе, напішыце яго назву.")
elif res.status_code == 404 or res.status_code == 500 or res.status_code == 503: # Если на сайте OpenWeatherMap произошёл сбой и т.п.
if lang == 'ru':
bot.send_message(message.chat.id, 'Ошибка! Попробуйте чуть позже.')
if lang == 'en':
bot.send_message(message.chat.id, 'Error! Please try again later.')
if lang == 'es':
bot.send_message(message.chat.id, '¡Error! Inténtalo de nuevo más tarde.')
if lang == 'zh':
bot.send_message(message.chat.id, '错误!请稍后再试。')
if lang == 'be':
bot.send_message(message.chat.id, 'Памылка! Паспрабуйце крыху пазней.')
else: # Если в названии города присутствует ошибка, то выводим соответствующие сообщения
if lang == 'ru':
bot.reply_to(message, 'Город указан неверно!')
bot.send_message(message.chat.id, 'Пожалуйста, напишите другой город')
if lang == 'en':
bot.reply_to(message, 'The city is indicated incorrectly!')
bot.send_message(message.chat.id, 'Please, write another city.')
if lang == 'es':
bot.reply_to(message, '¡La ciudad está indicada incorrectamente!')
bot.send_message(message.chat.id, 'Por favor, escribe otra ciudad.')
if lang == 'zh':
bot.reply_to(message, '城市位置指示错误!')
bot.send_message(message.chat.id, '请再写一个城市。')
if lang == 'be':
bot.reply_to(message, "Горад указаны няправільна!")
bot.send_message(message.chat.id, "Калі ласка, напішыце іншы горад.")
except UnboundLocalError: # Если название города не удалось перевести на английский язык, то выводим соответствующие сообщения
if lang == 'ru':
bot.reply_to(message, 'Город указан неверно!')
bot.send_message(message.chat.id, 'Пожалуйста, напишите другой город')
if lang == 'en':
bot.reply_to(message, 'The city is indicated incorrectly!')
bot.send_message(message.chat.id, 'Please, write another city.')
if lang == 'es':
bot.reply_to(message, '¡La ciudad está indicada incorrectamente!')
bot.send_message(message.chat.id, 'Por favor, escribe otra ciudad.')
if lang == 'zh':
bot.reply_to(message, '城市位置指示错误!')
bot.send_message(message.chat.id, '请再写一个城市。')
if lang == 'be':
bot.reply_to(message, "Горад указаны няправільна!")
bot.send_message(message.chat.id, "Калі ласка, напішыце іншы горад.")
except RuntimeError: # Если не удалось сделать вышенаписанное, то выводим соответствующие сообщения
if lang == 'ru':
bot.reply_to(message, 'Город указан неверно!')
bot.send_message(message.chat.id, 'Пожалуйста, напишите другой город')
if lang == 'en':
bot.reply_to(message, 'The city is indicated incorrectly!')
bot.send_message(message.chat.id, 'Please, write another city.')
if lang == 'es':
bot.reply_to(message, '¡La ciudad está indicada incorrectamente!')
bot.send_message(message.chat.id, 'Por favor, escribe otra ciudad.')
if lang == 'zh':
bot.reply_to(message, '城市位置指示错误!')
bot.send_message(message.chat.id, '请再写一个城市。')
if lang == 'be':
bot.reply_to(message, "Горад указаны няправільна!")
bot.send_message(message.chat.id, "Калі ласка, напішыце іншы горад.")
@bot.message_handler(commands=['favourites'])
def favourites(message):
global lang
username = message.from_user.username
# Проверяем, есть ли города у пользователя
if username in info and info[username]:
cities_list = '\n'.join([f'• {city}' for city in info[username]])
if lang == 'ru':
answer = f'<b>Ваши избранные города:</b>\n\n{cities_list}'
elif lang == 'en':
answer = f'<b>Your favourite cities:</b>\n\n{cities_list}'
elif lang == 'es':
answer = f'<b>Tus ciudades favoritas:</b>\n\n{cities_list}'
elif lang == 'zh':
answer = f'<b>您喜欢的城市:</b>\n\n{cities_list}'
elif lang == 'be':
answer = f'<b>Вашы абраныя гарады:</b>\n\n{cities_list}'
else:
answer = f'<b>Your favourite cities:</b>\n\n{cities_list}'
else:
if lang == 'ru':
answer = 'У вас пока нет избранных городов.'
elif lang == 'en':
answer = "You don't have any favourite cities yet."
elif lang == 'es':
answer = 'Aún no tienes ciudades favoritas.'
elif lang == 'zh':
answer = '您还没有喜欢的城市。'
elif lang == 'be':
answer = 'У вас пакуль няма абраных гарадоў.'
else:
answer = "You don't have any favourite cities yet."
bot.send_message(message.chat.id, answer, parse_mode='html')
markup = types.InlineKeyboardMarkup()
markup.add(types.InlineKeyboardButton('Add favourite city', callback_data='add'))
markup.add(types.InlineKeyboardButton('Delete city', callback_data='del'))
bot.send_message(message.chat.id, 'Choose an action:', reply_markup=markup)
@bot.callback_query_handler(func= lambda callback: True)
def callback_message(callback):
global lang
username = callback.from_user.username
if callback.data == 'add':
if lang == 'ru':
bot.send_message(callback.message.chat.id, 'Напишите название города, который хотите добавить в избранное:')
elif lang == 'en':
bot.send_message(callback.message.chat.id, 'Write the name of the city you want to add to favourites:')
elif lang == 'es':
bot.send_message(callback.message.chat.id, 'Escribe el nombre de la ciudad que quieres agregar a favoritos:')
elif lang == 'zh':
bot.send_message(callback.message.chat.id, '写下您想添加到收藏夹的城市名称:')
elif lang == 'be':
bot.send_message(callback.message.chat.id, 'Напішыце назву горада, які хочаце дадаць у абранае:')
else:
bot.send_message(callback.message.chat.id, 'Write the name of the city you want to add to favourites:')
bot.register_next_step_handler(callback.message, add_favourite)
elif callback.data == 'del':
if username in info and info[username]:
cities_list = '\n'.join([f'{i+1}. {city}' for i, city in enumerate(info[username])])
if lang == 'ru':
bot.send_message(callback.message.chat.id, f'Ваши города:\n{cities_list}\n\nНапишите номер города для удаления:')
elif lang == 'en':
bot.send_message(callback.message.chat.id, f'Your cities:\n{cities_list}\n\nWrite the number of the city to delete:')
elif lang == 'es':
bot.send_message(callback.message.chat.id, f'Tus ciudades:\n{cities_list}\n\nEscribe el número de la ciudad para eliminar:')
elif lang == 'zh':
bot.send_message(callback.message.chat.id, f'您的城市:\n{cities_list}\n\n写下要删除的城市编号:')
elif lang == 'be':
bot.send_message(callback.message.chat.id, f'Вашы гарады:\n{cities_list}\n\nНапішыце нумар горада для выдалення:')
else:
bot.send_message(callback.message.chat.id, f'Your cities:\n{cities_list}\n\nWrite the number of the city to delete:')
bot.register_next_step_handler(callback.message, delete_favourite)
else:
if lang == 'ru':
bot.send_message(callback.message.chat.id, 'У вас нет городов для удаления.')
elif lang == 'en':
bot.send_message(callback.message.chat.id, "You don't have any cities to delete.")
elif lang == 'es':
bot.send_message(callback.message.chat.id, 'No tienes ciudades para eliminar.')
elif lang == 'zh':
bot.send_message(callback.message.chat.id, '您没有可删除的城市。')
elif lang == 'be':
bot.send_message(callback.message.chat.id, 'У вас няма гарадоў для выдалення.')
else:
bot.send_message(callback.message.chat.id, "You don't have any cities to delete.")
def add_favourite(message):
global lang
username = message.from_user.username
city = message.text.strip()
if username not in info:
info[username] = []
if city not in info[username]:
info[username].append(city)
if lang == 'ru':
bot.send_message(message.chat.id, f'Город "{city}" добавлен в избранное!')
elif lang == 'en':
bot.send_message(message.chat.id, f'City "{city}" added to favourites!')
elif lang == 'es':
bot.send_message(message.chat.id, f'¡Ciudad "{city}" agregada a favoritos!')
elif lang == 'zh':
bot.send_message(message.chat.id, f'城市 "{city}" 已添加到收藏夹!')
elif lang == 'be':
bot.send_message(message.chat.id, f'Горад "{city}" дададзены ў абранае!')
else:
bot.send_message(message.chat.id, f'City "{city}" added to favourites!')
else:
if lang == 'ru':
bot.send_message(message.chat.id, f'Город "{city}" уже в избранном!')
elif lang == 'en':
bot.send_message(message.chat.id, f'City "{city}" is already in favourites!')
elif lang == 'es':
bot.send_message(message.chat.id, f'¡La ciudad "{city}" ya está en favoritos!')
elif lang == 'zh':
bot.send_message(message.chat.id, f'城市 "{city}" 已在收藏夹中!')
elif lang == 'be':
bot.send_message(message.chat.id, f'Горад "{city}" ужо ў абраным!')
else:
bot.send_message(message.chat.id, f'City "{city}" is already in favourites!')
def delete_favourite(message):
global lang
username = message.from_user.username
try:
index = int(message.text.strip()) - 1
if username in info and 0 <= index < len(info[username]):
deleted_city = info[username].pop(index)
if lang == 'ru':
bot.send_message(message.chat.id, f'Город "{deleted_city}" удален из избранного!')
elif lang == 'en':
bot.send_message(message.chat.id, f'City "{deleted_city}" deleted from favourites!')
elif lang == 'es':
bot.send_message(message.chat.id, f'¡Ciudad "{deleted_city}" eliminada de favoritos!')
elif lang == 'zh':
bot.send_message(message.chat.id, f'城市 "{deleted_city}" 已从收藏夹中删除!')
elif lang == 'be':
bot.send_message(message.chat.id, f'Горад "{deleted_city}" выдалены з абранага!')
else:
bot.send_message(message.chat.id, f'City "{deleted_city}" deleted from favourites!')
else:
if lang == 'ru':
bot.send_message(message.chat.id, 'Неверный номер города!')
elif lang == 'en':
bot.send_message(message.chat.id, 'Invalid city number!')
elif lang == 'es':
bot.send_message(message.chat.id, '¡Número de ciudad inválido!')
elif lang == 'zh':
bot.send_message(message.chat.id, '无效的城市编号!')
elif lang == 'be':
bot.send_message(message.chat.id, 'Няправільны нумар горада!')
else:
bot.send_message(message.chat.id, 'Invalid city number!')
except ValueError:
if lang == 'ru':
bot.send_message(message.chat.id, 'Пожалуйста, введите число!')
elif lang == 'en':
bot.send_message(message.chat.id, 'Please enter a number!')
elif lang == 'es':
bot.send_message(message.chat.id, '¡Por favor ingresa un número!')
elif lang == 'zh':
bot.send_message(message.chat.id, '请输入数字!')
elif lang == 'be':
bot.send_message(message.chat.id, 'Калі ласка, увядзіце лік!')
else:
bot.send_message(message.chat.id, 'Please enter a number!')
bot.infinity_polling()