示例#1
0
def main():
    """ Пример использования bots longpoll

        https://vk.com/dev/bots_longpoll
    """

    vk_session = vk_api.VkApi(token='your_group_token')

    longpoll = VkBotLongPoll(vk_session, 'your_group_id')

    for event in longpoll.listen():

        if event.type == VkBotEventType.MESSAGE_NEW:
            print('Новое сообщение:')

            print('Для меня от: ', end='')

            print(event.obj.from_id)

            print('Текст:', event.obj.text)
            print()

        elif event.type == VkBotEventType.MESSAGE_REPLY:
            print('Новое сообщение:')

            print('От меня для: ', end='')

            print(event.obj.peer_id)

            print('Текст:', event.obj.text)
            print()

        elif event.type == VkBotEventType.MESSAGE_TYPING_STATE:
            print('Печатает ', end='')

            print(event.obj.from_id, end=' ')

            print('для ', end='')

            print(event.obj.to_id)
            print()

        elif event.type == VkBotEventType.GROUP_JOIN:
            print(event.obj.user_id, end=' ')

            print('Вступил в группу!')
            print()

        elif event.type == VkBotEventType.GROUP_LEAVE:
            print(event.obj.user_id, end=' ')

            print('Покинул группу!')
            print()

        else:
            print(event.type)
            print()
示例#2
0
文件: main.py 项目: bussy1/codyaccept
        while True:
            try:
                for event in self.check():
                    yield event
            except Exception as e:
                pass


#--------------- CONNECT ---------------------------
print(colorama.Fore.CYAN +
      '***************\n\n[*]Соеденение с сервером VK API..')

try:  # пробуем подключиться
    vk_session = vk_api.VkApi(token=config.TOKEN_GROUP)
    print(colorama.Fore.CYAN + '[*]Отправка данных для подключения..')
    longpoll = VkBotLongPoll(vk_session, config.ID_GROUP)
    vk_group = vk_session.get_api()
    print(colorama.Fore.CYAN + '[*]Сессия создана')
    print(colorama.Fore.CYAN + '[*]Успешной подключение!\n\n***************')
except:  # если получаем ошибку завершаем работу
    print(colorama.Fore.RED + '\n[*]Ошибка соединения с API VK')
    sys.exit()
#--------------------------------------------------

