A
A
Andrey Savchenko2020-07-08 22:04:39
Python
Andrey Savchenko, 2020-07-08 22:04:39

Reaction to the "bad message". How to setup?

Hello, there is a small problem. I want to make a reaction to the mat. If the user writes " mate ", then the bot answers him. But, if the user writes "any text mat ", then the bot simply ignores this message. Line 85-86: elif response in rar: #0
send_message(vk, 'user_id', event.user_id, message='Don't say that, you might get banned!')

5f0617f35140b029428026.jpeg

import sys
sys.path.insert(0, '../')

from vk_api.longpoll import VkLongPoll, VkEventType
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
import vk_api
from datetime import datetime
import random
import os
import time

# DEFAULT, NEGATIVE, POSITIVE, PRIMARY
# API-ключ созданный ранее
token = "СЕКРЕТ"

# Авторизуемся как сообщество
vk = vk_api.VkApi(token=token)

longpoll = VkLongPoll(vk)

#список
rar = ["мат", "мат2", "мат3"]

def create_keyboard(response):
    keyboard = VkKeyboard(one_time=False)

    if response == 'помощь':

        keyboard.add_button('Привет', color=VkKeyboardColor.POSITIVE)
        keyboard.add_button('Кто я?', color=VkKeyboardColor.DEFAULT)
        keyboard.add_button('Как дела?', color=VkKeyboardColor.DEFAULT)

        keyboard.add_line()

        keyboard.add_button('Завещание', color=VkKeyboardColor.PRIMARY)
        keyboard.add_button('Конфуций', color=VkKeyboardColor.PRIMARY)
        keyboard.add_button('Тест', color=VkKeyboardColor.PRIMARY)

        keyboard.add_line()  # Переход на вторую строку
        keyboard.add_button('Закрыть', color=VkKeyboardColor.NEGATIVE)

        keyboard.add_line()
        keyboard.add_button('Iphone 10 XS MAX', color=VkKeyboardColor.PRIMARY)
        keyboard.add_button('Пока', color=VkKeyboardColor.NEGATIVE)
        keyboard.add_button('Взлом пентагона', color=VkKeyboardColor.PRIMARY)

        keyboard.add_line()
        keyboard.add_button('Сотрудничество', color=VkKeyboardColor.POSITIVE)
        keyboard.add_button('Помощь', color=VkKeyboardColor.POSITIVE)
        keyboard.add_button('Состав', color=VkKeyboardColor.POSITIVE)


    elif response == 'привет':
        keyboard.add_button('Помощь', color=VkKeyboardColor.POSITIVE)

    elif response == 'тест':
        keyboard.add_button('Я человек', color=VkKeyboardColor.POSITIVE)
        keyboard.add_button('Я пришелец', color=VkKeyboardColor.POSITIVE)
        keyboard.add_button('Я инопришеленец', color=VkKeyboardColor.POSITIVE)

    elif response == 'закрыть':
        print('закрываем клавиатуру')
        return keyboard.get_empty_keyboard()

    keyboard = keyboard.get_keyboard()
    return keyboard


def send_message(vk, id_type, id, message=None, keyboard=None, rar=None):
    vk.method('messages.send',{id_type: id, 'message': message, 'random_id': random.randint(-2147483648, +2147483648), 'keyboard': keyboard, 'rar' : rar})

for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW:
        print('Сообщение пришло в: ' + str(datetime.strftime(datetime.now(), "%H:%M:%S")))
        print('Текст сообщения: ' + str(event.text))
        print('Сообщение от пользователя: ' + str(event.user_id))
        response = event.text.lower()
        keyboard = create_keyboard(response)

        if event.from_user and not event.from_me:
            if response == "начать": #НАЧАТЬ
                send_message(vk, 'user_id', event.user_id, message= 'Приветствую тебя! Напиши "Помощь" чтобы узнать команды бота!')
            elif response == "Беседа": #0
                send_message(vk, 'user_id', event.user_id, message='Чтобы вступить туда, напиши об это @pelasiknice или @sozdatelbota')
            elif response in rar: #0
                send_message(vk, 'user_id', event.user_id, message='Не говори так, ведь можешь получить бан!')
            elif response == "привет": #1
                send_message(vk, 'user_id', event.user_id, message='Нажми на кнопку, чтобы получить список команд!',keyboard=keyboard)
            elif response == "помощь": #2
                send_message(vk, 'user_id', event.user_id, message= 'Список команд бота: \n \n 1)Привет - Я приветствую тебя \n 2)Помощь - список команд \n 3)Конфуций - говорю мудрую фразу \n 4)Кто я? - скажу кто ты \n 5)Как дела? - скажу как у меня дела \n 6)Состав - всё администраторы сообщества \n 7)iphone 10 xs max - Дам тебе Айфон \n 8)Тест - Задам вопросы \n 9) Сотрудничество - назову администраторов \n 10)Завещание - пусто \n 11)Пока - прощаюсь с тобой \n 12)Взлом пентагона - взломаю любую вещь \n 13)Закрыть - закрывает клавиатуру', keyboard=keyboard)
            elif response == "конфуций": #3
                send_message(vk, 'user_id', event.user_id, message='Делай мемы, и они попадут в эту группу!')
            elif response == "кто я?": #4
                send_message(vk, 'user_id', event.user_id, message='Ты человек, но это не точно❤')
            elif response == "как дела?": #5
                send_message(vk, 'user_id', event.user_id, message='Нормас, а у тебя вижу так себе . Напиши что-то боту, чтобы скучно не было')
            elif response == "состав": #6
                send_message(vk, 'user_id', event.user_id, message='Программист: @pelasiknice \n Помощник: @fl1xer339')
            elif response == "iphone 10 xs max": #7
                send_message(vk, 'user_id', event.user_id, message='А тебе не жирно сразу айфон?')
            elif response == "тест": #8
                send_message(vk, 'user_id', event.user_id, message='Кто ты? \n 1) Я человек \n 2) Я пришелец \n 3) Я инопришеленец☢',keyboard=keyboard)
            elif response == "сотрудничество": #9
                send_message(vk, 'user_id', event.user_id, message='Пиши им: @pelasiknice или @fl1xer339')
            elif response == "завещание":  #10
                send_message(vk, 'user_id', event.user_id, message='А, точно. Я же никому ничего не завещал:)')
            elif response == "пока": #11
                send_message(vk, 'user_id', event.user_id, message='Пока:( Возвращайся поскорее!')
            elif response == "взлом пентагона":  # 9
                send_message(vk, 'user_id', event.user_id, message='Ваша жЕпа успешно взломана')
            elif response == "я человек": #Я ЧЕЛОВЕК
                send_message(vk, 'user_id', event.user_id, message='Хорошо, ты нормальный. Проход открыт! (пиши команду: Помощь)')
            elif response == "я пришелец":  # Я ПРИШЕЛЕЦ
                send_message(vk, 'user_id', event.user_id, message='Так, проход запрещён. Возвращайся назад в ☢зону 51☢! (пиши команду: Помощь)')
            elif response == "я инопришеленец":  # Я ПРИШЕЛЕЦ
                send_message(vk, 'user_id', event.user_id, message='Стоп, кто? Кхм, думал тебя пытать. А так проходи, проходи... (пиши команду: Помощь)')



            elif response=='закрыть':
                send_message(vk, 'user_id', event.user_id, message='Закрываю клавиатуру',keyboard=keyboard)

Answer the question

In order to leave comments, you need to log in

2 answer(s)
S
soremix, 2020-07-08
@PelasikNice

You check for the occurrence of a sentence in a list of words . You need to break your text into words, and check for occurrences of each word by converting it to lowercase. Replace with:
elif response in rar: #0

elif [word for word in response.split() if word.lower() in rar]:

either this option:
elif any(word in rar for word in response.lower().split()):

The principle of operation of the first option: the response is split into words by space, each word is reduced to lowercase and checked for presence in the rar list ; if the word is in the list, it is added to our new list. If the list is empty (not a single word from the sentence was in the filter list), then bool() from such a list will return False and the construction will not be executed. If there is at least one word in the list, True
will be returned . Of course, this is all done by simply adding a number\letter\symbol to the word. To check with this in mind, you will need to write a slightly different code, and false positives during partial verification cannot be avoided. Let's say you can do this:
elif any(word in response.lower() for word in rar):

Now even "This swear word" will be a trigger, even if in rar, in fact, there is no such word "swear word", there is only a part of it
rar = ["мат", "мат2", "мат3"]

L
Lynatik001, 2020-07-08
@Lynatik001

regular expressions for you. they will rule everything out anyway)
and I would also suggest storing all events "response == "I am an alien":" in the database, gu and the answer to it is also there. and then an elementary bot, and already so much garbage. and then what)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question