Найти тему
Python 3

Python, выполняем заказ Vk бот переводчик.

Всем Хай. Сегодня Мы выполним простенький заказ по 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})

Полная версия бота: КЛИК