print(colorama.Fore.BLUE + '\nПрослушиваю сервер на заявки в группу\n')
for event in longpoll.listen():  # получаем события
    if event.type == VkBotEventType.GROUP_JOIN:
        first_name = vk_group.users.get(
            user_ids=event.obj.user_id,
            name_case='gen')[0]['first_name']  # сохраняем имя
        last_name = vk_group.users.get(
示例#3
0
文件: wheel.py 项目: Ilya069/wheelno
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from vk_api import VkUpload
import settings
from multiprocessing import Process
from datetime import datetime
import traceback
session = vk_api.VkApi(token=settings.key)
session.get_api()
longpoll = VkBotLongPoll(session, 193803197)
methods = session.get_api()
import psycopg2
import sql
import time
import menu
from vkcoinapi import *
from vk_api import VkUpload
from vkcoinapi import *
import random
#methods.messages.send(peer_id=peer_id,random_id=0,message='#.',keyboard=interface())
#refflink = https://vk.me/public189535455?ref=123
rooms_choicez = [
    'Заходим в беседу https://vk.me/join/AJQ1d_8XWhe8Tcs6LCcaZXDF'
]


def get_username(userid):
    name = methods.users.get(user_ids=userid)
    name = name[0]['first_name'] + ' ' + name[0]['last_name']
    return name
示例#4
0
def main(window):
    """ Основная функция """
    global TOKEN
    global vk_session
    global vk
    global session

    longpoll = VkBotLongPoll(vk_session, '203031537')
    with open('session_data.json') as file:
        confidants = json.load(file)["confidants"]
    for index in confidants:
        for user_id in confidants[index]:
            try:
                vk.messages.send(user_id=user_id,
                                 message="Сессия {} запущена, время: {}".format(
                                     get_session_name(),
                                     datetime.datetime.now()),
                                 random_id=random.randint(0, 2 ** 64))
            except vk_api.exceptions.ApiError:
                pass
    for event in longpoll.listen():
        if not session.is_run:  # Это нужно для прекращения функции и корректного закрытия программы
            break
        if event.type == VkBotEventType.MESSAGE_NEW:
            with open('session_data.json') as file:
                confidants = json.load(file)["confidants"]
            if event.obj.message['from_id'] in confidants['Users'] + \
                    confidants['Administrators']:
                text = event.obj.message['text'].split()
                command, session_name, *arguments = text + ['']
                user = vk.users.get(user_id=event.obj.message['from_id'])
                if session_name == get_session_name() and command != '/slist':
                    if command in commands:
                        try:
                            if command != '/stop':
                                if commands[command]:
                                    exec('session.{}(event, True, {})'.format(
                                        command[1:], arguments))
                                else:
                                    exec('session.{}(event, {})'.format(
                                        command[1:], arguments))
                                window.listWidget.addItem(
                                    '[{}] {}: {} {}'.format(
                                        datetime.datetime.now(), ' '.join(
                                            [user[0]['first_name'],
                                             user[0]['last_name']]), command,
                                        ' '.join(arguments)))
                                window.reinit()
                            else:
                                session.stop(event, False, arguments)
                        except Exception as exc:
                            vk.messages.send(
                                user_id=event.obj.message['from_id'],
                                message="ОШИБКА: {}".format(str(exc)),
                                random_id=random.randint(0, 2 ** 64))
                            window.listWidget.addItem(
                                '[{}] {}: Попытка: {} {}, ошибка: {}'.format(
                                    datetime.datetime.now(), ' '.join(
                                        [user[0]['first_name'],
                                         user[0]['last_name']]), command,
                                    ' '.join(arguments), str(exc)))
                    else:
                        vk.messages.send(user_id=event.obj.message['from_id'],
                                         message="Не существует такой команды.",
                                         random_id=random.randint(0, 2 ** 64))
                        window.listWidget.addItem(
                            '[{}] {}: Попытка: {} {}, ошибка: несуществующая команда.'.format(
                                datetime.datetime.now(), ' '.join(
                                    [user[0]['first_name'],
                                     user[0]['last_name']]), command,
                                ' '.join(arguments)))

                elif command == '/slist':
                    session.slist(event)
示例#5
0
文件: translate.py 项目: tohonny/-
import requests
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
import random as r

vk_group = (
    '187556970',
    '71fa6a50dd64673ca6fa833bedaa62d73fc76fa627615a20e1f1a046f4270bf27706d28b07aadaa9fce25'
)
YaTrans_api_key = 'trnsl.1.1.20191015T124414Z.d5eba00fc9a975a3.3e23c9466d0f149ae3972f4ebb85d17abde6864f'

vk = vk_api.VkApi(token=vk_group[1])
longpoll = VkBotLongPoll(vk, vk_group[0])


def Translate(text, lang):
    url = 'https://translate.yandex.net/api/v1.5/tr.json/translate?key=' + YaTrans_api_key + '&lang=' + lang + '&text=' + str(
        text)
    result = requests.post(url).json()
    return result


for event in longpoll.listen():
    msg = {}
    if event.type == VkBotEventType.MESSAGE_NEW:
        msg['text'] = event.obj.text
        msg['user'] = str(event.obj.from_id)
        randomnum = r.randint(-2147483648, 2147483647)

        try:
            answer = Translate(msg['text'], lang='ru')
示例#6
0
class VkBot():
    """Класс бота для соц. сети vk.com"""
    def __init__(self, authorization_data, database, function_dict,
                 measuring_system):
        """Выполняет инициализацию класса"""

        self.__database = database
        self.__room_list = self.__database.get_room_list()
        self.__token = authorization_data.get_token()
        self.__function_dict = function_dict
        self.__measuring_system = measuring_system
        # Создание экземпляров клавиатуры
        self.__function_keyboard = VkKeyboard(one_time=True)
        self.__rooms_keyboard = VkKeyboard(one_time=True)
        # Определение переменных для работы с vk-api
        self.__vk_session = vk_api.VkApi(token=self.__token)
        self.__vk = self.__vk_session.get_api()
        self.__upload = VkUpload(self.__vk_session)
        self.__longpoll = VkBotLongPoll(self.__vk_session,
                                        authorization_data.get_group_id())

    def create_rooms_keyboard(self, room_buttons_on_line=2):
        """Создание клавиатуры помещений"""

        # Получение списка помещений

        max_col = 0
        max_row = 10

        for room in self.__room_list:

            if max_col == room_buttons_on_line:
                max_col = 0
                self.__rooms_keyboard.add_line()

            self.__rooms_keyboard.add_button(
                room,
                color=VkKeyboardColor.DEFAULT,
            )

            max_col += 1
            max_row -= max_row

            if max_row == -1:
                break

    def create_function_keyboard(self, function_buttons_on_line=2):
        """Создание клавиатуры функций"""

        max_col = 0
        max_row = 8

        for func in self.__function_dict:
            if func == 'Получить текущие данные':
                self.__function_keyboard.add_button(
                    func,
                    color=VkKeyboardColor.POSITIVE,
                )
                self.__function_keyboard.add_line()
            elif max_col == function_buttons_on_line:
                max_col = 0
                self.__function_keyboard.add_line()
                self.__function_keyboard.add_button(
                    func,
                    color=VkKeyboardColor.DEFAULT,
                )
            else:
                self.__function_keyboard.add_button(
                    func,
                    color=VkKeyboardColor.DEFAULT,
                )
                max_col += 1

            max_row -= max_row
            if max_row == -1:
                break

        self.__function_keyboard.add_line()
        self.__function_keyboard.add_button("Назад",
                                            color=VkKeyboardColor.POSITIVE)

    def bot_work(self):
        """Основной алгоритм работы бота"""
        # В цикле производится проверка longpool api
        room_name = ''

        for event in self.__longpoll.listen():
            # Событие "Добавление участника в группу"
            if event.type == VkBotEventType.GROUP_JOIN:
                self.__vk.messages.send(
                    user_id=event.obj.user_id,
                    random_id=get_random_id(),
                    keyboard=self.__rooms_keyboard.get_keyboard(),
                    message=
                    ('Привет, я помогу тебе узнать температуру, влажность и давление воздуха.'
                     +
                     '\nВоспользуйся клавиатурой для взаимодействия со мной.'),
                )

            # Событие "Новое сообщение"
            if event.type == VkBotEventType.MESSAGE_NEW:
                # Проверка на пустое сообщение
                if event.obj.text != '':
                    # Если сообщение пришло от пользователя
                    if event.from_user:
                        # Производится форматирование строки, удаляются знаки препинания
                        transtab = str.maketrans(
                            {key: None
                             for key in string.punctuation})
                        message_text = event.obj.text.translate(transtab)

                        # Если текст сообщения - это название комнаты
                        if message_text in self.__room_list:
                            room_name = message_text

                            self.__vk.messages.send(
                                user_id=event.obj.from_id,
                                random_id=get_random_id(),
                                keyboard=self.__function_keyboard.get_keyboard(
                                ),
                                message='Выберите функцию',
                            )

                        # Если текст сообщения - это название функции
                        elif message_text in self.__function_dict:
                            if room_name != '':
                                climate_data = self.__database.get_climate_data(
                                    room_name,
                                    self.__function_dict.get(message_text))
                                # Проверка данных для определения дальнейших действий
                                if not climate_data:
                                    # Если данных нет
                                    self.__vk.messages.send(
                                        user_id=event.obj.from_id,
                                        random_id=get_random_id(),
                                        keyboard=self.__rooms_keyboard.
                                        get_keyboard(),
                                        message=
                                        'Нет данных по этому помещению\nВыберите другое'
                                    )

                                else:
                                    # Если данные по помещению есть - проверяем полученные данные и определяем дальнейшие действия
                                    for cd in climate_data:
                                        if isinstance(climate_data.get(cd),
                                                      dict):
                                            print("dict")
                                            # Если функция требовала отчет - создаем график
                                            self.__vk.messages.send(
                                                user_id=event.obj.from_id,
                                                random_id=get_random_id(),
                                                message=
                                                'Минутку, надо найти фломастеры...',
                                            )

                                            title = room_name + ' - ' + message_text
                                            graph_file_name = graph.get_graph(
                                                climate_data,
                                                self.__measuring_system, title)

                                            if os.path.exists(graph_file_name):
                                                photo = self.__upload.photo_messages(
                                                    photos=graph_file_name)[0]

                                                self.__vk.messages.send(
                                                    user_id=event.obj.from_id,
                                                    random_id=get_random_id(),
                                                    keyboard=self.
                                                    __function_keyboard.
                                                    get_keyboard(),
                                                    message=
                                                    'Вот график за заданный интервал\nКрасивый, правда?',
                                                    attachment='photo{}_{}'.
                                                    format(
                                                        photo['owner_id'],
                                                        photo['id']))

                                            else:
                                                self.__vk.messages.send(
                                                    user_id=event.obj.from_id,
                                                    random_id=get_random_id(),
                                                    message=
                                                    ('Я нарисовал график, но кто-то его украл, пока я убирал фломастеры...\n'
                                                     +
                                                     'Простите, пожалуйста... :('
                                                     ),
                                                )

                                            break  # Прерываем цикл начатый для проверки

                                        elif isinstance(
                                                climate_data.get(cd), float
                                                or str):
                                            # Если функция требовала вывести последние данные
                                            msg_text = ''
                                            print(climate_data)
                                            for table in climate_data:
                                                if table == 'Температура':
                                                    msg_text += 'Температура: ' + str(
                                                        climate_data[table]
                                                    ) + ' °C \n'
                                                elif table == 'Влажность':
                                                    msg_text += 'Влажность: ' + str(
                                                        climate_data[table]
                                                    ) + ' %\n'
                                                elif table == 'Давление':
                                                    if self.__measuring_system == 'мм.рт.ст.':
                                                        msg_text += 'Давление: ' + str(
                                                            climate_data[table]
                                                        ) + ' мм.рт.ст.\n'
                                                    else:
                                                        msg_text += 'Давление: ' + str(
                                                            climate_data[table]
                                                        ) + ' гПа\n'
                                                else:
                                                    msg_text += str(
                                                        table) + ': ' + str(
                                                            climate_data[table]
                                                        )

                                            self.__vk.messages.send(
                                                user_id=event.obj.from_id,
                                                random_id=get_random_id(),
                                                keyboard=self.
                                                __function_keyboard.
                                                get_keyboard(),
                                                message=msg_text,
                                            )

                                            break  # Прерываем цикл начатый для проверки

                                        else:
                                            self.__vk.messages.send(
                                                user_id=event.obj.from_id,
                                                random_id=get_random_id(),
                                                keyboard=self.__rooms_keyboard.
                                                get_keyboard(),
                                                message=
                                                'Что-то пошло не так... :(\n Давайте попробуем сначала',
                                            )
                                            break  # Прерываем цикл начатый для проверки

                        elif message_text == 'Назад':
                            self.__vk.messages.send(
                                user_id=event.obj.from_id,
                                random_id=get_random_id(),
                                keyboard=self.__rooms_keyboard.get_keyboard(),
                                message='Выберите помещение',
                            )
                        else:
                            self.__vk.messages.send(
                                user_id=event.obj.from_id,
                                random_id=get_random_id(),
                                keyboard=self.__rooms_keyboard.get_keyboard(),
                                message=
                                'Простите, я не понимаю. Воспользуйтесь клавиатурой, пожалуйста',
                            )
示例#7
0
class Bot:
    """
    Echo bot лля vk.com
    Use python3.8
    """
    def __init__(self, group_id, token):
        """
        param group_id: group_id из vk
        param token: секретный ключ
        """
        self.group_id = group_id
        self.token = token
        self.vk = VkApi(token=token)
        self.long_poller = VkBotLongPoll(self.vk, self.group_id)
        self.api = self.vk.get_api()

    def run(self):
        """Запуск бота"""
        for event in self.long_poller.listen():
            try:
                self.on_event(event)
            except Exception:
                log.error('Ошибка в обработке события')

    @db_session
    def on_event(self, event):
        """Отправляет сообщение назад, если это текст
        :param event: VkBotMessageEvent object
        :return: None
        """
        if event.type != VkBotEventType.MESSAGE_NEW:
            log.info('Пока не умеем обрабатывать %s', event.type)
            return

        user_id = event.object.message['peer_id']
        text = event.object.message['text']
        state = UserState.get(user_id=str(user_id))

        if state is not None:
            # continue scenario
            text_to_send = self.continue_scenario(text, state)
        else:
            # search intent
            for intent in settings.TICKETS_INTENTS:
                log.debug(f'User got {intent}')
                if any(token in text.lower() for token in intent['tokens']):
                    if intent['answer']:
                        text_to_send = intent['answer']
                    else:
                        text_to_send = self.start_scenario(
                            user_id, intent['scenario'])
                    break
            else:
                text_to_send = settings.DEFAULT_ANSWER

        self.api.messages.send(
            message=text_to_send,
            random_id=random.randint(0, 2**20),
            peer_id=user_id,
        )

    def start_scenario(self, user_id, scenario_name):
        scenario = settings.TICKET_SCENARIOS[scenario_name]
        first_step = scenario['first_step']
        step = scenario['steps'][first_step]
        text_to_send = step['text']
        UserState(user_id=str(user_id),
                  scenario_name=scenario_name,
                  step_name=first_step,
                  context={})
        return text_to_send

    def continue_scenario(self, text, state):
        steps = settings.TICKET_SCENARIOS[state.scenario_name]['steps']
        step = steps[state.step_name]
        handler = getattr(handlers, step['handler'])
        if handler(text=text, context=state.context, state=state):
            if type(handler(text=text, context=state.context,
                            state=state)) is str:
                next_step = steps[handler(text=text,
                                          context=state.context,
                                          state=state)]
            else:
                next_step = steps[step['next_step']]

            text_to_send = next_step['text'].format(**state.context)
            if next_step['next_step']:
                state.step_name = step['next_step']
            else:
                if next_step == steps['step8']:
                    log.info(
                        'Оформлен билет {point_1}-{point_2} на рейс {flight_number}'
                        ' {out_date}.'.format(**state.context))
                    Ticket(city_out=state.context['point_1'],
                           city_in=state.context['point_2'],
                           flight_date=state.context['out_date'],
                           flight_number=state.context['flight_number'])
                else:
                    log.info('Билет не оформлен.'.format(**state.context))
                # finish scenario
                state.delete()
        else:
            text_to_send = step['failure_text'].format(**state.context)

        return text_to_send
示例#8
0
import vk_api
import random
import time
import re
import sqlite3
import unicodedata
from vk_api.utils import get_random_id
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType

vk = vk_api.VkApi(
    token=
    "288a049bde237888b0eaaedaf76d0c9020b2e349181ab64825d8c10d3d4f9e8da4f85351e6394b33f8d08"
)
vk._auth_token()
vk.get_api()
longpoll = VkBotLongPoll(vk, 192963552)

#Пикчи
kap = [
    'photo-192963552_457239028', 'photo-192963552_457239029',
    'photo-192963552_457239037'
]
ziga = [
    'photo-192963552_457239027', 'photo-192963552_457239026',
    'photo-192963552_457239054', 'photo-192963552_457239053'
]
kurwab = ['photo-192963552_457239034', 'photo-192963552_457239024']
bent = [
    'photo-192963552_457239022', 'photo-192963552_457239033',
    'photo-192963552_457239041', 'photo-192963552_457239045'
]
示例#9
0
class Bot:
    def __init__(self, group_id, token):
        self.group_id = group_id
        self.token = token
        self.vk = vk_api.VkApi(token=token)
        self.long_poller = VkBotLongPoll(self.vk, self.group_id)
        self.api = self.vk.get_api()

    def run(self):
        for event in self.long_poller.listen():
            try:
                self.on_event(event)
            except Exception as err:
                log.exception("Ошибка обработки")

    @db_session
    def on_event(self, event):
        if event.type != VkBotEventType.MESSAGE_NEW:
            return
        user_id = event.object.message['peer_id']
        text = event.object.message['text']
        if int(user_id) - 2 * 10**9 < 0:
            state = UserState.get(user_id=str(user_id))
            if state is not None:
                text_to_send = self.continue_scenario(text=text, state=state)
            else:
                for intent in settings.INTENTS:
                    if any(token in text.lower()
                           for token in intent['tokens']):
                        if intent['answer']:
                            text_to_send = intent['answer']
                        else:
                            text_to_send = self.start_scenario(
                                user_id, intent['scenario'])
                        break
                else:
                    text_to_send = settings.DEFAULT_ANSWER
            self.send_message(text_to_send, user_id)
        else:
            for intent in settings.INTENTS:
                if any(token in text.lower() for token in intent['tokens']):
                    if intent['answer']:
                        text_to_send = intent['answer']
                        self.send_message(text_to_send, user_id)
                    if intent['group_handler']:
                        handler = getattr(handlers, intent['group_handler'])
                        text_to_send = handler(text)
                        if text_to_send:
                            self.send_message(text_to_send, user_id)
            if text == '/Семен':
                print('ok')
                self.api.messages.send(random_id=random.randint(0, 2**20),
                                       peer_id=user_id,
                                       attachment='photo-197891905_457239039')

    def start_scenario(self, user_id, scenario_name):
        scenario = settings.SCENARIOS[scenario_name]
        first_step = scenario['first_step']
        step = scenario['steps'][first_step]
        text_to_send = step['text']
        first_name = self.get_user_info(user_id)[0]['first_name']
        last_name = self.get_user_info(user_id)[0]['last_name']
        UserState(user_id=str(user_id),
                  scenario_name=scenario_name,
                  step_name=first_step,
                  context={
                      'first_name': first_name,
                      'last_name': last_name
                  })
        return text_to_send

    def continue_scenario(self, text, state):
        steps = settings.SCENARIOS[state.scenario_name]['steps']
        step = steps[state.step_name]
        handler = getattr(handlers, step['handler'])
        if handler(text=text, context=state.context):
            next_step = steps[step['next_step']]
            text_to_send = next_step['text'].format(**state.context)
            if next_step['next_step']:
                state.step_name = step['next_step']
            else:
                state.delete()
        else:
            text_to_send = step['failure_text']
        return text_to_send

    def get_user_info(self, user_id):
        return self.vk.method('users.get', {'user_ids': user_id})

    def send_message(self, text, user_id=None):
        self.api.messages.send(
            message=text,
            random_id=random.randint(0, 2**20),
            peer_id=user_id,
        )
示例#10
0
class Bot:
    """
    Бот-переводчик VK
    Python version 3.7
    """

    def __init__(self, GROUP_ID, TOKEN, to_lang='en', from_lang='ru'):
        """

        :param GROUP_ID: ID группы VK
        :param TOKEN: секретный токен
        :param from_lang: исходный язык, по умолчанию RU
        :param to_lang: язык перевода, по умолчанию EN
        """
        self.group_id = GROUP_ID
        self.token = TOKEN
        self.vk = vk_api.VkApi(token=TOKEN)
        self.long_poller = VkBotLongPoll(self.vk, self.group_id)
        self.api = self.vk.get_api()
        self.user_states = dict()

    def run(self):
        """
        Запуск бота
        """
        for event in self.long_poller.listen():
            try:
                self.on_event(event)
            except Exception:
                log.exception('Ошибка обработки')

    def on_event(self, event):
        """
        Обработка события: принтмат сообжение, переводит и отправляет сообщение назад
        :param event: VkBotMessageEvent
        :return: None
        """
        if event.type != VkBotEventType.MESSAGE_NEW:
            log.info('Сообщения такого типа не обрабатываются %s', event.type)
            return
        user_id = event.object.peer_id
        text = event.object.text

        if user_id in self.user_states:
            text_to_send = self.continue_scenario(user_id, text)
        else:
            # search intevt
            for intent in settings.INTENTS:
                log.debug(f'user get {intent}')
                if any(token in text.lower() for token in intent['tokens']):
                    if intent['answer']:
                        text_to_send = intent['answer']
                    else:
                        text_to_send = self.start_scenario(user_id, intent['scenario'])
                    break
            else:
                text_to_send = settings.DEFAULT_ANSWER

        self.api.messages.send(
            message=text_to_send,
            random_id=random.randint(0, 2 ** 20),
            peer_id=event.object.peer_id, )

    def start_scenario(self, user_id, scenario_name):
        scenario = settings.SCENARIOS[scenario_name]
        first_step = scenario['first_step']
        step = scenario['steps'][first_step]
        text_to_send = step['text']
        self.user_states[user_id] = UserState(scenario_name=scenario_name, step_name=first_step)
        return text_to_send

    def continue_scenario(self, user_id, text):
        state = self.user_states[user_id]
        steps = settings.SCENARIOS[state.scenario_name]['steps']
        step = steps[state.step_name]

        handler = getattr(handlers, step['handler'])
        if handler(text=text, context=state.context):
            next_step = steps[step['next_step']]
            text_to_send = next_step['text'].format(**state.context)
            if next_step['next_step']:
                # swith to next step
                state.step_name = step['next_step']
            else:
                # finish scenario
                self.user_states.pop(user_id)
                log.info('зарегистрирован: {name} {email}'.format(**state.context))
        else:
            # retry current step
            text_to_send = step['failure_text']

        return text_to_send
示例#11
0
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
import random
from covid19 import *
from dvach import *

vk_session = vk_api.VkApi(
    token=
    '95828ed40c8fa5afcc922fd9e004e7a4ae4d32647fcdd59ebf7ff66f778a921a760bde7808262df480a32'
)
vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, '171143945')  #id группы


def rand():
    return random.randint(1, 10**12)


def send_message(chat_id, text):
    vk.messages.send(chat_id=chat_id, message=text, random_id=rand())


for event in longpoll.listen():
    if (event.type == VkBotEventType.MESSAGE_NEW):
        if (event.obj.text.lower() == 'covid инфа'):
            send_message(event.chat_id, get_covid(False))
        if (event.obj.text.lower() == 'covid инфа детально'):
            send_message(event.chat_id, get_covid(True))
        if (event.obj.text.lower() == 'тред+'):
            send_message(event.chat_id, get_dvach(True))
        if (event.obj.text.lower() == 'тред'):
示例#12
0
class Bot:
    """
    Бот-переводчик VK
    Python version 3.7
    """
    def __init__(self, GROUP_ID, TOKEN, to_lang='en', from_lang='ru'):
        """

        :param GROUP_ID: ID группы VK
        :param TOKEN: секретный токен
        :param from_lang: исходный язык, по умолчанию RU
        :param to_lang: язык перевода, по умолчанию EN
        """
        self.group_id = GROUP_ID
        self.token = TOKEN
        self.vk = vk_api.VkApi(token=TOKEN)
        self.long_poller = VkBotLongPoll(self.vk, self.group_id)
        self.api = self.vk.get_api()
        self.translator = Translator(to_lang, from_lang)

    def run(self):
        """
        Запуск бота
        """
        for event in self.long_poller.listen():
            try:
                self.on_event(event)
            except Exception:
                log.exception('Ошибка обработки')

    def on_event(self, event):
        """
        Обработка события: принтмат сообжение, переводит и отправляет сообщение назад
        :param event: VkBotMessageEvent
        :return: None
        """
        if event.type == VkBotEventType.MESSAGE_NEW:
            log.info('Обработка сообщения')
            try:
                if not event.object.text:
                    send_message = 'В сообщении отсутствует текст'
                elif len(event.object.text) > 500:
                    send_message = 'Максимальная длина текста для перевода: 500 знаков'
                else:
                    send_message = self.on_translate(event)
                self.api.messages.send(
                    message=send_message,
                    random_id=random.randint(0, 2**20),
                    peer_id=event.object.peer_id,
                )
            except Exception:
                log.exception('Ошибка сообщения')
        else:
            log.debug('Сообщения такого типа не обрабатываются %s', event.type)

    def on_translate(self, event):
        """
        Перевод переданного сообщения
        :param event: VkBotMessageEvent
        :return: str, переведённый текст
        """
        try:
            translation = self.translator.translate(event.object.text)
        except Exception as err:
            translation = 'Перевод не удался'
        return translation
