Как мне заставить бота игнорировать такие сообщения как пересланное или кто то поделился или вовсе ссылки? вот код main.py:
import random
import vk_api
from vk_api.longpoll import VkLongPoll, VkEventType
# --
from commander.commander import Commander
from vk_bot import VkBot
# --
def write_msg(user_id, message):
vk.method('messages.send', {'user_id': user_id, 'message': message, 'random_id': random.randint(0, 2048)})
# API-ключ созданный ранее
token = "00daf022c6c519e8b2bd2cc80f23b873ef16f4287cd9a2a7ef53c9373285065ef9cbe7cca8e0ddbce27ab"
# Авторизуемся как сообщество
vk = vk_api.VkApi(token=token)
# Работа с сообщениями
longpoll = VkLongPoll(vk)
commander = Commander()
print("Server started")
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
if event.to_me:
print(f'New message from {event.user_id}', end='')
bot = VkBot(event.user_id)
if event.text[0] == "/":
write_msg(event.user_id, commander.do(event.text[1::]))
else:
abc = bot.new_message(event.text)
if len(abc) > 0:
write_msg(event.user_id, abc)
print('Text: ', event.text)
print("-------------------")
А вот код самого бота:
import bs4 as bs4
import requests
import os
class VkBot:
def __init__(self, user_id):
print("\nСоздан объект бота!")
self._USER_ID = user_id
self._USERNAME = self._get_user_name_from_vk_id(user_id)
self._COMMANDS = ["ПРИВЕТ", "ПОКА", 'ВАСЯ ДАЙ ДЗ', 'ОТКЛЮЧИТЬ БОТА', 'ВЫРУБИТЬ БОТА ТОПОРОМ']
def _get_user_name_from_vk_id(self, user_id):
request = requests.get("https://vk.com/id"+str(user_id))
bs = bs4.BeautifulSoup(request.text, "html.parser")
user_name = self._clean_all_tag_from_str(bs.findAll("title")[0])
return user_name.split()[0]
def new_message(self, message):
homework = ''
# Привет
if message.upper() == self._COMMANDS[0]:
return f"Привет-привет, {self._USERNAME}! Вот кратенький список моих команд: \nКоманда 'Вася дай дз' - Даёт тебе домашнее задание. \nКоманда 'Отключить бота' или 'Вырубить бота топорм' - Отключает бота(Только для администраторов!)"
# Пока
elif message.upper() == self._COMMANDS[1]:
return f"Пока-пока, {self._USERNAME}!"
# Домашнее задание
elif message.upper() == self._COMMANDS[2]:
try:
with open('./Homework.txt', 'r', encoding='utf-8') as f:
homework = ''.join(f.readlines())
except:
raise Exception("Файл пустой")
return f'Ошибка: Файл пустой. Бот оффлайн'
return f'Держи братюня!\n' + homework
# Отключение бота
elif message.upper() == self._COMMANDS[3]:
if self._USER_ID == 249356697:
return f'Бот был выключен. Статус Бота: Оффлайн.'
os.system('TASKKILL /F /IM python.exe')
else:
return f'Команда не выполнена! Вы не являетесь администратором! Наглость тут не любят!'
elif message.upper() == self._COMMANDS[4]:
if self._USER_ID == 249356697:
return f'Бот был вырублен. Статус Бота: Оффлайн.'
os.system('TASKKILL /F /IM python.exe')
else:
return f'Я тя ща сам топором зарублю!'
else:
return ''
@staticmethod
def _clean_all_tag_from_str(string_line):
"""
Очистка строки stringLine от тэгов и их содержимых
:param string_line: Очищаемая строка
:return: очищенная строка
"""
result = ""
not_skip = True
for i in list(string_line):
if not_skip:
if i == "<":
not_skip = False
else:
result += i
else:
if i == ">":
not_skip = True
return result