-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.py
274 lines (227 loc) · 19.4 KB
/
main.py
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
import telebot
from telebot.util import extract_arguments
from telebot.types import Message
import random
import requests
import schedule
import time
from config import TELEGRAM_API_TOKEN, api_key, pzpi_id
bot = telebot.TeleBot(TELEGRAM_API_TOKEN)
@bot.message_handler(commands=['start', 'help'])
def send_kawaii_instructions(message):
instructions = (
"Konnichiwa~! To make your message kawaii, simply type /kawaii followed by your message. Also you can reply and quote this command.\n"
"For example: /kawaii Hello, how are you? UwU\n"
"Also, U can ask this bot for weather in your city, just type /weather followed by name of your city :3\n"
"For example: /weather Kharkiv\n"
"If you want to watch some anime, but don`t know which one exactly, you can use /randomanime OwO\n"
"If your friend forgot to change keyboard layout and you don`t understand, what is he saying, you can always use /translate.\n"
"Also you can reply and quote this command.\n"
"If you wanna tell smth important to the chat, you can use /alert\n"
"Author: @limoncello62"
)
bot.reply_to(message, instructions)
@bot.message_handler(commands=['kawaii'])
def kawaii_command(message: Message):
user_message = extract_arguments(message.text)
if user_message:
answer = user_message
elif message.reply_to_message:
if message.quote and message.quote.text:
answer = message.quote.text
elif message.reply_to_message.text:
answer = message.reply_to_message.text
else:
answer = "Nya~! The message that you replied to doesn't have any text."
else:
answer = "Nya~! Please provide a message after the /kawaii command."
bot.reply_to(message, make_kawaii(answer))
def make_kawaii(user_message: str):
emoticons = ["Nya!", "OwO", "UwU", ":3", "<3", ";3", ">_<", "><", "^-^", "^^", "ᵔᵕᵔ", "nyaaaa~", ">w<", ">∇<", '>:3', ">~<", '≽^•⩊•^≼', "≧◡≦"]
random_emoticon = random.choice(emoticons)
if random_emoticon in ["UwU", "OwO"]:
for letter in ['s', 'l', 'r', 'x']:
user_message = user_message.replace(letter, "w")
return user_message + " " + random_emoticon
@bot.message_handler(commands=['weather'])
def get_weather(message):
try:
city = message.text.split('/weather ', 1)[1]
url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}'
response = requests.get(url)
weather_data = response.json()
if 'main' in weather_data and 'weather' in weather_data:
main_weather = weather_data['weather'][0]['main']
description = weather_data['weather'][0]['description']
wind_speed = weather_data['wind']['speed']
temperature_kelvin = weather_data['main']['temp']
feels_like_kelvin = weather_data['main']['feels_like']
rain_probability = weather_data.get('rain', {}).get('1h', 0)
snow_probability = weather_data.get('snow', {}).get('1h', 0)
temperature_celsius = temperature_kelvin - 273.15
feels_like_celsius = feels_like_kelvin - 273.15
emoji = ''
if "Clear" in main_weather:
emoji = "☀️"
elif "Clouds" in main_weather:
emoji = "☁️"
elif "Rain" in main_weather:
emoji = "🌧️"
elif "Snow" in main_weather:
emoji = "❄️"
elif "Mist" in main_weather:
emoji = "🌫️"
air_pollution_url = f'http://api.openweathermap.org/data/2.5/air_pollution?lat={weather_data["coord"]["lat"]}&lon={weather_data["coord"]["lon"]}&appid={api_key}'
air_pollution_response = requests.get(air_pollution_url)
air_pollution_data = air_pollution_response.json()
if 'list' in air_pollution_data and len(air_pollution_data['list']) > 0:
air_quality = air_pollution_data['list'][0]['main']['aqi']
bot.reply_to(message, f'The weather in {city} is {main_weather} {emoji} ({description}) Nya!\n'
f'Temperature: {temperature_celsius:.2f}°C! :3\n'
f'Feels like: {feels_like_celsius:.2f}°C! UwU\n'
f'Wind Speed: {wind_speed} m/s! 🚩\n'
f'Air Quality Index (AQI): {air_quality} OwO\n'
f'Rain probability in next hour: {rain_probability*100:.0f}% 💦\n'
f'Snow probability in next hour: {snow_probability*100:.0f}% ☃️')
else:
bot.reply_to(message, f'Sorry, I couldn\'t retrieve the air pollution information for {city}. Nya~ :(')
else:
bot.reply_to(message, f'Sorry, I couldn\'t retrieve the weather information for {city}. Nya~ :(')
except IndexError:
bot.reply_to(message, 'Please provide a city name after the /weather command. UwU')
except Exception as e:
bot.reply_to(message, f'Something went wrong: {str(e)}. OwO')
@bot.message_handler(commands=['randomanime'])
def get_random_anime(message):
try:
url = f'https://api.jikan.moe/v4/random/anime'
response = requests.get(url)
randani = response.json()
bot.reply_to(message, f"Your random anime: {randani['data']['url']}")
except Exception as e:
bot.reply_to(message, f'Something went wrong: {str(e)}. OwO')
@bot.message_handler(commands=['translate'])
def trans(message):
user_message = extract_arguments(message.text)
answer = ''
if user_message:
answer = user_message
elif message.reply_to_message:
if message.quote and message.quote.text:
answer = message.quote.text
elif message.reply_to_message.text:
answer = message.reply_to_message.text
if answer:
if is_ukrainian(answer):
answer = map_ua_to_en(answer)
else:
answer = map_en_to_ua(answer)
else:
answer = "Please provide a message to translate after the /translate command or reply to the message you want to translate. :3"
bot.reply_to(message, answer)
def is_ukrainian(text):
ukrainian_alphabet = set("АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯабвгґдеєжзиіїйклмнопрстуфхцчшщьюя")
return any(char in ukrainian_alphabet for char in text)
def map_en_to_ua(text):
english_to_ukrainian = { "~": "₴", "!": "!", '@': '"', "#": "№", "$": ";", "%": "%", "^": ":", "&": "?", "*": "*", "(": "(",")": ")", "_": "_", "+": "+",
"Q": "Й", "W": "Ц", "E": "У", "R": "К", "T": "Е", "Y": "Н", "U": "Г", "I": "Ш", "O": "Щ", "P": "З", "{": "Х", "}": "Ї",
"A": "Ф", "S": "І", "D": "В", "F": "А", "G": "П", "H": "Р", "J": "О", "K": "Л", "L": "Д", ":": "Ж", '"': 'Є', "|": "/",
"Z": "Я", "X": "Ч", "C": "С", "V": "М", "B": "И", "N": "Т", "M": "Ь", "<": "Б", ">": "Ю", "?": ",",
"`": "'", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "7": "7", "8": "8", "9": "9", "0": "0", "-": "-", "=": "=",
"q": "й", "w": "ц", "e": "у", "r": "к", "t": "е", "y": "н", "u": "г", "i": "ш", "o": "щ", "p": "з", "[": "х", "]": "ї",
"a": "ф", "s": "і", "d": "в", "f": "а", "g": "п", "h": "р", "j": "о", "k": "л", "l": "д", ";": "ж", "'": "є", "\\": "\\",
"z": "я", "x": "ч", "c": "с", "v": "м", "b": "и", "n": "т", "m": "ь", ",": "б", ".": "ю", "/": "." }
def map_character(char):
return english_to_ukrainian.get(char, char)
mapped = "".join(map_character(letter) for letter in text)
return mapped
def map_ua_to_en(text):
ukrainian_to_english = { "₴": "~", "!": "!", '"': '@', "№": "#", ";": "$", "%": "%", ":": "^", "?": "&", "*": "*", "(": "(",")": ")", "_": "_", "+": "+",
"Й": "Q", "Ц": "W", "У": "E", "К": "R", "Е": "T", "Н": "Y", "Г": "U", "Ш": "I", "Щ": "O", "З": "P", "Х": "{", "Ї": "}",
"Ф": "A", "І": "S", "В": "D", "А": "F", "П": "G", "Р": "H", "О": "J", "Л": "K", "Д": "L", "Ж": ":", "Є": '"', "/": "|",
"Я": "Z", "Ч": "X", "С": "C", "М": "V", "И": "B", "Т": "N", "Ь": "M", "Б": "<", "Ю": ">", ",": "?",
"'": "`", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "7": "7", "8": "8", "9": "9", "0": "0", "-": "-", "=": "=",
"й": "q", "ц": "w", "у": "e", "к": "r", "е": "t", "н": "y", "г": "u", "ш": "i", "щ": "o", "з": "p", "х": "[", "ї": "]",
"ф": "a", "і": "s", "в": "d", "а": "f", "п": "g", "р": "h", "о": "j", "л": "k", "д": "l", "ж": ";", "є": "'", "\\": "\\",
"я": "z", "ч": "x", "с": "c", "м": "v", "и": "b", "т": "n", "ь": "m", "б": ",", "ю": ".", ".": "/" }
def map_character(char):
return ukrainian_to_english.get(char, char)
mapped = "".join(map_character(letter) for letter in text)
return mapped
@bot.message_handler(commands=['alert', 'ALERT'])
def kok(message):
user_message = extract_arguments(message.text)
if user_message:
answer = user_message
elif message.reply_to_message:
if message.quote and message.quote.text:
answer = message.quote.text
elif message.reply_to_message.text:
answer = message.reply_to_message.text
else:
answer = "THERE IS NO TEXT"
else:
answer = ''
symbols_amount = random.randint(5, 50)
answer += create_random_alert_symbols(symbols_amount)
bot.reply_to(message, answer.upper())
def create_random_alert_symbols(amount:int) -> str:
alert_symbols = ["❗️", "🔉", "🆘", "🗣", "⚠️", "🔥"]
return "".join(random.choice(alert_symbols) for i in range(amount))
# from this part there are some silly commands for my friends
@bot.message_handler(commands=['masshironayuki'])
def song(message):
bot.reply_to(message, "https://www.youtube.com/watch?v=vKhpQTYOpUU")
@bot.message_handler(commands=['serhii'])
def maps(message):
random_num = random.randint(1, 100)
bot.reply_to(message, f"МАПИ " * random_num)
@bot.message_handler(commands=['mykyta'])
def ro(message):
random_num = random.randint(1, 100)
bot.reply_to(message, "Родичі " * random_num + "\nAnd complaining about стипендія, of course")
@bot.message_handler(commands=['dimasik'])
def ro(message):
random_num = random.randint(1, 100)
bot.reply_to(message, f"ПИВО " * random_num)
@bot.message_handler(commands=['timur'])
def ro(message):
random_num = random.randint(1, 100)
bot.reply_to(message, f"Їбати баранів " * random_num)
@bot.message_handler(commands=['liliia'])
def ipso(message):
messages = ["київстар лежить бо це теж один із планів цифрової трансформації?", "Київ візьмуть за 3 дні", "А хто піде відвойовувати його? У нас тупо нема кому", "Ну завтра ядеркою вʼїбати по Києву можуть", "збивають тільки в києві, інші міста хай хавають", "Ось би як в Росії, у яких склади в Сибірі, їм там все за 10-14 днів з Китаю приходить", "цікаво скіки людей лишиться в україні коли відкриють кордони", "живемо на рівні розвитку уганди якоїсь", "да їм тут 30 км пройти і вони Харків захоплять"]
bot.reply_to(message, f"{random.choice(messages)}")
@bot.message_handler(commands=['sarcasm'])
def ro(message):
bot.reply_to(message, "(САРКАЗМ!!!!!!!!!)")
@bot.message_handler(commands=['ilya'])
def ro(message):
bot.reply_to(message, "C# (произносится си шарп) — объектно-ориентированный язык программирования общего назначения. Разработан в 1998—2001 годах группой инженеров компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота как язык разработки приложений для платформы Microsoft .NET Framework и .NET Core. Впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, переменные, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML. Переняв многое от своих предшественников — языков C++, Delphi, Модула, Smalltalk и, в особенности, Java — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов (между тем допускается множественная реализация интерфейсов).")
@bot.message_handler(commands=['rostik'])
def ipso(message):
messages = ["КАКИМ будет НОВОЕ КОНТРНАСТУПЛЕНИЕ Украины? ПОДРОБНО о ПЛАНАХ ВСУ на 2024 год","ВОТ ТАК ОРУЖИЕ! ВСУ начали подготовку К ...", "ДОН-ДОН ИГРАЕТ с Кремлем? РАЗБОР ТУПЫХ заявлений КАДЫРОВА", "Путину стоит ОПАСАТЬСЯ ЭТОГО ⚡️ После ВЫБОРОВ 2024 на Россию ОБРУШИТСЯ...", "ТОП-5 ХИТОВ российской ПРОПАГАНДЫ: какой БРЕД несли РТЫ ПУТИНА в 2023", "Дагестанские ученые разработали очко барану"]
bot.reply_to(message, f"{random.choice(messages)}")
def tagi(user_ids):
tags = ''
for user_id in user_ids:
tags += f'{user_id}\n'
return tags
def split_tags(user_ids, chunk_size):
for i in range(0, len(user_ids), chunk_size):
yield user_ids[i:i + chunk_size]
@bot.message_handler(commands=['tag'])
def xoxly(message):
pzpi_id = ["@SALO_way", "@Novomova", "@Serhijb", "@I_maladec", "@ukrinel", "@kostiantym", "@yaelkota", "@ordinato3", "@Bulhak0v", "@limoncello62", "@j0nathan550"]
tagged_users_chunks = list(split_tags(pzpi_id, 5))
for chunk in tagged_users_chunks:
bot.reply_to(message, f"Хохли, загальний збір!\n{tagi(chunk)}")
@bot.message_handler(commands=["randomshurup"])
def shurup(message: Message):
shurup_data = ["Шуруп з потайною головкою для твердих порід деревини TORX", "Шуруп гіпсокартонний по дереву", "Шуруп з потайною головкою з хрестоподібним шліцом", "Шуруп для гіпсокартону до дерева на стрічці оцинкований ESSVE", "Шуруп з потайною головкою для твердих порід деревини POZIDRIV (PZ)", "Шуруп з напівкруглою головкою з хрестоподібним шліцом (нержавійна сталь А2)", "Шуруп для твердого гіпсокартону на стрічці ESSVE фосфат", "Комбінований гвинт-шуруп", "Шуруп - конфірмат", "Комбінований шуруп-шуруп", "Шуруп гіпсокартонний самосверлящий", "Шуруп для зшивання гіпсокартону оцинкований", "Шуруп для легкого бетону півкруг / WAF", "Шуруп гіпсокартонний по дереву ТАЙВАНЬ", "Шуруп по дереву DIN 571", "Шуруп універсальний з C-гаком", "Шуруп універсальний з O-гаком", "Шуруп універсальний з пресшайбою"]
shurup_links = ["https://fixpro.ua/image/cache/catalog/photo5195223043339826598-1000x1000.jpg", "https://fixpro.ua/image/cache/catalog/photo5390828558512927507-1000x1000.jpg", "https://fixpro.ua/image/cache/catalog/photo5406747236320261296-1000x1000.jpg", "https://fixpro.ua/image/cache/catalog/%D1%84%D0%BE%D1%82%D0%BA%D0%B8/%D0%A8%D1%83%D1%80%D1%83%D0%BF%D1%8B-%D1%81%D0%B0%D0%BC%D0%BE%D1%80%D0%B5%D0%B7%D1%8B/%D0%A7%D0%B5%D1%80%D0%BD%D1%8B%D0%B5%20%D0%B8%20%D0%91%D0%BB%D0%BE%D1%85%D0%B0/735171-1000x1000.png", "https://fixpro.ua/image/cache/catalog/%D1%84%D0%BE%D1%82%D0%BA%D0%B8/%D0%A8%D1%83%D1%80%D1%83%D0%BF%D1%8B-%D1%81%D0%B0%D0%BC%D0%BE%D1%80%D0%B5%D0%B7%D1%8B/%D0%A1%D0%B0%D0%BC%D0%BE%D1%80%D0%B5%D0%B7%D1%8B%20%D0%96%D0%B5%D0%BB,%D0%91%D0%B5%D0%BB,A2,%20%D0%A1%D1%84%D0%B5%D1%80%D0%B0%20%D0%94%D0%B5%D1%80+%D0%9C%D0%B5%D1%82/fixpro-samorez-dlya-tverdih-porod-1000x1000.jpg", "https://fixpro.ua/image/cache/catalog/333/fixpro_shurup_z_napivkug_golov_a2-1000x1000.jpg", "https://fixpro.ua/image/cache/catalog/photo_l/fix_pro_samorez_na_lente_phosphat-1000x1000.jpg", "https://fixpro.ua/image/cache/catalog/176-1000x1000.png", "https://fixpro.ua/image/cache/catalog/%20%D0%B4%D0%BB%D1%8F%20%D1%85%D0%B8%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85%20%D0%B0%D0%BD%D0%BA%D0%B5%D1%80%D0%BE%D0%B2/2819708119_w640_h640_shurup-konfirmat-5-x-1000x1000.jpg", "https://fixpro.ua/image/cache/catalog/shurup-20-1000x1000.jpg", "https://fixpro.ua/image/cache/catalog/%D1%84%D0%BE%D1%82%D0%BA%D0%B8/%D0%A8%D1%83%D1%80%D1%83%D0%BF%D1%8B-%D1%81%D0%B0%D0%BC%D0%BE%D1%80%D0%B5%D0%B7%D1%8B/%D0%A7%D0%B5%D1%80%D0%BD%D1%8B%D0%B5%20%D0%B8%20%D0%91%D0%BB%D0%BE%D1%85%D0%B0/fixpro-samorez_s-burom-1000x1000.jpg", "https://fixpro.ua/image/cache/catalog/photo_l/fixpro-samorez-essve-1000x1000.JPG", "https://fixpro.ua/image/cache/catalog/333/fixpro_waf_dlya_leg_beton-1000x1000.jpg", "https://fixpro.ua/image/cache/catalog/photo5390828558512927508-1000x1000.jpg", "https://cdn.27.ua/sc--media--prod/default/58/ef/1b/58ef1b68-8ee3-449e-a48b-f68a8f26ab2f.jpg", "https://cdn.27.ua/799/b3/81/111489_1.jpeg", "https://cdn.27.ua/799/9b/ad/170925_1.jpeg", "https://cdn.27.ua/799/b1/06/110854_1.jpeg"]
shurup_dict = {shurup_data[i]: shurup_links[i] for i in range(min(len(shurup_data), len(shurup_links)))}
random_key = random.choice(list(shurup_dict.keys()))
bot.reply_to(message, f"[{random_key}]({shurup_dict[random_key]})", parse_mode='Markdown')
if __name__ == "__main__":
bot.polling(none_stop=True, interval=0)