示例#13
0

def send(MSG, ID):
    vk.messages.send(message=MSG, peer_id=ID, random_id=0)
def send_photo():
    attachments = []
    session = requests.Session()
    upload = VkUpload(vk_session)
    image_url = photos[random.randint(0,len(photos)-1)]
    image = session.get(image_url, stream=True)
    photo = upload.photo_messages(photos=image.raw)[0]
    attachments.append('photo{}_{}'.format(photo['owner_id'], photo['id']))
    vk.messages.send(peer_id=id, attachment=','.join(attachments), random_id=0)
vk_session = vk_api.VkApi(token='06f16e4dd85ac708936265462fdf23f523c230edafd50378fa0db2d21e0e1165cfa1acc11ae8871c574f2')
vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, 153439683)
photos = []#different urls on images in the internet
memb = []
while True:
    for event in longpoll.listen():
        if event.type == VkBotEventType.MESSAGE_NEW:
            msg = event.message['text']
            if event.from_chat == True:
                if 'everydayporn' in msg or 'порно от андрея (не гейское)' in msg:
                    id = event.message['peer_id']
                    if 'команд' in msg.lower():
                        send('@everydayporn привет - б(анальное) приветствие\n@everydayporn нибучинов - Нибучинов дня\n@everydayporn '
                             'номера - список номеров учатсников беседы\n@everydayporn ты сука? - ...\n@everydayporn порно - В процессе '
                             'создания..', id)
                    elif 'привет' in msg.lower():
                        vk.messages.send(peer_id=id, sticker_id='21', random_id=0)
