Всем Хай. Сегодня Мы выполним простенький заказ по Python.
В нашем ТЗ была просьба написать бота для VK, который сможет переводить текст с англ на рус и на оборот.
Для перевода текста Мы будем использовать библиотеку googletrans, vk-api
Начнем с установки модулей:
pip install vk-api
pip install googletrans
Теперь можно приступать к работе, создаем файл python, Я его назвал main.py
Импортируем установленные ранее модули.
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
import googletrans
from googletrans import Translator
Далее нам нужно создать переменные для:Google Translete, Токена VK, ID группы VK и еще создадим лист с командами для бота.
translator = Translator()
TOKEN = "77htj97syr60pxv3ecatqfclhn0868813049aa828ac64c00478836"
GROUP_ID = "19XXXXXXX"
list = ["Бот", "бот", "Bot", "bot", ",jn", "<jn", "Начать", "начать", "Команды", "коман
Далее Мы должны подключиться к нашей группе:
vk = vk_api.VkApi(token=TOKEN)
vk._auth_token()
vk.get_api()
longpoll = VkBotLongPoll(vk, GROUP_ID)
Создаем функцию для отправки сообщений:
def write_msg(peer_id, message):
vk.method("messages.send", {"peer_id": peer_id, "message": message, "random_id": 0})
Далее создаем цикл работы нашего бота и указываем в нем, что бы бот отслеживал сообщения которые прейдут в личные сообщения группы.
while True:
for event in longpoll.listen():
if event.type == VkBotEventType.MESSAGE_NEW:
if event.object.peer_id == event.object.from_id:
Создадим переменную в которую будут записываться текст в виде списка, текст будет разделяться по отступам, и записываться по отдельности в список rcmd
cmd = event.object.text.lower()
rcmd = cmd.replace(' ', ' ').split()
Далее Мы создаем первую команду, мне нужно было указать еще команду правила и инструкция.
if cmd in list:
vk.method("messages.send", {"peer_id": event.object.peer_id, "message":
"""Список команд:
-Переведи en Привет
-Правила
-Инструкция""", "random_id": 0})
Команда Инструкция и правила, должны были кидать ссылку на статью с ними, по этому я оставил место для ссылки.
elif cmd == 'правила':
vk.method("messages.send", {"peer_id": event.object.peer_id, "message":"Правила пользования Ботом:", "random_id": 0})
elif cmd == 'инструкция':
vk.method("messages.send", {"peer_id": event.object.peer_id, "message":"Инструкция пользования Ботом:", "random_id":
И вот и он сам код с переводом текста,
elif rcmd[0] == "переведи":
lang = rcmd[1]
text = rcmd
text.remove(rcmd[0])
text.remove(rcmd[0])
text = ' '.join(text)
try:
result = translator.translate(text, dest=lang)
vk.method("messages.send", {"peer_id": event.object.peer_id, "message":result.text, "random_id": 0})
except Exception as e:
vk.method("messages.send", {"peer_id": event.object.peer_id, "message":"В боте произошла ошибка, попробуйте перевести ваше предложение разделив его по частям", "random_id": 0})
Давайте разберем его, когда человек пишет команду боту, бот разделяет команду.Пример:
Было: cmd = ["Перевод en Привет"]
Стало: rcmd = ["Перевод", "en", "Привет"]
В переменную lang мы передаем на какой язык нужно перевести текст, в переменную text записывается сам текст для перевода. Команда (text.remove(rcmd[0])) удаляет первое слово два раза из списка text.
Было: text = ["Перевод", "en", "Привет"]
Стало: text = ["Привет"]
Далее result = translator.translate(text, dest=lang) значение text это сам текст для перевода, а lang это на какой язык нужно перевести, и в конце Мы отправляем result.text, при этом желательно указать сам перевод текста и отправку в значении try, это связано с тем, что библиотека Google бывает выдает сбои при переводе, Я сам не знаю как это работает, но порой одно и то же слово она не хочет переводить.
result = translator.translate(text, dest=lang)
vk.method("messages.send", {"peer_id": event.object.peer_id, "message":result.text, "random_id": 0})
Полная версия бота: КЛИК