Быстрые сообщения для телеграм на Python + telethon
Начнём как обычно с зависимостей.
from telethon import TelegramClient, events, sync import pyPrivnote as pn import requests import re
Далее как обычно - мы инициализируем приложения телеграм для либы telethon
api_id = 333333
api_hash = "123asd123asd123asd123ase"
phone = "+880005553535"
client = TelegramClient("session", api_id, api_hash)
client.start()
client.sign_in(phone)
Объяснения что это и зачем было в статье по привнотам, вот тут: https://teletype.in/@codingcommunity/BJszHdLvN
Далее нам необходим яндекс токен для перевода слов или предложений.
https://translate.yandex.ru/developers/keys
Получить его можно тут. Естественно у вас должен быть аккаунт яндекс.
Далее мы его записываем в переменную и создаём 2 функции по переводу с РУ на англ и наоборот.
y_token = "trnsl.1.1.МНОГОМНОГОМНОГОМНОГОСИМВОЛОВ"
def en_ru(text):
params = "text={}&lang=en-ru&format=plain".format(text)
URL = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=" + y_token + "&" + params
get = requests.get(URL).json()["text"][0]
return get
def ru_en(text):
params = "text={}&lang=ru-en&format=plain".format(text)
URL = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=" + y_token + "&" + params
get = requests.get(URL).json()["text"][0]
return get
Ну тут всё просто. В соответствии с их документацией нам необходимо передать параметры по которым будет идти перевод и сам текст. На выходе мы получаем переведенный текст. 2 функции идентичны. Сначала мы создали переменную params в которую записали наш текст, затем идёт lang=en-ru а это значит что мы будем передавать английский текст и хотим получить русский текст. Далее мы создаём URL который будет отправляется в виде запроса, тут всё так же по документации яндекса. Далее передаём запрос, парсим с ответа в формате json переведённый текст. Вторая функция та же самая. Можно было сделать одну функцию и передавать в неё параметр языка. Но раньше я об этом не думал :D
Теперь идёт хэндлер для отлова сообщений.
@client.on(events.NewMessage(outgoing=True))
async def my_event_handler(event):
if "//btc" in event.raw_text:
await event.edit('3Pqs')
elif "//eth" in event.raw_text:
await event.edit('0xF')
elif "//bch" in event.raw_text:
await event.edit('bitcoincash:qq')
elif "//ltc" in event.raw_text:
await event.edit('MD')
elif "//dash" in event.raw_text:
await event.edit('XbUVu')
elif "//ru_en" in event.raw_text:
tee = event.raw_text[8:]
await event.edit(ru_en(tee))
elif "//en_ru" in event.raw_text:
tee = event.raw_text[8:]
await event.edit(en_ru(tee))
elif "//help" in event.raw_text:
await event.edit('Работаю.')
await client.delete_messages(event.chat_id, event.id)
elif "//google" in event.raw_text:
tee = event.raw_text[9:]
await event.edit("https://google.gik-team.com/?q=" + str(tee.replace(" ", "+")))
elif "//calc" in event.raw_text:
tee = event.raw_text[7:]
result = eval(tee)
await event.edit(str(result))
Тут всё просто, бывают моменты что за работу мне платят в крипте, поэтому я записал заранее свои кошельки и при вводе в чате //dash - это слово заменится на мой dash кошелек. Такс, с кошельками мы разобрались. Далее идёт перевод. Мы получаем строку текста, нам в переводчике не нужны //en_ru или //ru_en так что мы отсекаем всё что после них, то бишь - мы создаем переменную tee = event.raw_test[8:] . А это значит что мы будем получать весь текст после 8 символов и передаём его в функцию переводчика. Далее получаем от неё переведенный текст и изменяем исходное сообщение. Работает оно так:
Далее у нас идёт интересная вещь. Иногда надоедают вопросы на которые отвечал уже сотни раз, поэтому я посылаю людей в гугл. После написания //google нужно указать поисковой запрос. Результат можете проверить сами С:
Ну и одно из последний это калькулятор. Использует он eval. К счастью для нас в хэндлере стоит @client.on(events.NewMessage(outgoing=True)) . То есть только наши сообщения. А вообще eval - Разбирает и исполняет указанное выражение.
И на последнее я оставил функции отлова привнотов о которой писал в одной из первых статей и в начале данного "гайда".
@client.on(events.NewMessage)
async def my_event_handler(event):
if re.findall(r'(https://privnote.com/)', event.raw_text, re.I):
awesome_re = re.search("(?P<url>https?://[^\s]+)", event.raw_text).group("url")
note_text = pn.read_note(str(awesome_re))
await client.send_message("https://t.me/joinchat/AAAAAFjфффффффффф", str(note_text))
Ну и в конце что бы всё работало надо указать:
client.run_until_disconnected()
А теперь весь листинг программы:
from telethon import TelegramClient, events, sync
import pyPrivnote as pn
import requests
import re
api_id = 333333
api_hash = "123asd123asd123asd123ase"
phone = "+880005553535"
client = TelegramClient("session", api_id, api_hash)
client.start()
client.sign_in(phone)
y_token = "trnsl.1.1.МНОГОМНОГОМНОГОМНОГОСИМВОЛОВ"
def en_ru(text):
params = "text={}&lang=en-ru&format=plain".format(text)
URL = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=" + y_token + "&" + params
get = requests.get(URL).json()["text"][0]
return get
def ru_en(text):
params = "text={}&lang=ru-en&format=plain".format(text)
URL = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=" + y_token + "&" + params
get = requests.get(URL).json()["text"][0]
return get
@client.on(events.NewMessage(outgoing=True))
async def my_event_handler(event):
if "//btc" in event.raw_text:
await event.edit('3Pqs')
elif "//eth" in event.raw_text:
await event.edit('0xF')
elif "//bch" in event.raw_text:
await event.edit('bitcoincash:qq')
elif "//ltc" in event.raw_text:
await event.edit('MD')
elif "//dash" in event.raw_text:
await event.edit('XbUVu')
elif "//ru_en" in event.raw_text:
tee = event.raw_text[8:]
await event.edit(ru_en(tee))
elif "//en_ru" in event.raw_text:
tee = event.raw_text[8:]
await event.edit(en_ru(tee))
elif "//help" in event.raw_text:
await event.edit('Работаю.')
await client.delete_messages(event.chat_id, event.id)
elif "//google" in event.raw_text:
tee = event.raw_text[9:]
await event.edit("https://google.gik-team.com/?q=" + str(tee.replace(" ", "+")))
elif "//calc" in event.raw_text:
tee = event.raw_text[7:]
result = eval(tee)
await event.edit(str(result))
@client.on(events.NewMessage)
async def my_event_handler(event):
if re.findall(r'(https://privnote.com/)', event.raw_text, re.I):
awesome_re = re.search("(?P<url>https?://[^\s]+)", event.raw_text).group("url")
note_text = pn.read_note(str(awesome_re))
await client.send_message("https://t.me/joinchat/AAAAAFjфффффффффф", str(note_text))
client.run_until_disconnected()
На этом всё. Мой код не идеален, да и вообще, это всё костыли. Не повторяйте моих ошибок.