示例#14
0
def bot():
    vk = vk_api.VkApi(token=tokenbot)
    vk._auth_token()
    
    longpoll = VkBotLongPoll(vk, 171465322)
    
    def get_button(label, color, payload=""):
        return {
            "action": {
                "type": "text",
                "payload": json.dumps(payload),
                "label": label
            },
            "color": color
        }
    keyboardBegin = {
        "one_time": False,
        "buttons": [
        [get_button(label="Начать", color="primary")],
        ]

    }
    def get_button(label, color, payload=""):
        return {
            "action": {
                "type": "text",
                "payload": json.dumps(payload),
                "label": label
            },
            "color": color
        }
    keyboard = {
        "one_time": False,
        "buttons": 
        [
        [get_button(label="⛅Погода", color="positive")],
        [get_button(label="📋О нас", color="positive"),
        get_button(label="📫Точки продаж", color="positive")],
        [get_button(label="💰Акции", color="negative")],
        [get_button(label="💵Прайс-лист", color="positive")],
        [get_button(label="💳Ввести промокод", color="negative")],
        [get_button(label="Наш Instagram", color="negative"),
        get_button(label="Отзывы", color="negative")],
        [get_button(label="🖊Сделать заказ", color="primary")]
        ]
    }
    keyboard = json.dumps(keyboard, ensure_ascii=False).encode('utf-8')
    keyboard = str(keyboard.decode('utf-8'))
    def get_button(label, color, payload=""):
        return {
            "action": {
                "type": "text",
                "payload": json.dumps(payload),
                "label": label
            },
            "color": color
        }
    keyboard00000 = {
        "one_time": False,
        "buttons": [ ]
    }
    keyboard00000 = json.dumps(keyboard00000, ensure_ascii=False).encode('utf-8')
    keyboard00000 = str(keyboard00000.decode('utf-8'))
    def get_button(label, color, payload=""):
        return {
            "action": {
                "type": "text",
                "payload": json.dumps(payload),
                "label": label
            },
            "color": color
        }
    keyboard_2 = {
        "one_time": False,
        "buttons": [
        [get_button(label="Тула", color="default")],
        [get_button(label="Prague", color="default")],
        [get_button(label="Самара", color="default")],
        [get_button(label="Ижевск", color="default")],
        [get_button(label="Москва", color="default")],
        [get_button(label="Казахстан", color="default")],
        [get_button(label="Екатеринбург", color="default")],
        [get_button(label="🔙В главное меню", color="negative")]
        ]
    }
    keyboard_2 = json.dumps(keyboard_2, ensure_ascii=False).encode('utf-8')
    keyboard_2 = str(keyboard_2.decode('utf-8'))



    def get_button(label, color, payload=""):
        return {
            "action": {
                "type": "text",
                "payload": json.dumps(payload),
                "label": label
            },
            "color": color
        }
    keyboard_back = {
        "one_time": False,
        "buttons": [
        [get_button(label="Назад", color="negative")],
        ]
    }
    keyboard_back = json.dumps(keyboard_back, ensure_ascii=False).encode('utf-8')
    keyboard_back = str(keyboard_back.decode('utf-8'))



    print('Hello, Gregory!')
    time.sleep(0.5)
    print('I am starting the bot.py')
	
    a = month = userfrom1 = userfrom2 = userfrom3 = userfromweather1 = userfromweather2 = userfromweather3 = promo1 = promo2 = promo3 = 0
    vk.method("messages.send", {"peer_id": 169871363, "message": "Бот запущен!", "keyboard": keyboard00000 , "keyboard": keyboard, "random_id":0})
    for event in longpoll.listen():
        try:
           if (event.type == VkBotEventType.MESSAGE_NEW):
                id = event.object.from_id
                toid = event.object.peer_id
                body = event.object.text.lower()
                if (userfrom1 == id):
                    if (body != 'назад'):
                        telo1 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["text"]
                        vk.method("messages.send", {"peer_id": 169871363, "message": str(telo1) + "\nОтправитель vk.com/id" + str(id), "random_id": 0})
                        vk.method("messages.send", {"peer_id": toid, "message": "Ваше сообщение отправлено! Ожидайте ответа.", "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                        userfrom1 = 0
                    else:
                        userfrom1 = 0
                        vk.method("messages.send", {"peer_id": toid, "message": "Выберите кнопку!", "keyboard":keyboard00000 , "keyboard":keyboard, "random_id": 0})
                elif (userfrom2 == id):
                    if (body != 'назад'):
                        telo2 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["text"]
                        vk.method("messages.send", {"peer_id": 169871363, "message": str(telo2) + "\nОтправитель vk.com/id" + str(id), "random_id": 0})
                        vk.method("messages.send", {"peer_id": toid, "message": "Ваше сообщение отправлено! Ожидайте ответа.", "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                        userfrom2 = 0
                    else:
                        userfrom2 = 0
                        vk.method("messages.send", {"peer_id": toid, "message": "Выберите кнопку!", "keyboard":keyboard00000 , "keyboard":keyboard, "random_id": 0})
                elif (userfrom3 == id):
                    if (body != 'назад'):
                        telo3 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["text"]
                        vk.method("messages.send", {"peer_id": 169871363, "message": str(telo3) + "\nОтправитель vk.com/id" + str(id), "random_id": 0})
                        vk.method("messages.send", {"peer_id": toid, "message": "Ваше сообщение отправлено! Ожидайте ответа.", "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                        userfrom3 = 0
                    else:
                        userfrom3 = 0
                        vk.method("messages.send", {"peer_id": toid, "message": "Выберите кнопку!", "keyboard":keyboard00000 , "keyboard":keyboard, "random_id": 0})
                elif (userfromweather1 == id):
                    if (body != 'назад'):
                        city1 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["text"]
                        url = 'https://yandex.ru/yandsearch?clid=1923018&text=погода в ' + city1
                        page1 = requests.get(url)
                        new_news1 = []
                        news1 = 0
                        soup1 = BeautifulSoup(page1.text, "html.parser")
                        news1 = soup1.findAll('div', class_='weather-forecast__current-temp')
                        if len(news1) > 0:
                            for i in range(len(news1)):
                                vk.method("messages.send", {"peer_id": toid, "message": "Сейчас в городе " + city1 + " " + news1[i].text, "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                        else:
                            vk.method("messages.send", {"peer_id": toid, "message": "Город не найден", "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                        userfromweather1 = 0
                    else:
                        userfromweather1 = 0
                        vk.method("messages.send", {"peer_id": toid, "message": "Выберите кнопку!", "keyboard":keyboard00000 , "keyboard":keyboard, "random_id": 0})
                elif (userfromweather2 == id):
                    if (body != 'назад'):
                        city2 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["text"]
                        url = 'https://yandex.ru/yandsearch?clid=1923018&text=погода в ' + city2
                        page2 = requests.get(url)
                        new_news2 = []
                        news2 = 0
                        soup2 = BeautifulSoup(page2.text, "html.parser")
                        news2 = soup2.findAll('div', class_='weather-forecast__current-temp')
                        if len(news2) > 0:
                            for i in range(len(news2)):
                                vk.method("messages.send", {"peer_id": toid, "message": "Сейчас в городе " + city2 + " " + news2[i].text, "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                        else:
                            vk.method("messages.send", {"peer_id": toid, "message": "Город не найден", "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                        userfromweather2 = 0
                    else:
                        userfromweather2 = 0
                        vk.method("messages.send", {"peer_id": toid, "message": "Выберите кнопку!", "keyboard":keyboard00000 , "keyboard":keyboard, "random_id": 0})
                elif (userfromweather3 == id):
                    if (body != 'назад'):
                        city3 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["text"]
                        url3 = 'https://yandex.ru/yandsearch?clid=1923018&text=погода в ' + city3
                        page3 = requests.get(url3)
                        new_news3 = []
                        news3 = 0
                        soup3 = BeautifulSoup(page3.text, "html.parser")
                        news3 = soup3.findAll('div', class_='weather-forecast__current-temp')
                        if len(news3) > 0:
                            for i in range(len(news3)):
                                vk.method("messages.send", {"peer_id": toid, "message": "Сейчас в городе " + city3 + " " + news3[i].text, "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                        else:
                            vk.method("messages.send", {"peer_id": toid, "message": "Неверное имя города", "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                        userfromweather3 = 0
                    else:
                        userfromweather3 = 0
                        vk.method("messages.send", {"peer_id": toid, "message": "Выберите кнопку!", "keyboard":keyboard00000 , "keyboard":keyboard, "random_id": 0})
                elif (promo1 == id):
                    if (body != 'назад'):
                        if (body  == 'amicus'):
                            vk.method("messages.send", {"peer_id": 169871363, "message": "Пользователь vk.com/id" + str(id) + " активировал скидку 5% по промокоду.", "random_id": 0})
                            vk.method("messages.send", {"peer_id": toid, "message": "Промокод на 5% активирован.", "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                            promo1 = 0
                        elif (body == 'frater'):
                            vk.method("messages.send", {"peer_id": 169871363, "message": "Пользователь vk.com/id" + str(id) +" активировал скидку 10% по промокоду. ", "random_id": 0})
                            vk.method("messages.send", {"peer_id": toid, "message": "Промокод на 10% активирован.", "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                            promo1 = 0
                        else:
                            promo1 = 0
                            vk.method("messages.send", {"peer_id": toid, "message": "Такого промокода не существует!", "keyboard":keyboard, "random_id": 0})
                    else:
                        promo1 = 0
                        vk.method("messages.send", {"peer_id": toid, "message": "Выберите кнопку!", "keyboard":keyboard00000 , "keyboard":keyboard, "random_id": 0})
                elif (promo2 == id):
                    if (body != 'назад'):
                        if (body  == 'amicus'):
                            vk.method("messages.send", {"peer_id": 169871363, "message": "Пользователь vk.com/id" + str(id) + " активировал скидку 5% по промокоду.", "random_id": 0})
                            vk.method("messages.send", {"peer_id": toid, "message": "Промокод на 5% активирован.", "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                            promo2 = 0
                        elif (body == 'frater'):
                            vk.method("messages.send", {"peer_id": 169871363, "message": "Пользователь vk.com/id" + str(id) +" активировал скидку 10% по промокоду. ", "random_id": 0})
                            vk.method("messages.send", {"peer_id": toid, "message": "Промокод на 10% активирован.", "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                            promo2 = 0
                        else:
                            promo2 = 0
                            vk.method("messages.send", {"peer_id": toid, "message": "Такого промокода не существует!", "keyboard":keyboard, "random_id": 0})
                    else:
                        promo2 = 0
                        vk.method("messages.send", {"peer_id": toid, "message": "Выберите кнопку!", "keyboard":keyboard00000 , "keyboard":keyboard, "random_id": 0})
                elif (promo3 == id):
                    if (body != 'назад'):
                        if (body  == 'amicus'):
                            vk.method("messages.send", {"peer_id": 169871363, "message": "Пользователь vk.com/id" + str(id) + " активировал скидку 5% по промокоду.", "random_id": 0})
                            vk.method("messages.send", {"peer_id": toid, "message": "Промокод на 5% активирован.", "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                            promo3 = 0
                        elif (body == 'frater'):
                            vk.method("messages.send", {"peer_id": 169871363, "message": "Пользователь vk.com/id" + str(id) +" активировал скидку 10% по промокоду. ", "random_id": 0})
                            vk.method("messages.send", {"peer_id": toid, "message": "Промокод на 10% активирован.", "random_id": 0, "keyboard":keyboard00000 , "keyboard":keyboard})
                            promo3 = 0
                        else:
                            promo3 = 0
                            vk.method("messages.send", {"peer_id": toid, "message": "Такого промокода не существует!", "keyboard":keyboard, "random_id": 0})
                    else:
                        promo3 = 0
                        vk.method("messages.send", {"peer_id": toid, "message": "Выберите кнопку!", "keyboard":keyboard00000 , "keyboard":keyboard, "random_id": 0})
                elif body.find('погода') != -1:
                    if (userfromweather1 == 0):
                        userfromweather1 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["from_id"]
                        vk.method("messages.send", {"peer_id": toid, "message": "Введите название города", "keyboard": keyboard_back, "random_id": 0})
                    elif (userfromweather2 == 0):
                        userfromweather2 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["from_id"]
                        vk.method("messages.send", {"peer_id": toid, "message": "Введите название города", "keyboard": keyboard_back, "random_id": 0})
                    elif (userfromweather3 == 0):
                        userfromweather3 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["from_id"]
                        vk.method("messages.send", {"peer_id": toid, "message": "Введите название города", "keyboard": keyboard_back, "random_id": 0})
                elif body.find('сделать заказ') != -1:
                    if (userfrom1 == 0):
                        userfrom1 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["from_id"]
                        vk.method("messages.send", {"peer_id": toid, "message": "Введите сообщение", "keyboard": keyboard_back, "random_id": 0})
                    elif (userfrom2 == 0):
                        userfrom2 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["from_id"]
                        vk.method("messages.send", {"peer_id": toid, "message": "Введите сообщение", "keyboard": keyboard_back, "random_id": 0})
                    elif (userfrom3 == 0):
                        userfrom3 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["from_id"]
                        vk.method("messages.send", {"peer_id": toid, "message": "Введите сообщение", "keyboard": keyboard_back, "random_id": 0})
                    else:
                        vk.method("messages.send", {"peer_id": toid, "message": "Система перегружена, повторите попытку через 10 секунд", "random_id": 0})
                elif body.find('точки продаж') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "Выберите город", "random_id": 0, "keyboard": keyboard00000, "keyboard": keyboard_2})
                elif body.find('акции') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "⭐Подпишитесь на наш аккаунт Instagram и получите скидку 5%\ninstagram.com/hookah.mason\n\n📦Спецпредложение на первую оптовую закупку\napi.whatsapp.com/send?phone=79854474442", "random_id": 0})
                elif body.find('главное меню') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "Выберите кнопку!", "random_id": 0, "keyboard": keyboard00000, "keyboard": keyboard})
                elif body.find('prague') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "Мы находимся по адресу:\n🏬iSmoke Store Karlín\n🗺Křižíkova 489/66, Praha 8 - Karlín\n\n🏬iSmoke Store Dejvice\n🗺Evropská 1727/53, Praha 6 - Dejvice\n\n🏬iSmoke Garage Outlet\n🗺Mirovická 520/1, Praha 8 - Kobylisy\n\n🏬iSmoke Store Brno\n🗺Husova 8a, Brno-město\n\n📱Тел: +420 774 40 00 40\n\n💻ismoke.cz\n📷facebook.com/ismoke.cz", "random_id": 0, "attachment":"photo-169871449_456239102"})
                elif body.find('тула') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "Мы находимся по адресу:\n🏬ТЦ Тройка\n🗺ул. Каминского, 24В\n📱Тел:  +7 (999) 775-10-63\n\n💻vk.com/bambuk_tula\n📷instagram.com/bambuk_tula", "random_id": 0, "attachment":"photo-169871449_456239103"})
                elif body.find('самара') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "Мы находимся по адресу:\n🏬Магазин 'Шахта'\n🗺ул. Ново-Садовая, 271\n📱Тел: +7 (986) 950-36-00\n\n💻vk.com/shahta_63\n📷instagram.com/shahta63", "random_id": 0, "attachment":"photo-169871449_456239104"})
                elif body.find('москва') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "Мы находимся по адресу:\n🏬Кальянный магазин 'Smoke Lab'\n🗺ул. 4-я Тверская-Ямская, 7(цокольный этаж)\n📱Тел: +7 (903) 795-59-89\n📱Тел: +7 (495) 795-59-89 \n\n💻smokelab.org\n📷instagram.com/smoke_lab", "random_id": 0, "attachment":"photo-169871449_456239105"})
                elif body.find('екатеринбург') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "Мы находимся по адресу:\n🏬BAR&HOOKAHSHOP\n🗺ул. Декабристов, 20\n📱Тел: +7 (932) 122-14-60\n\n🏬HOOKAHSHOP&COFFEE\n🗺ул.Крауля, 8\n📱Тел: +7 (903) 08-61-349 \n\n💻vk.com/hzhookah\n📷instagram.com/hazehookahshop", "random_id": 0, "attachment":"photo-169871449_456239106"})
                elif body.find('ижевск') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "Мы находимся по адресу:\n🏬S Club Shop\n🗺ул. Карла Маркса 177б (бц Арбат)\n📱Тел: +7 (912) 021-24-21\n\n💻vk.com/izh.smoke.club.shop\n📷instagram.com/sclubshop\n\n\n🏬Бар 'Сегодня можно'\n🗺ул. Советская, 14 \n📱Тел: 643364\n\n💻vk.com/segodnyamozhno\n💻vk.com/lounge_bsm\n📷instagram.com/segodnya_mozhno_lounge\n📷instagram.com/segodnya_mozhno\n\n\n🏬Берлога Shop&Lounge\n🗺ул. Красногеройская 63б\n📱Тел: +7 (912) 021-34-12\n\n💻vk.com/club171797380\n📷instagram.com/berloga_lounge_shop", "random_id": 0, "attachment":"photo-169871449_456239106"})
                elif (body.find('прайс') != -1) or (body.find('цены') != -1) or (body.find('цена') != -1) or (body.find('стоимость') != -1) or (body.find('чаши') != -1) or (body.find('чаша') != -1) or (body.find('чашка') != -1) or (body.find('чашки')!= -1):
                    vk.method("messages.send", {"peer_id": toid, "message": "", "random_id": 0, "attachment":"photo-169871449_457239266, photo-169871449_457239267, photo-169871449_457239268, photo-169871449_457239269, photo-169871449_457239270"})
                elif body.find('казахстан') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": """
				
Мы находимся по адресу:
🏬Rotana Shop Almaty
🗺Сейфуллина проспект, 410
📱Тел: +7 (701) 888-72-77

🏬Rotana Shop Astana
📱Тел: +7 (708) 336-44-41

💻vk.com/hookah_service_kz
💻www.hookahshop.kz
						""", "random_id": 0, "attachment":"photo-169871449_456239102"})
                elif body.find('о нас') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "Основаная цель нашего производства - создавать максимально качественную продукцию, не имеющую аналогов.\nМы постарались учесть все критерии качества, которые позволяют нам смело заявить, что вскоре наша продукция займет лидирующую позицию на рынке.\n95% процентов, что после первой забивки вы забудете про все остальные чаши. \n\n◾ Максимально быстрый прогрев.\n\n◾ Усиленная вкусопередача.\n\n◾ Легко мыть, не трескаются от резких перепадов температуры.\n\n◾ Специальная техника отливки позволяет максимально контролировать жар.\n\n◾ Состав и обработка не имеющие аналогов", "random_id": 0, "keyboard": keyboard00000, "keyboard": keyboard, "attachment":"photo-169871449_456239101"})
                elif body.find('чаши') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "Воспользуйтесь кнопкой 'Прайс-лист' или 'сделать заказ'.", "random_id": 0})
                elif body.find('привет') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "Привет! Воспользуйся клавиатурой для навигации!", "keyboard": keyboard00000, "keyboard": keyboard, "random_id": 0})
                elif body.find('начать') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "Привет! Воспользуйся клавиатурой для навигации!", "keyboard": keyboard00000, "keyboard": keyboard, "random_id": 0})
                elif body == 'назад':
                    vk.method("messages.send", {"peer_id": toid, "message": "", "keyboard":keyboard, "random_id": 0})
                elif body.find('instagram') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "instagram.com/hookah.mason", "keyboard":keyboard, "random_id": 0})
                elif body.find('отзывы') != -1:
                    vk.method("messages.send", {"peer_id": toid, "message": "vk.com/topic-169871449_39198416", "keyboard":keyboard, "random_id": 0})
                elif body.find('промокод') != -1:
                    if (promo1 == 0):
                        promo1 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["from_id"]
                        vk.method("messages.send", {"peer_id": toid, "message": "Введите промокод", "keyboard": keyboard_back, "random_id": 0})
                    elif (promo2 == 0):
                        promo2 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["from_id"]
                        vk.method("messages.send", {"peer_id": toid, "message": "Введите промокод", "keyboard": keyboard_back, "random_id": 0})
                    elif (promo3 == 0):
                        promo3 = vk.method("messages.getHistory", {"offset": 0, "count":200, "user_id": id})["items"][0]["from_id"]
                        vk.method("messages.send", {"peer_id": toid, "message": "Введите промокод", "keyboard": keyboard_back, "random_id": 0})
                    else:
                        vk.method("messages.send", {"peer_id": toid, "message": "Система перегружена, повторите попытку через 10 секунд", "random_id": 0})
                else:
                    vk.method("messages.send", {"peer_id": toid, "message": "Эта команда мне неизвестна.", "random_id": 0, "keyboard": keyboard00000, "keyboard": keyboard})
        except vk_api.AuthError as error_msg:
            print(error_msg)
            vk.method("messages.send", {"peer_id": 169871363, "message": 'перезагрузка', "random_id":0})
示例#15
0
def isAdmin(user_id):
    admins = os.listdir("./admins/")
    for admin in admins:
        if (str(user_id) == str(os.path.basename(admin))):
            return True
    return False


vk = vk_api.VkApi(token=tokens.token  #Вставь свой 
                  )
connected_peers = []
peers = os.listdir("./admins/")
for peer in peers:
    connected_peers.append(int(os.path.basename(peer)))

longpoll = VkBotLongPoll(vk, tokens.groupID,
                         wait=259200)  #Вставь свой ID группы в пустое поле
hello = [
    "Приветики)", "Hello", "👋🏻", "Привет!", "Здравствуй",
    "Приветики) Знаешь как пользоваться ботом?) Нет? Тогда напиши /help))"
]
otvet = [
    "Да)?", "Ммм?", "Я знаю, что ты хочешь 😏",
    "Дай угадать, зачем ты меня зoвешь 😉", "Да?", "Слушаю 😊",
    "Разработчик бота не несет никакой ответственности за его содержимое!"
]
f = open("./pic", "r")
pic = int(f.read())
f.close()
print("STARTED")
log("✅ Hentai Bot успешно запущен ✅")
for event in longpoll.listen():
示例#16
0
def zakaz():
    vk = vk_api.VkApi(token=tokenzakaz)
    vk._auth_token()

    longpoll = VkBotLongPoll(vk, 169871449)

    def get_button(label, color, payload=""):
        return {
            "action": {
                "type": "text",
                "payload": json.dumps(payload),
                "label": label
            },
            "color": color
        }

    keyboardBegin = {
        "one_time": False,
        "buttons": [
            [get_button(label="Начать", color="primary")],
        ]
    }

    def get_button(label, color, payload=""):
        return {
            "action": {
                "type": "text",
                "payload": json.dumps(payload),
                "label": label
            },
            "color": color
        }

    keyboard = {
        "one_time":
        False,
        "buttons": [[
            get_button(label="📋О нас", color="positive"),
            get_button(label="📫Точки продаж", color="positive")
        ], [get_button(label="💰Акции", color="negative")],
                    [get_button(label="💵Прайс-лист", color="positive")],
                    [get_button(label="💳Ввести промокод", color="negative")],
                    [
                        get_button(label="Наш Instagram", color="negative"),
                        get_button(label="Отзывы", color="negative")
                    ], [get_button(label="🖊Сделать заказ", color="primary")]]
    }
    keyboard = json.dumps(keyboard, ensure_ascii=False).encode('utf-8')
    keyboard = str(keyboard.decode('utf-8'))

    def get_button(label, color, payload=""):
        return {
            "action": {
                "type": "text",
                "payload": json.dumps(payload),
                "label": label
            },
            "color": color
        }

    keyboard00000 = {"one_time": False, "buttons": []}
    keyboard00000 = json.dumps(keyboard00000,
                               ensure_ascii=False).encode('utf-8')
    keyboard00000 = str(keyboard00000.decode('utf-8'))

    def get_button(label, color, payload=""):
        return {
            "action": {
                "type": "text",
                "payload": json.dumps(payload),
                "label": label
            },
            "color": color
        }

    keyboard_2 = {
        "one_time":
        False,
        "buttons": [[get_button(label="Тула", color="default")],
                    [get_button(label="Prague", color="default")],
                    [get_button(label="Самара", color="default")],
                    [get_button(label="Ижевск", color="default")],
                    [get_button(label="Москва", color="default")],
                    [get_button(label="Саратов", color="default")],
                    [get_button(label="Екатеринбург", color="default")],
                    [get_button(label="Казахстан", color="default")],
                    [get_button(label="🔙В главное меню", color="negative")]]
    }
    keyboard_2 = json.dumps(keyboard_2, ensure_ascii=False).encode('utf-8')
    keyboard_2 = str(keyboard_2.decode('utf-8'))

    def get_button(label, color, payload=""):
        return {
            "action": {
                "type": "text",
                "payload": json.dumps(payload),
                "label": label
            },
            "color": color
        }

    keyboard_msk = {
        "one_time":
        False,
        "buttons":
        [[get_button(label="Москва SmokeLab", color="default")],
         [get_button(label="Москва DeerKalyan", color="default")],
         [get_button(label="Москва Hookah Market", color="default")],
         [get_button(label="🔙В главное меню", color="negative")]]
    }
    keyboard_msk = json.dumps(keyboard_msk, ensure_ascii=False).encode('utf-8')
    keyboard_msk = str(keyboard_msk.decode('utf-8'))

    def get_button(label, color, payload=""):
        return {
            "action": {
                "type": "text",
                "payload": json.dumps(payload),
                "label": label
            },
            "color": color
        }

    keyboard_back = {
        "one_time": False,
        "buttons": [
            [get_button(label="Назад", color="negative")],
        ]
    }
    keyboard_back = json.dumps(keyboard_back,
                               ensure_ascii=False).encode('utf-8')
    keyboard_back = str(keyboard_back.decode('utf-8'))

    print('Hello, Gregory!')
    time.sleep(0.5)
    print('I am starting the bot')

    a = month = userfrom1 = userfrom2 = userfrom3 = promo1 = promo2 = promo3 = 0
    ##vk.method("messages.send", {"peer_id": 169871363, "message": "Бот запущен!", "keyboard": keyboard00000 , "keyboard": keyboard, "random_id":0})
    for event in longpoll.listen():
        try:
            if (event.type == VkBotEventType.MESSAGE_NEW):
                id = event.object.from_id
                toid = event.object.peer_id
                body = event.object.text.lower()
                if (userfrom1 == id):
                    if (body != 'назад'):
                        message_id1 = vk.method("messages.getHistory", {
                            "offset": 0,
                            "count": 200,
                            "user_id": id
                        })["items"][0]["id"]
                        vk.method(
                            "messages.send", {
                                "peer_id": 26220501,
                                "message": "Новое сообщение!",
                                "forward_messages": message_id1,
                                "random_id": 0
                            })
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message":
                                "Ваше сообщение отправлено! Ожидайте ответа.",
                                "random_id": 0,
                                "keyboard": keyboard00000,
                                "keyboard": keyboard
                            })
                        userfrom1 = 0
                    else:
                        userfrom1 = 0
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message": "Выберите кнопку!",
                                "keyboard": keyboard00000,
                                "keyboard": keyboard,
                                "random_id": 0
                            })
                elif (userfrom2 == id):
                    if (body != 'назад'):
                        message_id2 = vk.method("messages.getHistory", {
                            "offset": 0,
                            "count": 200,
                            "user_id": id
                        })["items"][0]["id"]
                        vk.method(
                            "messages.send", {
                                "peer_id": 26220501,
                                "message": "Новое сообщение!",
                                "forward_messages": message_id2,
                                "random_id": 0
                            })
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message":
                                "Ваше сообщение отправлено! Ожидайте ответа.",
                                "random_id": 0,
                                "keyboard": keyboard00000,
                                "keyboard": keyboard
                            })
                        userfrom2 = 0
                    else:
                        userfrom2 = 0
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message": "Выберите кнопку!",
                                "keyboard": keyboard00000,
                                "keyboard": keyboard,
                                "random_id": 0
                            })
                elif (userfrom3 == id):
                    if (body != 'назад'):
                        message_id3 = vk.method("messages.getHistory", {
                            "offset": 0,
                            "count": 200,
                            "user_id": id
                        })["items"][0]["id"]
                        vk.method(
                            "messages.send", {
                                "peer_id": 26220501,
                                "message": "Новое сообщение!",
                                "forward_messages": message_id3,
                                "random_id": 0
                            })
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message":
                                "Ваше сообщение отправлено! Ожидайте ответа.",
                                "random_id": 0,
                                "keyboard": keyboard00000,
                                "keyboard": keyboard
                            })
                        userfrom3 = 0
                    else:
                        userfrom3 = 0
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message": "Выберите кнопку!",
                                "keyboard": keyboard00000,
                                "keyboard": keyboard,
                                "random_id": 0
                            })
                elif (promo1 == id):
                    if (body != 'назад'):
                        if (body == 'amicus'):
                            vk.method(
                                "messages.send", {
                                    "peer_id":
                                    26220501,
                                    "message":
                                    "Пользователь vk.com/id" + str(id) +
                                    " активировал скидку 5% по промокоду.",
                                    "random_id":
                                    0
                                })
                            vk.method(
                                "messages.send", {
                                    "peer_id": toid,
                                    "message": "Промокод на 5% активирован.",
                                    "random_id": 0,
                                    "keyboard": keyboard00000,
                                    "keyboard": keyboard
                                })
                            promo1 = 0
                        elif (body == 'frater'):
                            vk.method(
                                "messages.send", {
                                    "peer_id":
                                    26220501,
                                    "message":
                                    "Пользователь vk.com/id" + str(id) +
                                    " активировал скидку 10% по промокоду. ",
                                    "random_id":
                                    0
                                })
                            vk.method(
                                "messages.send", {
                                    "peer_id": toid,
                                    "message": "Промокод на 10% активирован.",
                                    "random_id": 0,
                                    "keyboard": keyboard00000,
                                    "keyboard": keyboard
                                })
                            promo1 = 0
                        else:
                            promo1 = 0
                            vk.method(
                                "messages.send", {
                                    "peer_id": toid,
                                    "message":
                                    "Такого промокода не существует!",
                                    "keyboard": keyboard,
                                    "random_id": 0
                                })
                    else:
                        promo1 = 0
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message": "Выберите кнопку!",
                                "keyboard": keyboard00000,
                                "keyboard": keyboard,
                                "random_id": 0
                            })
                elif (promo2 == id):
                    if (body != 'назад'):
                        if (body == 'amicus'):
                            vk.method(
                                "messages.send", {
                                    "peer_id":
                                    26220501,
                                    "message":
                                    "Пользователь vk.com/id" + str(id) +
                                    " активировал скидку 5% по промокоду.",
                                    "random_id":
                                    0
                                })
                            vk.method(
                                "messages.send", {
                                    "peer_id": toid,
                                    "message": "Промокод на 5% активирован.",
                                    "random_id": 0,
                                    "keyboard": keyboard00000,
                                    "keyboard": keyboard
                                })
                            promo2 = 0
                        elif (body == 'frater'):
                            vk.method(
                                "messages.send", {
                                    "peer_id":
                                    26220501,
                                    "message":
                                    "Пользователь vk.com/id" + str(id) +
                                    " активировал скидку 10% по промокоду. ",
                                    "random_id":
                                    0
                                })
                            vk.method(
                                "messages.send", {
                                    "peer_id": toid,
                                    "message": "Промокод на 10% активирован.",
                                    "random_id": 0,
                                    "keyboard": keyboard00000,
                                    "keyboard": keyboard
                                })
                            promo2 = 0
                        else:
                            promo2 = 0
                            vk.method(
                                "messages.send", {
                                    "peer_id": toid,
                                    "message":
                                    "Такого промокода не существует!",
                                    "keyboard": keyboard,
                                    "random_id": 0
                                })
                    else:
                        promo2 = 0
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message": "Выберите кнопку!",
                                "keyboard": keyboard00000,
                                "keyboard": keyboard,
                                "random_id": 0
                            })
                elif (promo3 == id):
                    if (body != 'назад'):
                        if (body == 'amicus'):
                            vk.method(
                                "messages.send", {
                                    "peer_id":
                                    26220501,
                                    "message":
                                    "Пользователь vk.com/id" + str(id) +
                                    " активировал скидку 5% по промокоду.",
                                    "random_id":
                                    0
                                })
                            vk.method(
                                "messages.send", {
                                    "peer_id": toid,
                                    "message": "Промокод на 5% активирован.",
                                    "random_id": 0,
                                    "keyboard": keyboard00000,
                                    "keyboard": keyboard
                                })
                            promo3 = 0
                        elif (body == 'frater'):
                            vk.method(
                                "messages.send", {
                                    "peer_id":
                                    26220501,
                                    "message":
                                    "Пользователь vk.com/id" + str(id) +
                                    " активировал скидку 10% по промокоду. ",
                                    "random_id":
                                    0
                                })
                            vk.method(
                                "messages.send", {
                                    "peer_id": toid,
                                    "message": "Промокод на 10% активирован.",
                                    "random_id": 0,
                                    "keyboard": keyboard00000,
                                    "keyboard": keyboard
                                })
                            promo3 = 0
                        else:
                            promo3 = 0
                            vk.method(
                                "messages.send", {
                                    "peer_id": toid,
                                    "message":
                                    "Такого промокода не существует!",
                                    "keyboard": keyboard,
                                    "random_id": 0
                                })
                    else:
                        promo3 = 0
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message": "Выберите кнопку!",
                                "keyboard": keyboard00000,
                                "keyboard": keyboard,
                                "random_id": 0
                            })
                elif body.find('сделать заказ') != -1:
                    if (userfrom1 == 0):
                        userfrom1 = vk.method("messages.getHistory", {
                            "offset": 0,
                            "count": 200,
                            "user_id": id
                        })["items"][0]["from_id"]
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message":
                                'Введите сообщение. Для выхода нажмите на кнопку "Назад"',
                                "keyboard": keyboard_back,
                                "random_id": 0
                            })
                    elif (userfrom2 == 0):
                        userfrom2 = vk.method("messages.getHistory", {
                            "offset": 0,
                            "count": 200,
                            "user_id": id
                        })["items"][0]["from_id"]
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message": "Введите сообщение",
                                "keyboard": keyboard_back,
                                "random_id": 0
                            })
                    elif (userfrom3 == 0):
                        userfrom3 = vk.method("messages.getHistory", {
                            "offset": 0,
                            "count": 200,
                            "user_id": id
                        })["items"][0]["from_id"]
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message": "Введите сообщение",
                                "keyboard": keyboard_back,
                                "random_id": 0
                            })
                    else:
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message":
                                "Система перегружена, повторите попытку через 10 секунд",
                                "random_id": 0
                            })
                elif body.find('точки продаж') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message": "Выберите город",
                            "random_id": 0,
                            "keyboard": keyboard00000,
                            "keyboard": keyboard_2
                        })
                elif body.find('акции') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message":
                            "⭐Подпишитесь на наш аккаунт Instagram и получите скидку 5%\ninstagram.com/hookah.mason\n\n📦Спецпредложение на первую оптовую закупку\napi.whatsapp.com/send?phone=79854474442",
                            "random_id": 0
                        })
                elif body.find('главное меню') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message": "Выберите кнопку!",
                            "random_id": 0,
                            "keyboard": keyboard00000,
                            "keyboard": keyboard
                        })
                elif body.find('prague') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message":
                            "Мы находимся по адресу:\n🏬iSmoke Store Karlín\n🗺Křižíkova 489/66, Praha 8 - Karlín\n\n🏬iSmoke Store Dejvice\n🗺Evropská 1727/53, Praha 6 - Dejvice\n\n🏬iSmoke Garage Outlet\n🗺Mirovická 520/1, Praha 8 - Kobylisy\n\n🏬iSmoke Store Brno\n🗺Husova 8a, Brno-město\n\n📱Тел: +420 774 40 00 40\n\n💻ismoke.cz\n📷facebook.com/ismoke.cz",
                            "random_id": 0,
                            "attachment": "photo-169871449_456239102"
                        })
                elif body.find('тула') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message":
                            "Мы находимся по адресу:\n🏬ТЦ Тройка\n🗺ул. Каминского, 24В\n📱Тел:  +7 (999) 775-10-63\n\n💻vk.com/bambuk_tula\n📷instagram.com/bambuk_tula",
                            "random_id": 0,
                            "attachment": "photo-169871449_456239103"
                        })
                elif body.find('самара') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message":
                            "Мы находимся по адресу:\n🏬Магазин 'Шахта'\n🗺ул. Ново-Садовая, 271\n📱Тел: +7 (986) 950-36-00\n\n💻vk.com/shahta_63\n📷instagram.com/shahta63",
                            "random_id": 0,
                            "attachment": "photo-169871449_456239104"
                        })
                elif body == 'москва':
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message": "Выберите магазин в Москве",
                            "keyboard": keyboard00000,
                            "keyboard": keyboard_msk,
                            "random_id": 0
                        })
                elif body.find('москва smokelab') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message":
                            "Мы находимся по адресу:\n🏬Кальянный магазин 'Smoke Lab'\n🗺ул. 4-я Тверская-Ямская, 7(цокольный этаж)\n📱Тел: +7 (903) 795-59-89\n📱Тел: +7 (495) 795-59-89 \n\n💻smokelab.org\n📷instagram.com/smoke_lab",
                            "random_id": 0,
                            "attachment": "photo-169871449_456239105"
                        })
                elif body.find('москва deerkalyan') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message": """
🏢Deerkalyan «Тимирязевская» ул.Яблочкова 19Г, ТЦ «Депо Молл», 2 этаж. м.Тимирязевская
Ежедневно 10:00 - 21:00

🏢Deerkalyan «Отрадное». ул.Хачатуряна 15Б, ТЦ «ВВС», 2 этаж. м. Отрадное
Ежедневно 10:00 - 22:00

🏢Deerkalyan «Бескудниково». Бескудниковский бульвар 6к2, м. Верхние Лихоборы
Ежедневно 11:00 - 23:00

🏢Deerkalyan "Семеновская", измайловский вал д2,м.Семеновская.
Ежедневно с 8-00 до 23-00

+7(495) 136-72-37
deerkalyan.ru
instagram.com/deerkalyan_msk/""",
                            "random_id": 0,
                            "attachment": "photo-169871449_456239105"
                        })
                elif body.find('екатеринбург') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message":
                            "Мы находимся по адресу:\n🏬BAR&HOOKAHSHOP\n🗺ул. Декабристов, 20\n📱Тел: +7 (932) 122-14-60\n\n🏬HOOKAHSHOP&COFFEE\n🗺ул.Крауля, 8\n📱Тел: +7 (903) 08-61-349 \n\n💻vk.com/hzhookah\n📷instagram.com/hazehookahshop",
                            "random_id": 0,
                            "attachment": "photo-169871449_456239106"
                        })
                elif body.find('ижевск') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message":
                            "Мы находимся по адресу:\n🏬S Club Shop\n🗺ул. Карла Маркса 177б (бц Арбат)\n📱Тел: +7 (912) 021-24-21\n\n💻vk.com/izh.smoke.club.shop\n📷instagram.com/sclubshop\n\n\n🏬Бар 'Сегодня можно'\n🗺ул. Советская, 14 \n📱Тел: 643364\n\n💻vk.com/segodnyamozhno\n💻vk.com/lounge_bsm\n📷instagram.com/segodnya_mozhno_lounge\n📷instagram.com/segodnya_mozhno\n\n\n🏬Берлога Shop&Lounge\n🗺ул. Красногеройская 63б\n📱Тел: +7 (912) 021-34-12\n\n💻vk.com/club171797380\n📷instagram.com/berloga_lounge_shop",
                            "random_id": 0,
                            "attachment": "photo-169871449_456239106"
                        })
                elif (body.find('прайс') !=
                      -1) or (body.find('цены') !=
                              -1) or (body.find('цена') != -1) or (
                                  body.find('стоимость') !=
                                  -1) or (body.find('чаши') !=
                                          -1) or (body.find('чаша') != -1) or (
                                              body.find('чашка') != -1) or (
                                                  body.find('чашки') != -1):
                    vk.method(
                        "messages.send", {
                            "peer_id":
                            toid,
                            "message":
                            "",
                            "random_id":
                            0,
                            "attachment":
                            "photo-169871449_457239266,photo-169871449_457239267,photo-169871449_457239268,photo-169871449_457239269,photo-169871449_457239270"
                        })
                elif body.find('казахстан') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message": """
				
Мы находимся по адресу:
🏬Rotana Shop Almaty
🗺Сейфуллина проспект, 410
📱Тел: +7 (701) 888-72-77

🏬Rotana Shop Astana
📱Тел: +7 (708) 336-44-41

💻vk.com/hookah_service_kz
💻www.hookahshop.kz
						""",
                            "random_id": 0,
                            "attachment": "photo-169871449_456239102"
                        })
                elif body.find('саратов') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message": """
🏢Шишка shop, Саратов

🗺Чапаева,2
📱+7 (8452) 907-507
10:00 - 03:00

🗺Проспект 50 лет октября,122
+7 (8452) 593-444
13:00-01:00

🗺Усть-Курдюмская, 7б
📱+7 (8452) 52-02–42
13:00-01:00""",
                            "random_id": 0,
                            "attachment": "photo-169871449_456239106"
                        })
                elif body.find('москва hookah market') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message": """
🗺Ул. Мясницкая 24/7 стр. 1
ст. м. Чистые пруды
с 13:00 до 22:00.
📱+7(926)407-20-10

🗺Пр-т Мира, 118
метро Алексеевская
с 13:00 до 22:00
📱+7 (968) 407-01-10

🗺Ул Барклая, 8
ст. м. Багратионовская
с 12:00 до 22:00
📱+7 (965) 400-10-20

🗺Ул. Маршала Бирюзова 12
ст. м. Октярбьское Поле
с 11:00 до 22:00
📱+7 (965) 410-10-20

🗺Ул. Таганская 1/2 стр. 2 (2 этаж)
ст. м. Марксистская
с 12:00 до 23:00
📱+ 7(965) 420-10-20 """,
                            "random_id": 0,
                            "attachment": "photo-169871449_456239102"
                        })
                elif body.find('о нас') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message":
                            "Основаная цель нашего производства - создавать максимально качественную продукцию, не имеющую аналогов.\nМы постарались учесть все критерии качества, которые позволяют нам смело заявить, что вскоре наша продукция займет лидирующую позицию на рынке.\n95% процентов, что после первой забивки вы забудете про все остальные чаши. \n\n◾ Максимально быстрый прогрев.\n\n◾ Усиленная вкусопередача.\n\n◾ Легко мыть, не трескаются от резких перепадов температуры.\n\n◾ Специальная техника отливки позволяет максимально контролировать жар.\n\n◾ Состав и обработка не имеющие аналогов",
                            "random_id": 0,
                            "keyboard": keyboard00000,
                            "keyboard": keyboard,
                            "attachment": "photo-169871449_456239101"
                        })
                elif body == 'начать':
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message":
                            "Здравствуйте! Воспользуйтесь клавиатурой для навигации!",
                            "keyboard": keyboard00000,
                            "keyboard": keyboard,
                            "random_id": 0
                        })
                elif body == 'назад':
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message": "",
                            "keyboard": keyboard,
                            "random_id": 0
                        })
                elif body.find('instagram') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message": "instagram.com/hookah.mason",
                            "keyboard": keyboard,
                            "random_id": 0
                        })
                elif body.find('отзывы') != -1:
                    vk.method(
                        "messages.send", {
                            "peer_id": toid,
                            "message": "vk.com/topic-169871449_39198416",
                            "keyboard": keyboard,
                            "random_id": 0
                        })
                elif body.find('промокод') != -1:
                    if (promo1 == 0):
                        promo1 = vk.method("messages.getHistory", {
                            "offset": 0,
                            "count": 200,
                            "user_id": id
                        })["items"][0]["from_id"]
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message": "Введите промокод",
                                "keyboard": keyboard_back,
                                "random_id": 0
                            })
                    elif (promo2 == 0):
                        promo2 = vk.method("messages.getHistory", {
                            "offset": 0,
                            "count": 200,
                            "user_id": id
                        })["items"][0]["from_id"]
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message": "Введите промокод",
                                "keyboard": keyboard_back,
                                "random_id": 0
                            })
                    elif (promo3 == 0):
                        promo3 = vk.method("messages.getHistory", {
                            "offset": 0,
                            "count": 200,
                            "user_id": id
                        })["items"][0]["from_id"]
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message": "Введите промокод",
                                "keyboard": keyboard_back,
                                "random_id": 0
                            })
                    else:
                        vk.method(
                            "messages.send", {
                                "peer_id": toid,
                                "message":
                                "Система перегружена, повторите попытку через 10 секунд",
                                "random_id": 0
                            })
        except vk_api.AuthError as error_msg:
            print(error_msg)
            vk.method("messages.send", {
                "peer_id": 169871363,
                "message": 'перезагрузка',
                "random_id": 0
            })
示例#17
0
 def __init__(self, group_id, token):
     self.group_id = group_id
     self.token = token
     self.vk = vk_api.VkApi(token=token)
     self.long_poller = VkBotLongPoll(self.vk, self.group_id)
     self.api = self.vk.get_api()
示例#18
0
def main():
    # массив действий
    step = dict()

    # открыть сессию
    vk_session = vk_api.VkApi(
        token='4672e23f8c6f5a903b1bc27b081bd1525ba191a5d37aeaa1ef77ff885fd307b0764746032c0b28d608216')

    # открыть процесс
    longpoll = VkBotLongPoll(vk_session, 195023097)

    # перебрать события
    for event in longpoll.listen():

        # если событие - новое сообщение
        if event.type == VkBotEventType.MESSAGE_NEW:

            # id пользователя отправившего сообщение
            peer_id = event.object.peer_id

            # обнуление всех действий для текущего пользователя
            try:
                step[peer_id] = step[peer_id]
            except KeyError:
                # массив действий (приветствие, как дела, погода)
                step[peer_id] = dict(hallo=0, tricks=0)

            # массив отправлений (тест, стикер)
            outer = dict(text="", sticker=0)

            # массив шаблонов фраз
            rubber = dict(
                how_are_you="Как дела?",
                talk_about_weather="Поговорим о погоде?\nСпросите меня: какая погода в...",
            )

            # тест полученного сообщения в нижнем регистре + удалить знаки пунктуации (!.?)
            inner = ''.join(c for c in event.object.text.lower() if c not in ('!', '.', '?'))

            # ВАРИАНТЫ ПРИВЕТСТВИЯ
            if inner in [
                'хелло',
                'привет',
                'здравствуйте',
            ]:

                # если это первое приветствие
                if not step[peer_id]['hallo']:
                    # дополнить исходящее сообщение
                    outer['text'] += "Здравствуйте, спасибо, что написали нам!\n"
                # если это повтроное приветствие
                else:
                    # прилепить стикер (хелло)
                    outer['sticker'] = 13699

                # отметить в массиве действий
                step[peer_id]['hallo'] += 1
                # дополнить исходящее сообщение
                outer['text'] += rubber['how_are_you']


            # ВАРИАНТЫ СОСТОЯНИЯ ДЕЛ (хорошие)
            elif inner in [
                'превосходно',
                'отлично',
                'хорошо',
            ]:

                # если это первое сообщение о состоянии дел
                if not step[peer_id]['tricks']:
                    # дополнить исходящее сообщение
                    outer['text'] += "Приятно, когда у человека всё хоршо!\n"
                # если это повтроное сообщение о состоянии дел
                else:
                    # прилепить стикер (лойс)
                    outer['sticker'] = 13710

                # отметить в массиве действий
                step[peer_id]['tricks'] += 1
                # дополнить исходящее сообщение
                outer['text'] += rubber['talk_about_weather']

            # ВАРИАНТЫ СОСТОЯНИЯ ДЕЛ (нейтральные)
            elif inner in [
                'нормально',
                'норм',
                'никак',
                'не плохо',
            ]:

                # если это первое сообщение о состоянии дел
                if not step[peer_id]['tricks']:
                    # дополнить исходящее сообщение
                    outer['text'] += "Отлично! Эмоциональная стабильность повышает работоспособность.\n"
                # если это повтроное сообщение о состоянии дел
                else:
                    # прилепить стикер (щёлк-щёлк)
                    outer['sticker'] = 13701

                # отметить в массиве действий
                step[peer_id]['tricks'] += 1
                # дополнить исходящее сообщение
                outer['text'] += rubber['talk_about_weather']

            # ВАРИАНТЫ СОСТОЯНИЯ ДЕЛ (плохие)
            elif inner in [
                'отвратительно',
                'плохо',
                'не очень',
            ]:
                # создать пустое исходящее сообщение
                outer['text'] = ""

                # если это первое сообщение о состоянии дел
                if not step[peer_id]['tricks']:
                    # дополнить исходящее сообщение
                    outer['text'] += "Не расстраивайтесь, всё образуется!\n"
                # если это повтроное сообщение о состоянии дел
                else:
                    # прилепить стикер (иди обниму)
                    outer['sticker'] = 13746

                # отметить в массиве действий
                step[peer_id]['tricks'] += 1
                # дополнить исходящее сообщение
                outer['text'] += rubber['talk_about_weather']

            # ОСТАЛЬНЫЕ СООБЩЕНИЯ (включая погоду)
            else:

                # шаблон фразы о погоде
                pattern = 'какая погода в '
                # найти подстроку в полученном сообщении
                weather = inner.find(pattern)

                # если подстрока найдена
                if weather > -1:
                    # получить название города, удалив подстроку-шаблон
                    city = inner.replace(pattern, '')
                    # обрезать крайние пробелы
                    city = city.strip()
                    # написать город с заглавной буквы
                    city = city.title()

                    # ЗАПРОС ПОГОДЫ В ГОРОДЕ
                    if city != '':
                        # запросить погоду и создать из ответа исходящее сообщение
                        outer['text'] = get_weather(city)

                    # если город пустой
                    else:
                        weather = -1

                # ОСТАЛЬНЫЕ СООБЩЕНИЯ
                if weather < 0:

                    # импорт библиотек
                    import re
                    # сократить много скобок до одной
                    smile = re.sub(r'(\))\1+', r'\1', inner)
                    # если сообщение это "улыбающаяся" скобка
                    if smile == ')':
                        # прилепить стикер (смайл)
                        outer['sticker'] = 13715

                    # если приветствия не было
                    elif not step[peer_id]['hallo']:
                        # прилепить стикер (хелло)
                        outer['sticker'] = 13699

                    # если нет ответа как дела
                    elif not step[peer_id]['tricks']:
                        # создать исходящее сообщение
                        outer['text'] = rubber['how_are_you']

                    # ВСЕ ДРУГИЕ ФРАЗЫ И СОСТОЯНИЯ
                    else:
                        # прилепить стикер (бла-бла-бла)
                        outer['sticker'] = 13711
                        # создать исходящее сообщение
                        outer['text'] += rubber['talk_about_weather']

            # сессия
            vk = vk_session.get_api()
            # если прилеплен стикер - отобразить
            if outer['sticker']:
                vk.messages.send(user_id=event.object.peer_id,
                                 sticker_id=outer['sticker'],
                                 random_id=random.randint(0, 2 ** 64))

            # если сформировано сообщение - отобразить
            if outer['text']:
                vk.messages.send(user_id=event.object.peer_id,
                                 message=outer['text'],
                                 random_id=random.randint(0, 2 ** 64))
示例#19
0
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
import json
from Db import Db
from qiwiActions import invoice, pay_status
from datetime import datetime
from time import sleep
from threading import Thread
from dvach import po_random_comment

with open('config.json') as config:
    conf_data = json.load(config)
QIWI_SECRET = conf_data['qiwi_cash_secret_key']

vk_session = vk_api.VkApi(token=conf_data['vk_api_token'])
vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, conf_data['vk_group_id'])

donate_amount = 200

months = [
    '', 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август',
    'сентябрь', 'октябрь', 'ноябрь', 'декабрь'
]


def answer_vk_message(event, text):
    vk.messages.send(random_id=get_random_id(),
                     user_id=event.message['peer_id'],
                     message=text)

示例#20
0
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
import command_enum
from vk_functions import get_random_id

vk_session = vk_api.VkApi(
    token='c1fa29197260f82e5c97fb4c597aee8091c6c1e36dabaf2c58b38298d780a18d63dc69bd734d2b50f17e4')
vk = vk_session.get_api()

longpoll = VkBotLongPoll(vk_session, '192848017')


def proccess_query(event):
    for command in command_enum.COMAND_ENUM:
        if event.obj.text == command:
            response = command_enum.COMAND_ENUM[command]
            vk_session.method('messages.send', values={
                'user_id': event.obj['from_id'],
                'message': response,
                'random_id': get_random_id()
            })


def listen():
    for event in longpoll.listen():

        if event.type == VkBotEventType.MESSAGE_NEW:
            proccess_query(event)


if __name__ == '__main__':
示例#21
0
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
import vk_api

vk_session = vk_api.VkApi(token='Тут_токен')
session_api = vk_session.get_api()

longpoll = VkBotLongPoll(vk_session, 183439707)


def send_message(peer_id, message):
    session_api.messages.send(peer_id=peer_id, message=message, random_id=0)


if __name__ == '__main__':
    while True:
        for event in longpoll.listen():
            if event.type == VkBotEventType.MESSAGE_NEW:
                send_message(event.object.peer_id, 'Работает')
示例#22
0
        out += key + "="
        for k, v in info_chats[key].items():
            if k == "mute":
                out += "mute." + ",".join(v) + ";"
            else:
                out += k + "." + str(v) + ";"
        out += "|"

    open("db.txt", "w").write(out)


save_info()
comments_ids = get_comments_info()

vk = vk_api.VkApi(token=token)
longpoll = VkBotLongPoll(vk, group_id)
start = True


def f():
    global start
    global info_chats
    threading.Timer(3600, f).start()  # Перезапуск через 60 минут
    if start == False:
        for i in info_chats.keys():
            keyboard = info_chats[i]["keyboard"]
            if info_chats[i]["ue4"] == "t":
                vk.method(
                    "messages.send", {
                        'peer_id':
                        i,
示例#23
0
            mode='a',
            maxBytes=(5 * 1024 * 1024),
            backupCount=2,
            encoding=None,
            delay=False
        )
    else:
        my_handler = logging.StreamHandler()

    my_handler.setFormatter(log_formatter)
    my_handler.setLevel(logging.INFO)

    APP_LOGGER = logging.getLogger('root')
    APP_LOGGER.setLevel(logging.INFO)
    APP_LOGGER.addHandler(my_handler)


if __name__ == '__main__':
    setup_logger(fileFlag=True)

    # setup configuration
    configuration = JsonConfiguration()
    # setup connection to VK API
    vk_session = vk_api.VkApi(token=configuration.get_api_key())
    session_api = vk_session.get_api()
    longpoll = VkBotLongPoll(vk_session, configuration.get_group_id(), 100)
    # setup strategy
    strategy = AdvancedStrategy(session_api, APP_LOGGER, configuration)
    
    main_loop(configuration, strategy, longpoll)
示例#24
0
class VkBot:
    def __init__(self):
        self.timeout = TIMEOUT_SECONDS
        signal.signal(signal.SIGTERM, self.catch_signal)
        self.init_connection()

    def init_connection(self):
        try:
            self.vk_session = vk_api.VkApi(login=os.getenv("LOGIN"),
                                           password=os.getenv("PASSW"))
            try:
                self.vk_session.auth(token_only=True)
            except vk_api.AuthError as e:
                print(e)
                sys.exit(0)
            except vk_api.exceptions.Captcha as e:
                print("CAPTCHA")
                print(e.get_url())
                code = input()
                e.try_again(key=code)

            print("ID:", os.getpid())
            print("Got VK API Session")
            self.group_session = vk_api.VkApi(token=os.getenv("KEY"))
            print("Got Group Session")
            self.longpoll = VkBotLongPoll(self.group_session,
                                          os.getenv("GROUP_ID"))
            print("Got Longpoll Object")
            self.api = self.vk_session.get_api()
            print("Got API Object")
            self.group_api = self.group_session.get_api()
            print("Got Group API Object")
            self.upload = vk_api.VkUpload(self.vk_session)
            print("Got Upload Object")
            self.loader = Downloader()
            print("Got Downloader Object")
        except (requests.exceptions.ConnectionError) as e:
            print("Reinitializing session data")
            print(e)
            print("Timeout:", self.timeout)
            time.sleep(self.timeout)
            self.timeout += 1
            self.init_connection()

    def catch_signal(self, signal, frame):
        print("Stopping...")
        sys.exit(0)

    def send_message(self, user_id, message, attachment=None):
        self.group_api.messages.send(user_id=user_id,
                                     random_id=get_random_id(),
                                     message=message,
                                     attachment=attachment)

    def response(self, event):
        self.send_message(user_id=event.obj.message["from_id"],
                          message="Wait a bit")
        link = self.find_yt(event.obj)
        if link:
            result = self.loader.download(link)
            if result:
                if not result.endswith(".mp3"):
                    index = result.find(".")
                    path = result.replace(result[index:], ".mp3")
                else:
                    path = result
                title, artist = result.lstrip("storage/").rstrip(".mp3").split(
                    "---")
                self.upload_yt(event, path, title, artist)
                os.remove(path)
        else:
            self.send_error(event)
        print()

    def start(self):
        print("Start Longpoll listening")
        while True:
            try:
                for event in self.longpoll.listen():
                    if event.type == VkBotEventType.MESSAGE_NEW:
                        print("Event:\n", pprint.pprint(event.obj))
                        print("From:", event.obj.message["from_id"])
                        print('Message:', event.obj.message["text"])
                        self.response(event)
                    elif event.type == VkBotEventType.MESSAGE_REPLY:
                        print("From(Bot):", event.obj.peer_id)
                        print('Message(Bot):', event.obj.text)
                        print()
                    else:
                        print(event.type)
                        print()
            except (requests.exceptions.ReadTimeout) as e:
                print("Got exception")
                print(type(e))
                print(e)
                time.sleep(self.timeout)
                self.init_connection()
                self.timeout = TIMEOUT_SECONDS
                self.start()

    def upload_yt(self, event, path, title, artist):
        try:
            audio = self.upload.audio(audio=path, title=title, artist=artist)
        except vk_api.exceptions.ApiError as e:
            self.send_message(user_id=event.obj.message["from_id"],
                              message=f"{e.error['error_msg']}")
        else:
            self.send_message(
                user_id=event.obj.message["from_id"],
                message="Your audio:",
                attachment=f"audio{audio['owner_id']}_{audio['id']}")

    def send_error(self, event):
        self.send_message(user_id=event.obj.message["from_id"],
                          message='',
                          attachment='photo-185940778_457239022')

    def find_yt(self, event):
        if event.message["text"] != '':
            pattern = r'(http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.\S*'
            result = re.search(pattern, event.message["text"])
            if result:
                return result.group()
        else:
            if event.message['attachments']:
                attachment = event.message['attachments'][0]
            else:
                return

            if attachment['type'] != 'video' or attachment['video'].get(
                    'platform') != 'YouTube':
                return

            videos = self.api.video.get(
                videos=
                f"{attachment['video']['owner_id']}_{attachment['video']['id']}"
            )

            if not videos['items']:
                return

            return videos['items'][0]['player']
示例#25
0
class Bot:
    """
    Scenario for registration at conference using vk.com

    Supporting FAQ: date, place, registration:
    -asking name
    -asking email
    -registration
    Following all steps and asking for retry if step was failed

    use python 3.9
    """
    def __init__(self, group_id, token):
        """
        :param group_id: group id from vk group
        :param token: secret token from the same vk group
        """
        self.group_id = group_id
        self.token = token
        self.vk = vk_api.VkApi(token=token)
        # self.vk.
        self.long_poller = VkBotLongPoll(vk=self.vk, group_id=self.group_id)
        self.api = self.vk.get_api()

    def run(self):
        """Starting bot"""
        for event in self.long_poller.listen():
            try:
                self.on_event(event=event)
            except Exception as exc:
                log.exception(f"Exception in handling event {exc}")

    @db_session
    def on_event(self, event):
        """
        Sending back text message

        :param event: VkBotMessageEvent object
        :return None
        """
        if event.type != VkBotEventType.MESSAGE_NEW:
            log.info("Can't handle this type of message %s", event.type)
            return

        user_id = event.obj.peer_id
        text = event.obj.text

        state = UserState.get(user_id=str(user_id))

        if state is not None:
            # continue scenario
            self.continue_scenario(text, state, user_id)
        else:
            # search intent
            for intent in settings.INTENTS:
                log.debug(f'User gets {intent}')
                if any(token in text.lower() for token in intent["tokens"]):
                    # run intent
                    if intent["answer"]:
                        self.send_text(intent["answer"], user_id)
                    else:
                        self.start_scenario(user_id, intent["scenario"], text)
                    break
            else:
                self.send_text(settings.DEFAULT_ANSWER, user_id)

    def send_text(self, text_to_send, user_id):
        self.api.messages.send(message=text_to_send,
                               random_id=random.randint(0, 2**20),
                               peer_id=user_id)

    def send_image(self, image, user_id):
        upload_url = self.api.photos.getMessagesUploadServer()['upload_url']
        upload_data = requests.post(url=upload_url,
                                    files={
                                        'photo':
                                        ('image.png', image, 'image/png')
                                    }).json()
        image_data = self.api.photos.saveMessagesPhoto(**upload_data)

        owner_id = image_data[0]['owner_id']
        media_id = image_data[0]['owner_id']
        attachment = f'photo{owner_id}_{media_id}'

        self.api.messages.send(attachment=attachment,
                               random_id=random.randint(0, 2**20),
                               peer_id=user_id)

    def send_step(self, step, user_id, text, context):
        if 'text' in step:
            self.send_text(step["text"].format(**context), user_id)
        if 'image' in step:
            handler = getattr(handlers, step["image"])
            image = handler(text, context)
            self.send_image(image, user_id)

    def start_scenario(self, user_id, scenario_name, text):
        scenario = settings.SCENARIOS[scenario_name]
        first_step = scenario["first_step"]
        step = scenario["steps"][first_step]
        self.send_step(step, user_id, text, context={})
        UserState(user_id=str(user_id),
                  scenario_name=scenario_name,
                  step_name=first_step,
                  context={})

    def continue_scenario(self, text, state, user_id):
        steps = settings.SCENARIOS[state.scenario_name]["steps"]
        step = steps[state.step_name]
        handler = getattr(handlers, step["handler"])
        if handler(text=text, context=state.context):
            # next step
            next_step = steps[step["next_step"]]
            self.send_step(next_step, user_id, text, state.context)
            if next_step["next_step"]:
                # switch to next step
                state.step_name = step["next_step"]
            else:
                # finish scenario
                log.info(state.context)
                Registration(departure=state.context['departure'],
                             arrival=state.context['arrival'],
                             chosen_date=state.context['chosen_date'],
                             places=state.context['places'],
                             phone_number=state.context['number'],
                             email=state.context['email'],
                             confirmed=state.context['confirmed'],
                             comment=state.context['comment'])
                state.delete()
        else:
            # retry current step
            text_to_send = step["failure_text"].format(**state.context)
            self.send_text(text_to_send, user_id)
示例#26
0
import aiohttp
from vk_api import vk_api
from vk_api.bot_longpoll import VkBotLongPoll
from vk_api.keyboard import VkKeyboard
from vk_api.utils import get_random_id

from app.settings import config

token = config["vk"]["access_token"]
v = config["vk"]["v"]
group_id = config["vk"]["group_id"]

vk_session = vk_api.VkApi(token=token)
vk = vk_session.get_api()
longpoll = VkBotLongPoll(
    vk_session,
    group_id=group_id,
)

session = aiohttp.ClientSession()


async def send_message_to_vk(
    peer_id: int,
    message: str,
    keyboard: VkKeyboard = None,
):
    vk.messages.send(
        random_id=get_random_id(),
        peer_id=peer_id,
        message=message,
        keyboard=keyboard,
示例#27
0
import sys

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

from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
from vk_api.longpoll import VkLongPoll, VkEventType
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
import vk_api, random, time, os
import data
token, group_id = data.f()
vk_session = vk_api.VkApi(token=token)
session_api = vk_session.get_api()

longpoll = VkBotLongPoll(vk_session, group_id)


def send_message(peer_id,
                 message=None,
                 attachment=None,
                 keyboard=None,
                 payload=None):
    session_api.messages.send(peer_id=peer_id,
                              message=message,
                              random_id=random.randint(-2147483648,
                                                       +2147483648),
                              attachment=attachment,
                              keyboard=keyboard,
                              payload=payload)


def create_keyboard(payload):
示例#28
0
def main():
    vk_session = vk_api.VkApi(
        token=
        'ab948e1d036b8d2e340bd6e2e66799330708cb59317956632f06a93d4f18f2ad6d89d51cb6683f0479cbd'
    )

    menu_type = 'main_menu'  # main_menu, test, photo_category, mailing, facts, game

    longpoll = VkBotLongPoll(vk_session, 194151011)

    db_session.global_init("db/mailing.sqlite")
    print(1)

    for event in longpoll.listen():
        try:

            id = mailing_check()
            if not id == '':
                try:
                    vk = vk_session.get_api()
                    vk.messages.send(user_id=id,
                                     message=('Здравствуйте! Рассылка фото'),
                                     attachment=random.choice(
                                         get_photo(id_group, id_album)),
                                     random_id=random.randint(0, 2**64))
                except Exception as e:
                    print(e)

            try:
                id = facts_check()
                if not id == '':
                    vk = vk_session.get_api()
                    f = codecs.open('static/facts.txt', 'r', 'utf_8_sig')
                    one_fact = f.read().split('**')
                    f.close()
                    vk.messages.send(user_id=id,
                                     message=(random.choice(one_fact)),
                                     random_id=random.randint(0, 2**64))
            except Exception as e:
                print(e)

            if event.type == VkBotEventType.MESSAGE_NEW:
                vk = vk_session.get_api()
                text = event.obj.text
                keyboard = VkKeyboard(one_time=True)

                if text == 'Фото по категориям':
                    try:
                        keyboard = add_button(keyboard,
                                              'Города',
                                              new_line=False)
                        keyboard = add_button(keyboard, 'Игры')
                        keyboard = add_button(keyboard, 'Горы')
                        vk.messages.send(user_id=event.obj.from_id,
                                         message=('Выберите категорию'),
                                         keyboard=keyboard.get_keyboard(),
                                         random_id=random.randint(0, 2**64))
                        menu_type = 'photo_category'
                    except Exception as e:
                        print(e)
                        menu_type = 'main_menu'

                elif menu_type == 'photo_category':
                    try:
                        up = VkUpload(vk)
                        if text == 'Города':
                            group = 'cities'
                        elif text == 'Горы':
                            group = 'mountains'
                        else:
                            group = 'games'

                        # Подсчёт количества файлов в папке
                        path = 'static/img/{}'.format(group)
                        num_files = len([
                            f for f in os.listdir(path)
                            if os.path.isfile(os.path.join(path, f))
                        ])

                        mes = up.photo_messages(
                            'static/img/{}/pic{}.jpg'.format(
                                group, str(random.randint(1, num_files))))[0]
                        vk.messages.send(
                            user_id=event.obj.from_id,
                            message=(''),
                            attachment=f"photo{mes['owner_id']}_{mes['id']}",
                            random_id=random.randint(0, 2**64))
                    except Exception as e:
                        print(e)
                    menu_type = 'main_menu'

                elif text == 'Рассылка фото':
                    try:
                        keyboard = add_button(keyboard,
                                              'Каждый день',
                                              new_line=False)
                        keyboard = add_button(keyboard, 'Два раза в неделю')
                        keyboard = add_button(keyboard, 'Раз в неделю')
                        keyboard = add_button(keyboard,
                                              'Отписаться от рассылки')
                        vk.messages.send(user_id=event.obj.from_id,
                                         message=('Выберите частоту'),
                                         keyboard=keyboard.get_keyboard(),
                                         random_id=random.randint(0, 2**64))
                        menu_type = 'mailing'
                    except Exception as e:
                        print(e)
                        menu_type = 'main_menu'

                elif text == 'Отписаться от рассылки' and menu_type == 'mailing':
                    try:
                        del_mailing(event.obj.from_id)
                        vk.messages.send(user_id=event.obj.from_id,
                                         message=('Вы отписались от рассылки'),
                                         random_id=random.randint(0, 2**64))
                    except Exception as e:
                        print(e)
                    menu_type = 'main_menu'

                elif menu_type == 'mailing':
                    try:
                        if text == 'Каждый день':
                            times_a_week = 7
                        elif text == 'Два раза в неделю':
                            times_a_week = 2
                        else:
                            times_a_week = 1

                        session = db_session.create_session()
                        text_message = 'Вы подписались на рассылку фото {}. Чтобы отменить рассылку, выберите "Отисаться от' \
                                       ' рассылки" в меню "Рассылка фото"'.format(text.lower())
                        for user in session.query(mailing.Mailing).all():
                            if user.id == event.obj.from_id:
                                del_mailing(event.obj.from_id)
                                text_message = 'Вы поменяли частоту рассылки на {}. Чтобы отменить рассылку, выберите ' \
                                               '"Отисаться от рассылки" в меню "Рассылка фото"'.format(text.lower())
                                break
                        add_mailing(event.obj.from_id, times_a_week)
                        vk.messages.send(user_id=event.obj.from_id,
                                         message=(text_message),
                                         random_id=random.randint(0, 2**64))
                    except Exception as e:
                        print(e)
                    menu_type = 'main_menu'

                elif text == 'Тесты про фотографию':
                    try:
                        test = get_random_test()
                        answer_choice = test[1].split('**')
                        keyboard = add_button(keyboard,
                                              answer_choice[0],
                                              new_line=False)
                        keyboard = add_button(keyboard, answer_choice[1])
                        keyboard = add_button(keyboard, answer_choice[2])
                        keyboard = add_button(keyboard, answer_choice[3])

                        vk.messages.send(user_id=event.obj.from_id,
                                         message=(test[0]),
                                         keyboard=keyboard.get_keyboard(),
                                         random_id=random.randint(0, 2**64))
                        answer = test[2]
                        menu_type = 'test'
                    except Exception as e:
                        print(e)
                        menu_type = 'main_menu'

                elif menu_type == 'test':
                    try:
                        if text == answer:
                            vk.messages.send(
                                user_id=event.obj.from_id,
                                message=(
                                    'Поздравляем! Вы ответили правильно!'),
                                random_id=random.randint(0, 2**64))
                        else:
                            vk.messages.send(
                                user_id=event.obj.from_id,
                                message=
                                ('К сожалению, Вы ошиблись. Правильный ответ: {}'
                                 .format(answer)),
                                random_id=random.randint(0, 2**64))
                    except Exception as e:
                        print(e)

                    menu_type = 'main_menu'

                elif text == 'Рассылка интересных фактов про фото':
                    try:
                        keyboard = add_button(keyboard,
                                              'Каждый день',
                                              new_line=False)
                        keyboard = add_button(keyboard, 'Два раза в неделю')
                        keyboard = add_button(keyboard, 'Раз в неделю')
                        keyboard = add_button(keyboard,
                                              'Отписаться от рассылки')
                        vk.messages.send(user_id=event.obj.from_id,
                                         message=('Выберите частоту'),
                                         keyboard=keyboard.get_keyboard(),
                                         random_id=random.randint(0, 2**64))
                        menu_type = 'facts'
                    except Exception as e:
                        print(e)
                        menu_type = 'main_menu'

                elif text == 'Отписаться от рассылки' and menu_type == 'facts':
                    try:
                        del_fact(event.obj.from_id)
                        vk.messages.send(user_id=event.obj.from_id,
                                         message=('Вы отписались от рассылки'),
                                         random_id=random.randint(0, 2**64))
                    except Exception as e:
                        print(e)
                    menu_type = 'main_menu'

                elif menu_type == 'facts':
                    try:
                        if text == 'Каждый день':
                            times_a_week = 7
                        elif text == 'Два раза в неделю':
                            times_a_week = 2
                        else:
                            times_a_week = 1

                        session = db_session.create_session()
                        text_message = 'Вы подписались на рассылку интересных фактов {}. Чтобы отменить рассылку, выберите ' \
                                       '"Отисаться от' \
                                       ' рассылки" в меню "Интересные факты про фото"'.format(text.lower())
                        for user in session.query(facts.Facts).all():
                            if user.id == event.obj.from_id:
                                del_fact(event.obj.from_id)
                                text_message = 'Вы поменяли частоту рассылки на {}. Чтобы отменить рассылку, выберите ' \
                                               '"Отисаться от рассылки" в меню "Рассылка фото"'.format(text.lower())
                                break
                        add_facts(event.obj.from_id, times_a_week)
                        vk.messages.send(user_id=event.obj.from_id,
                                         message=(text_message),
                                         random_id=random.randint(0, 2**64))
                    except Exception as e:
                        print(e)
                    menu_type = 'main_menu'

                elif text == 'Игры на внимательность':
                    try:
                        game = get_random_game()
                        answer_choice = game[2].split('**')
                        keyboard = add_button(keyboard,
                                              answer_choice[0],
                                              new_line=False)
                        keyboard = add_button(keyboard, answer_choice[1])
                        keyboard = add_button(keyboard, answer_choice[2])
                        keyboard = add_button(keyboard, answer_choice[3])

                        vk.messages.send(user_id=event.obj.from_id,
                                         message=(game[1]),
                                         attachment='static/games/{}'.format(
                                             game[0]),
                                         keyboard=keyboard.get_keyboard(),
                                         random_id=random.randint(0, 2**64))
                        answer = game[3]
                        menu_type = 'game'
                    except Exception as e:
                        print(e)
                        menu_type = 'main_menu'

                elif menu_type == 'game':
                    try:
                        if text == answer:
                            vk.messages.send(
                                user_id=event.obj.from_id,
                                message=(
                                    'Поздравляем! Вы ответили правильно!'),
                                random_id=random.randint(0, 2**64))
                        else:
                            vk.messages.send(
                                user_id=event.obj.from_id,
                                message=
                                ('К сожалению, Вы ошиблись. Правильный ответ: {}'
                                 .format(answer)),
                                random_id=random.randint(0, 2**64))

                    except Exception as e:
                        print(e)
                    menu_type = 'main_menu'

                if menu_type == 'main_menu':
                    try:
                        keyboard = add_button(keyboard,
                                              'Фото по категориям',
                                              new_line=False)
                        keyboard = add_button(keyboard, 'Рассылка фото')
                        keyboard = add_button(keyboard, 'Тесты про фотографию')
                        keyboard = add_button(
                            keyboard, 'Рассылка интересных фактов про фото')
                        keyboard = add_button(keyboard,
                                              'Игры на внимательность')

                        if text == 'Начать':
                            vk.messages.send(user_id=event.obj.from_id,
                                             message=('Здравствуйте'),
                                             attachment=random.choice(
                                                 get_photo(
                                                     (id_group, id_album))),
                                             keyboard=keyboard.get_keyboard(),
                                             random_id=random.randint(
                                                 0, 2**64))
                        else:
                            vk.messages.send(user_id=event.obj.from_id,
                                             message=('Выберите категорию'),
                                             keyboard=keyboard.get_keyboard(),
                                             random_id=random.randint(
                                                 0, 2**64))
                    except Exception as e:
                        print(e)
        except Exception as e:
            print(e)
 def __init__(self, main_token, group_id):
     self.group_id = group_id
     self.vk_session = vk_api.VkApi(token=main_token)
     self.vk = self.vk_session.get_api()
     self.longpool = VkBotLongPoll(self.vk_session, self.group_id)
示例#30
0
class VkServer:
    def __init__(self, server_name, group_file_name, group_id, api_token):
        self.server_name = server_name
        self.group_file_name = group_file_name
        self.parser = Parser()

        print(f"[{server_name}] connection to vk API...")

        self.vk = vk_api.VkApi(token=api_token)
        self.vk_s = self.vk.get_api()

        self.longpoll = VkBotLongPoll(self.vk, group_id, wait=25)

        self.ids = self._set_persons(group_file_name)

        self.messenger = Messenger(self.vk_s, self.ids)

        self.spam = Spam(self.vk_s, self.ids, self.group_file_name)

        print("Server " + self.server_name + " working...")

    def _set_persons(self, filename):
        data = JSONFile.read_json(filename)
        res = {}
        for info in data['Persons']:
            res[data["Persons"][info]['vkid']] = Assistant(
                self.vk_s, data["Persons"][info]['vkid'], info,
                self.group_file_name)

        return res

    def start(self):
        # Слушаем сервер
        for event in self.longpoll.listen():
            self.do_requests_list()
            # Новое сообщение
            if event.type == VkBotEventType.MESSAGE_NEW:

                if str(event.object.from_id) not in self.ids:
                    self.ids[str(event.object.from_id)] = Assistant(
                        self.vk_s, event.object.from_id,
                        JSONFile.get_id_by_vkid(str(event.object.from_id),
                                                self.group_file_name),
                        self.group_file_name, True)

                if event.group_id:
                    pass

                if True:

                    if event.object.id == 0:
                        self.messenger.send_message(
                            event.object.from_id,
                            "Сообщения в группе запрещены. "
                            "Пожалуйста, пишите в личные сообщения)))")
                    else:
                        self.messenger.send_message_by_event(
                            event, from_id=event.object.from_id)

    def do_requests_list(self, filename="request_list.json"):
        data = JSONFile.read_json(filename)
        for request_type in data["request"]:
            index = 0
            max_value_index = len(data['request'][request_type])
            if request_type == "swap":
                while index < max_value_index:
                    swap_c = data['request'][request_type][index].split()
                    cmd = "$$swap " + swap_c[0] + " " + swap_c[1]

                    self.ids[JSONFile.get_vkid_by_id(
                        swap_c[1], self.group_file_name)].command(cmd)

                    del data['request'][request_type][index]
                    max_value_index -= 1

                    index += 1

                    if index == max_value_index:
                        break
            elif request_type == "send2all":
                if len(data['request']['send2all']) > 0:
                    self.spam.send_spam(data['request']['send2all'])
                    del data['request']['send2all'][0]

        JSONFile.set_json_data(data, filename)

    def mainloop(self, exceptions=0):
        if exceptions > 9:
            self.vk_s.messages.send(
                peer_id=admin_vk_id,
                message="Произошло больше 9 ошибок. Отключаю сервер...")
            return

        try:
            self.start()

        except Exception as e:
            self.vk_s.messages.send(
                peer_id=admin_vk_id,
                message="Произошла ошибка! Перезапускаюсь! " + e.__str__())
            self.mainloop(exceptions + 1)

    def get_server_name(self):
        return self.server_name
示例#31
0
import random, vk_api, vk
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
from vk_api.utils import get_random_id

import info, keyboards, game
import os
import os.path

vk_session = vk_api.VkApi(token=info.token)
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
longpoll = VkBotLongPoll(vk_session, info.publicId)
vk = vk_session.get_api()
from vk_api.longpoll import VkLongPoll, VkEventType
Lslongpoll = VkLongPoll(vk_session)
Lsvk = vk_session.get_api()

import data

try:
    os.mkdir('Game')
    os.mkdir('Game/Maps')
    os.mkdir('UsersInfo')
    print('dir created')
except:
    print('dir found')
print('bot started')
for event in Lslongpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
        if event.from_user:
            #Смотрим статус пользователя
            userStatus = data.getUserStatus(event.user_id)