コード例 #1
0
ファイル: longpoll.py プロジェクト: python273/vk_api
def main():
    """ Пример использования longpoll

        https://vk.com/dev/using_longpoll
        https://vk.com/dev/using_longpoll_2
    """

    login, password = '******', 'mypassword'
    vk_session = vk_api.VkApi(login, password)

    try:
        vk_session.auth(token_only=True)
    except vk_api.AuthError as error_msg:
        print(error_msg)
        return

    longpoll = VkLongPoll(vk_session)

    for event in longpoll.listen():

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

            if event.from_me:
                print('От меня для: ', end='')
            elif event.to_me:
                print('Для меня от: ', end='')

            if event.from_user:
                print(event.user_id)
            elif event.from_chat:
                print(event.user_id, 'в беседе', event.chat_id)
            elif event.from_group:
                print('группы', event.group_id)

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

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

            if event.from_user:
                print(event.user_id)
            elif event.from_group:
                print('администратор группы', event.group_id)

        elif event.type == VkEventType.USER_TYPING_IN_CHAT:
            print('Печатает ', event.user_id, 'в беседе', event.chat_id)

        elif event.type == VkEventType.USER_ONLINE:
            print('Пользователь', event.user_id, 'онлайн', event.platform)

        elif event.type == VkEventType.USER_OFFLINE:
            print('Пользователь', event.user_id, 'оффлайн', event.offline_type)

        else:
            print(event.type, event.raw[1:])
コード例 #2
0
def main():

    if DEBUG:
        print("Start work!")

    session = requests.Session()

    # Авторизация пользователя:
    """
    vk_session = vk_api.VkApi(login, password)
    try:
        vk_session.auth()
    except vk_api.AuthError as error_msg:
        print(error_msg)
        return
    """

    # Авторизация группы:
    # при передаче token вызывать vk_session.auth не нужно
    """
    vk_session = vk_api.VkApi(token='токен с доступом к сообщениям и фото')
    """
    vk_session = vk_api.VkApi(token=vk_token)

    vk = vk_session.get_api()

    longpoll = VkLongPoll(vk_session)

    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
            # Отправка в Slack чат (#vk) - должен быть заранее создан у вас в Slack
            slack.chat.post_message('#vk', 'Новое сообщение: id{}: "{}"'.format(event.user_id, event.text))
            if DEBUG:
                print('id{}: "{}"'.format(event.user_id, event.text), end=' ')

            # Ответ пользователю на сообщение в ВК.
            vk.messages.send(
                user_id=event.user_id,
                message="Мы получили ваше сообщение. В ближайшее время мы ответим вам."
            )
            if DEBUG:
                print('ok')
コード例 #3
0
ファイル: BotServer.py プロジェクト: dslvkbot/waterbot
 def bot_processing(self):
     longpoll = VkLongPoll(self.vk_session)
     while True:
         try:
             for event in longpoll.listen():
                 if hasattr(event, 'type'):
                     if event.type == VkEventType.MESSAGE_NEW:
                         self.parse_message(event)
                         print('Новое сообщение:')
                         if event.from_me:
                             print('От меня для: ', end='')
                         elif event.to_me:
                             print('Для меня от: ', end='')
                         if event.from_user:
                             print(event.user_id)
                         elif event.from_chat:
                             print(event.user_id, 'в беседе', event.chat_id)
                         elif event.from_group:
                             print('группы', event.group_id)
                         print('Текст: ', event.text)
                     elif event.type == VkEventType.USER_TYPING:
                         print('Печатает ', end='')
                         if event.from_user:
                             print(event.user_id)
                         elif event.from_group:
                             print('администратор группы', event.group_id)
                     elif event.type == VkEventType.USER_TYPING_IN_CHAT:
                         print('Печатает ', event.user_id, 'в беседе', event.chat_id)
                     elif event.type == VkEventType.USER_ONLINE:
                         print('Пользователь', event.user_id, 'онлайн', event.platform)
                     elif event.type == VkEventType.USER_OFFLINE:
                         print('Пользователь', event.user_id, 'оффлайн', event.offline_type)
                     else:
                         print(event.type, event.raw[1:])
         except AttributeError:
             print('Voice Record\n\n\n')
コード例 #4
0
ファイル: vk_bot.py プロジェクト: endygamedev/vk_bot
with open('data/birth.txt', 'r', encoding='utf-8') as birthdays:
    birthdays_list = birthdays.readlines()

# фильмы
with open('data/films.txt', 'r', encoding='utf-8') as films:
    film_list = films.readlines()

# олипипиадные задачки
with open('data/olimp.txt', 'r', encoding='utf-8') as olimp:
    olimp_list = olimp.readlines()

with open('data/mails.txt', 'r', encoding='utf-8') as mails:
    mails_list = ''.join(mails.readlines())

# запуск бота
for session in longpoll.listen():
    if session.type == VkEventType.MESSAGE_NEW:

        user_message = session.text.lower()
        keyboard = create_keyboard(user_message)

        if session.to_me:
            if user_message == commands_list[0]:  # привет
                send_photo(
                    vk, session.user_id,
                    random.choice(_EMOJIS) +
                    random.choice(greetings_list[25:-40]),
                    random.choice(_PICTURES['hello']), keyboard)

            elif user_message == commands_list[1]:  # пока
                send_photo(
コード例 #5
0
ファイル: main.py プロジェクト: egorkosatka/DatingBot
            comm = int(i.raw['comment'])
        except:
            comm = 0
        if payment_code == comm:
            return (True, i)
    return False


def get_qiwi_payment_url():
    """ функция генерирует платёжную форму для пользователя """
    url = f"https://qiwi.com/payment/form/99999?extra%5B%27account%27%5D=SAINA682&extra%5B%27comment%27%5D=42345&amountInteger={qiwi_count}" \
          "&amountFraction=0&currency=643&blocked[0]=sum&blocked[1]=account&blocked[2]=comment&extra%5B%27accountType%27%5D=nickname"
    return url


for i in longpoll.listen():
    if i.type == VkEventType.MESSAGE_NEW and i.to_me:
        now = datetime.datetime.now().date()
        text = i.text.lower()  # текст сообщения пользователя
        normaltext = i.text  # текст без lower()
        user_id = i.user_id  # id пользователя вк
        state = database.execute(f'SELECT state FROM users WHERE user_id={user_id}').fetchone()  # получение состояния

        if not state is None:  # проверка, есть ли юзер в базе
            state = state[0]


        def send(text, keyboard=None, id=user_id, attachments=0):

            """ функция отправки сообщения """
            if keyboard:
コード例 #6
0
def write_msg(user_id, message):
    vk.messages.send(user_id=user_id,
                     message=message,
                     random_id=random.randint(0, 2**64))


week = [
    'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота',
    'воскресенье'
]
token = "TOKEN"
# Авторизуемся как сообщество
vk_session = vk_api.VkApi(token=token)

longpoll = VkLongPoll(vk_session)  # пример бота из учебника не работал,
for event in longpoll.listen():  # поэтому код немного другой

    if event.type == VkEventType.MESSAGE_NEW:
        if event.to_me:
            vk = vk_session.get_api()

            string = '''Привет, вы можете у меня узнать день недели по дате в формате "YYYY-MM-DD"'''

            text = event.text
            try:
                text = text.split('-')
                if len(text[0]) != 4:
                    raise Exception
                if len(text[1]) != 2:
                    raise Exception
                if len(text[2]) != 2:
コード例 #7
0
class Bot:
    base_reply = \
        """
        Тональность определяется от 0% (плохо) до 100% (хорошо)
        Результат для вашего запроса - {}%
        """
    help_reply = \
        """
        Вы можете помочь нам, отправив сообщение с тональностью, которую вы считаете правильным
        """
    start_msg = \
        """
        Это бот для тестирования системы тонального анализа, используемого на нашем сайте. 
        Отправьте любой текст, чтобы бот определил его тональность
        """

    def __init__(self):
        self.use_digital_responces = False
        self.session = vk_api.VkApi(token=credentials['vk_bot_key'])
        self.vk = self.session.get_api()
        self.longpoll = VkLongPoll(self.session)
        self.ta = SentimentAnalyser(True)
        self.history = {}

    def pool(self):
        for event in self.longpoll.listen():
            if event.type == VkEventType.MESSAGE_NEW:
                if event.to_me:
                    request = event.text.strip()

                    print(event.user_id, ":", ' '.join([str(x) for x in re.split('[^A-zА-я0-9]', request) if x != '']))

                    hist = self.history.get(event.user_id, None)

                    try:
                        if json.loads(event.payload).get('command', None) == 'start':
                            self.write_msg(event.user_id, self.start_msg)
                            continue
                    except:
                        pass

                    if not request:
                        self.write_msg(event.user_id, "Простите, но вы ничего не написали")
                    elif request.isdecimal() and hist is not None and self.use_digital_responces:
                        val = int(request)
                        if val < 0 or val > 100:
                            self.write_msg(event.user_id, "Входные данные некорректны")
                        else:
                            txt = ' '.join([str(x) for x in re.split('[^A-zА-я0-9]', hist) if x != ''])
                            if txt and not txt.isdecimal():
                                with open('bot_results.csv', 'a') as o:
                                    o.write("{},{}\n".format(txt, val / 100.0))
                            self.write_msg(event.user_id, "Спасибо, ваш ответ учтен.")
                            del self.history[event.user_id]
                    else:
                        res = self.ta.get_polarity(request)
                        stid = filter(lambda x: x[1][0] <= res < x[1][1],
                                      enumerate([[0, 0.2], [0.2, 0.4], [0.4, 0.6], [0.6, 0.8], [0.8, 1]])).__next__()[0]
                        sticker = [9027, 9020, 9034, 9008, 9009][stid]

                        self.history[event.user_id] = request
                        self.write_msg(event.user_id,
                                       self.base_reply.strip().format(round(res * 100, 2)))
                        self.write_sticker(event.user_id, sticker)
                        if self.use_digital_responces:
                            self.write_msg(event.user_id,
                                           self.help_reply.strip())

    def write_msg(self, user_id, message):
        self.vk.messages.send(
            random_id=get_random_id(),
            user_id=user_id,
            message=message,
        )

    def write_sticker(self, user_id, id):
        self.vk.messages.send(
            random_id=get_random_id(),
            user_id=user_id,
            sticker_id=id
        )
コード例 #8
0
ファイル: ver_1_1.py プロジェクト: Jinedl/Uka1
                     random_id=random.getrandbits(64),
                     message=text)


def send_qst(u_id, q, *btns):
    kb = vk_api.keyboard.VkKeyboard(one_time=False, inline=True)
    for b in btns:
        kb.add_button(b, color=VkKeyboardColor.DEFAULT)
    vk.messages.send(user_id=u_id,
                     random_id=random.getrandbits(64),
                     keyboard=kb.get_keyboard(),
                     message=q)


stage = 0
for boo in longpoll.listen():
    if boo.type == VkEventType.MESSAGE_NEW and boo.text and boo.to_me:

        u_id = boo.user_id

        if stage == 0:
            #старт и вопрос0
            if boo.text == 'Начать':
                send_msg(u_id, hello)
                send_qst(u_id, questions[0], btn_texts[0])
                stage = 1
            else:
                send_msg(u_id, 'Напишите "Начать"')

        elif stage == 1:
            #ответ0 и вопрос1
コード例 #9
0
def main():
    session = vk_api.VkApi(
        token=
        '19a4a4d060e680a839b18d07e0923197bb60ea2ca305b2cf3358d314921047c1c57082a2204ec39290acf'
    )
    longpoll = VkLongPoll(session)
    vk = session.get_api()
    for event in longpoll.listen():
        if event.from_chat:
            try:
                ms = event.text.lower()
            except AttributeError:
                continue
            if "id228102740" in ms or "https://vk.com/ded_moksem" in ms:
                vk.messages.send(peer_id=event.peer_id,
                                 message="✅Сигнал отправлен дежурному",
                                 random_id=0)
            elif "add" in ms and event.user_id in allow:
                xid = ms[7:16]
                try:
                    vk.messages.addChatUser(chat_id=event.chat_id, user_id=xid)
                    vk.messages.send(
                        peer_id=event.peer_id,
                        message="✅Пользователь был добавлен в беседу",
                        random_id=0)
                except Exception as error:
                    print(error)
                    vk.messages.send(
                        peer_id=event.peer_id,
                        message=
                        "⚠Не могу добавить, проверьте его на наличие в друзьях или в беседе.",
                        random_id=0)
            elif "del" in ms and event.user_id in allow:
                kid = ms[7:16]
                try:
                    vk.messages.removeChatUser(chat_id=event.chat_id,
                                               user_id=kid)
                    vk.messages.send(
                        peer_id=event.peer_id,
                        message="✅Пользователь был удалён из беседы ",
                        random_id=0)
                except Exception as error:
                    print(error)
                    vk.messages.send(peer_id=event.peer_id,
                                     message="Не могу удалить пользователя",
                                     random_id=0)

            elif "chat id" in ms:
                vk.messages.send(peer_id=event.peer_id,
                                 message="Айди этого чата среди моих: " +
                                 str(event.chat_id),
                                 random_id=0)

            elif "exit" in ms and event.user_id in allow:
                vk.messages.send(peer_id=event.peer_id,
                                 message="Покидаю беседу",
                                 random_id=0)
                vk.messages.removeChatUser(chat_id=event.chat_id,
                                           member_id=228102740)

            if "adm" in ms:
                jjd = ms[7:16]
                if event.user_id == 228102740:
                    try:
                        allow.append(int(jjd))
                    except Exception as error:
                        print(error)
            if "-adm" in ms:
                jjd = ms[7:16]
                if event.user_id == 228102740:
                    try:
                        allow.remove(int(jjd))
                    except Exception as error:
                        print(error)
            elif "+друг" in ms:
                try:
                    vk.friends.add(user_id=event.user_id)
                    vk.messages.send(peer_id=event.peer_id,
                                     message="отправил заявку",
                                     random_id=0)
                except Exception as error:
                    print(error)
                vk.messages.send(peer_id=event.peer_id,
                                 message="Не удалось отправить заявку",
                                 random_id=0)

            elif "report" in ms:
                repid = ms[11:20]
                vk.users.report(user_id=int(repid), type="spam")
                vk.messages.send(peer_id=event.peer_id,
                                 message="Жалоба на [id" + repid +
                                 "|пользователя] отправлена",
                                 random_id=0)
コード例 #10
0
class ServerBot:
    def __init__(self, users_token=u_t, group_token=b_t):
        self.vk = vk_api.VkApi(token=group_token)
        self.long_poll = VkLongPoll(self.vk)
        self.users_token = users_token
        self.request = ''
        self.user_id = 0
        self.state = STATUSES["hello"]
        self.status = 2
        self.gender = 1
        self.age_from: int = 18
        self.age_to: int = 20
        self.country = "узбекистан"
        self.town = "ташкент"
        self.user_name = ""
        self.user_id_db = 0
        self.gender_text = ""

    def send_msg(self, user_id, message):
        self.vk.method("messages.send", {
            'user_id': user_id,
            'message': message,
            "random_id": randrange(10**7)
        })

    def hello(self):
        user = BotUsers(self.user_id, self.user_name)
        self.user_name = know_username(self.user_id)
        self.send_msg(
            self.user_id, f"Привет {self.user_name}!\n"
            f"Я бот VKinder ваш помощник для помощи вводите bot_commands")
        self.state = STATUSES["commands"]
        return self.state

    def commands(self):
        return self.send_msg(
            self.user_id, f"Выберите команду:\n"
            f"Search_users: Искать людей для знакомства\n"
            f"News: Новости про команды Boston Celtics\n"
            f"History: История команды Boston Celtics и прочие материалы")

    def searching(self):
        search = search_users(self.age_from, self.age_to, self.gender,
                              self.town, self.state, self.country)
        for i in search:
            # insert_into_searched_users(i['User_ID'], i["name"], i["town"], False, self.user_id)
            self.send_msg(
                self.user_id, f'{i["name"]}, ID: {i["User_ID"]}, '
                f'жил(-а) в городе(городах):{i["town"]}')
            # self.send_msg(self.user_id, f"Нравится?) если да то пишите like если нет то пишите hate")
        self.state = STATUSES["commands"]
        self.send_msg(
            self.user_id,
            "Этот сеанс окончен и мы возвращаемся в состояние bot_commands")
        self.commands()

    def news(self):
        for news in n_c():
            self.send_msg(self.user_id, news)
        self.send_msg(
            self.user_id,
            "Этот сеанс окончен и мы возвращаемся в состояние bot_commands")
        self.state = STATUSES["commands"]
        self.commands()

    def history(self):
        self.send_msg(self.user_id, i_s_w())
        self.send_msg(
            self.user_id,
            "Этот сеанс окончен и мы возвращаемся в состояние bot_commands")
        self.state = STATUSES["commands"]
        self.commands()

    def talking(self):
        for event in self.long_poll.listen():
            if event.type == VkEventType.MESSAGE_NEW:
                if event.to_me:
                    self.request = event.text.lower()
                    self.user_id = event.user_id

                    # print(search_users(self.age_from, self.age_to, self.gender, self.town, self.status, self.country))
                    if self.request == "привет" and self.state == STATUSES[
                            "hello"]:
                        self.hello()

                    elif self.request == "bot_commands" and self.state == STATUSES[
                            "commands"]:
                        self.commands()

                    elif self.request == "search_users" and self.state == STATUSES[
                            "commands"]:
                        self.state = STATUSES["choose_country_wait"]
                        self.send_msg(
                            self.user_id,
                            f"ВНИМАНИЯ! предупреждаю вас о том когда вы наберёте не правильную"
                            f" команду или не правильно вводите параметры поиска то это в конце"
                            f" концов повлияет на ваш же поиск и вы не получите нужный ответ и "
                            f"мы снова возвращаемся в bot_commands!\n"
                            f"Поэтому просим вас быть внимательнее и правильно заполнить нужные"
                            f" поля! спасибо за понимание)\n"
                            f"Ну а теперь приступим к поиску)\n"
                            f"Вводите страну поиска Например Россия, Украина, Белорусия и т.д.\n"
                        )

                    elif self.state == STATUSES["choose_country_wait"]:
                        self.state = STATUSES["choose_city_wait"]
                        self.country = self.request
                        self.send_msg(self.user_id, f"Вводите город поиска")

                    elif self.state == STATUSES["choose_city_wait"]:
                        self.town = self.request
                        self.state = STATUSES["choose_gender"]
                        self.send_msg(
                            self.user_id, f"вводите пол юзера:\n"
                            f"man - мужчина\n"
                            f"woman - женщина\n"
                            f"any - без разницы")

                    elif self.request == "man" and self.state == STATUSES[
                            "choose_gender"]:
                        self.gender = 2
                        self.gender_text = "man"
                        self.state = STATUSES["choose_age_from"]
                        self.send_msg(
                            self.user_id,
                            f"Вводите минимальный возраст пользователя "
                            f"от 10 до 100")

                    elif self.request == "woman" and self.state == STATUSES[
                            "choose_gender"]:
                        self.gender = 1
                        self.gender_text = "woman"
                        self.state = STATUSES["choose_age_from"]
                        self.send_msg(
                            self.user_id,
                            f"Вводите минимальный возраст пользователя "
                            f"от 10 до 100")

                    elif self.request == "any" and self.state == STATUSES[
                            "choose_gender"]:
                        self.gender = 0
                        self.gender_text = "any"
                        self.state = STATUSES["choose_age_from"]
                        self.send_msg(
                            self.user_id,
                            f"Вводите минимальный возраст пользователя "
                            f"от 10 до 100")

                    elif self.state == STATUSES["choose_age_from"]:
                        self.state = STATUSES["choose_age_to"]
                        self.age_from = self.request
                        self.send_msg(
                            self.user_id,
                            f"Вводите максимальный возраст пользователя"
                            f" и оно не должно быть меньше минимального возраста"
                        )

                    elif self.state == STATUSES["choose_age_to"]:
                        self.state = STATUSES["choose_status"]
                        self.age_to = self.request
                        self.send_msg(
                            self.user_id,
                            f"Вводите номер статуса пользователя:\n"
                            f"1.не женат(не за мужем)\n"
                            f"2.встречается\n"
                            f"3.помолвлен(-а)\n"
                            f"4.женат(за мужем)\n"
                            f"5.всё сложно\n"
                            f"6.в активном поиске\n"
                            f"7.влюблен(-а)\n"
                            f"8.в гражданском браке")

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "1":
                        self.state = STATUSES["got_it"]
                        self.status = 1
                        self.send_msg(self.user_id, f"Хотите начать?\n"
                                      f"пишите да или нет")

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "2":
                        self.state = STATUSES["got_it"]
                        self.status = 2
                        self.send_msg(self.user_id, f"Хотите начать?\n"
                                      f"пишите да или нет")

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "3":
                        self.state = STATUSES["got_it"]
                        self.status = 3
                        self.send_msg(self.user_id, f"Хотите начать?\n"
                                      f"пишите да или нет")

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "4":
                        self.state = STATUSES["got_it"]
                        self.status = 4
                        self.send_msg(self.user_id, f"Хотите начать?\n"
                                      f"пишите да или нет")

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "5":
                        self.state = STATUSES["got_it"]
                        self.status = 5
                        self.send_msg(self.user_id, f"Хотите начать?\n"
                                      f"пишите да или нет")

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "6":
                        self.state = STATUSES["got_it"]
                        self.status = 6
                        self.send_msg(self.user_id, f"Хотите начать?\n"
                                      f"пишите да или нет")

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "7":
                        self.state = STATUSES["got_it"]
                        self.status = 7
                        self.send_msg(self.user_id, f"Хотите начать?\n"
                                      f"пишите да или нет")

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "8":
                        self.state = STATUSES["got_it"]
                        self.status = 8
                        self.send_msg(self.user_id, f"Хотите начать?\n"
                                      f"пишите да или нет")

                    elif self.state == STATUSES[
                            "got_it"] and self.request == "да":
                        self.state = STATUSES["commands"]
                        self.send_msg(
                            self.user_id,
                            f'Параметры поиска вашей половинки:\n'
                            f'Минимальный возраст: {self.age_from},\n'
                            f'Максимальный возраст: {self.age_to},\n'
                            f'Город: {self.town},\n'
                            f'Пол: {self.gender_text},\n'
                            f'Страна: {self.country},\n'
                            f'Семейное положение: {self.status}')
                        self.searching()

                    elif self.state == STATUSES[
                            "got_it"] and self.request == "нет":
                        self.send_msg(
                            self.user_id,
                            f"Вы выбрали команду нет поэтому мы возвращаемся в состояние hello"
                        )
                        self.state = STATUSES["hello"]
                        self.hello()

                    elif self.request == "news" and self.state == STATUSES[
                            "commands"]:
                        self.news()

                    elif self.request == "history" and self.state == STATUSES[
                            "commands"]:
                        self.history()

                    else:
                        self.send_msg(
                            self.user_id,
                            "ERROR! Вы набрали не правильную команду или где то "
                            "допустили ошибку! поэтому вернёмся в Hello")
                        self.state = STATUSES["hello"]
                        self.hello()
コード例 #11
0
ファイル: VK_bot_main.py プロジェクト: SamDe92/Sam__De
    remember_device = True
    return key, remember_device


vk_session = vk_api.VkApi(login, password, auth_handler=auth_handler)

try:
    vk_session.auth()
except vk_api.AuthError as error_msg:
    print(error_msg)'''
================================================="РЕгистрация для группы"==========================================

vk_session = vk_api.VkApi(token=token)
session_api = vk_session.get_api()
longpool = VkLongPoll(vk_session)

while True:
    for event in longpool.listen():
        if event.type == VkEventType.MESSAGE_NEW:
            print(f'Message time is  {datetime.strftime(datetime.now(), "%H:%M:%S")}')
            print(f'Message text : {event.text}')
            response = event.text.lower()
            if event.from_user and not event.from_me:
                response_for_user = main.send_message(event.text)
                vk_session.method('messages.send', {
                    'user_id': event.user_id,
                    'message': response_for_user,
                    'random_id': random.randint(0, 2000000)
                })

コード例 #12
0
ファイル: forplugins.py プロジェクト: N08I40K/vk-pagebot
]
# обьявление базовых переменных, соединение с ВК

allowed_ids = [int(num) for num in parameters_lines[1].split(",")]
allowed_chats = [int(num) for num in parameters_lines[2].split(",")]
log_id = [int(num) for num in parameters_lines[3].split(",")]
index = int(parameters_lines[4])
delay = int(parameters_lines[5])
cmd_prefix = parameters_lines[6]
cmd_eval = parameters_lines[7]
safe_eval = parameters_lines[9]
reg_warn = parameters_lines[10]
vk_session = vk_api.VkApi(token=parameters_lines[0])
long_poll = VkLongPoll(vk_session)
vk = vk_session.get_api()
event = long_poll.listen()


def get_time():
    # возвращает время формата ДД.ММ.ГГ ЧЧ:ММ:СС (по МСК)
    # например, 01.01.01 13:37:00
    return datetime.datetime.strftime(
        datetime.datetime.now(pytz.timezone('Europe/Moscow')),
        "%d.%m.%Y %H:%M:%S")


def console_log(text, symbols_amount=30):
    # выводит данные в консоль с указанием времени и интервалом после
    print("[" + get_time() + "] " + text)
    print("-" * symbols_amount)
コード例 #13
0
ファイル: server.py プロジェクト: artfawl/Project_Bot
class Server:

    def __init__(self, api_token, server_name: str = "Empty"):
        # Даем серверу имя
        self.server_name = server_name

        # Для Long Poll
        self.vk = vk_api.VkApi(token=api_token)

        # Для использования Long Poll API
        self.long_poll = VkLongPoll(self.vk)

        # Для вызова методов vk_api
        self.vk_api = self.vk.get_api()

    def send_msg(self, send_id, message):
        """
        Отправка сообщения через метод messages.send
        :param send_id: vk id пользователя, который получит сообщение
        :param message: содержимое отправляемого письма
        :return: None
        """
        self.vk_api.messages.send(peer_id=send_id,
                                  message=message)

    def start(self):
        global q
        global mode
        global vino_dict
        global mail_dict
        vino_dict = vino.Bot()
        eat_dict = model.FoodGetter()
        mail_dict = Mail.wise_bot()
        eat_dict.load("ingredients.csv", "doc2vec_model", "annoy_model_")
        mode = {}
        q = 0
        print('всё подгрузил')

        for event in self.long_poll.listen():  # Слушаем сервер

            # Пришло новое сообщение
            if event.type == VkEventType.MESSAGE_NEW and event.to_me:
                q += 1

                username = self.get_user_name(event.user_id)
                if session.query(User).filter(
                        User.user_id == event.user_id).first():
                    Server.user_log(event.user_id, event.text)
                    if event.user_id not in mode:
                        mode[event.user_id] = [0]
                    print(mode)
                    if mode[event.user_id][0] == 3 and event.text == \
                            'Красное вино':
                        vino_red = mode[event.user_id][1]
                        for i in range(len(vino_red[1])):
                            if i < 5:
                                self.send_message(event.user_id, event.random_id,
                                                  vino_red[1][i]['name'] +
                                                  ", " + vino_red[1][i][
                                                      'sugar'] + ', ' +
                                                  str(vino_red[1][i][
                                                          'rating']))
                            else:
                                break
                        self.send_message(event.user_id, event.random_id,
                                          'Это выборка красного вина',
                                          keyboard="keyboard.json")
                        mode[event.user_id][0] = 0
                        continue
                    elif mode[event.user_id][0] == 3 and event.text == \
                            'Белое ' \
                            'вино':
                        vino_white = mode[event.user_id][1]
                        for i in range(len(vino_white[2])):
                            if i < 5:
                                self.send_message(event.user_id, event.random_id,
                                                  vino_white[2][i]['name'] +
                                                  ", " + vino_white[2][i][
                                                      'sugar'] + ', ' +
                                                  str(vino_white[2][i][
                                                          'rating']))
                            else:
                                break
                        self.send_message(event.user_id, event.random_id,
                                          'Это выборка белого вина',
                                          keyboard="keyboard.json")
                        mode[event.user_id][0] = 0
                        continue
                    if mode[event.user_id][0] == 3 and event.text == \
                            'Розовое ' \
                            'вино':
                        vino_pink = mode[event.user_id][1]
                        if len(vino_pink[3]) == 0:
                            self.send_message(event.user_id, event.random_id,
                                              'Нет винишка', keyboard="keyboard.json")
                            mode[event.user_id][0] = 0
                            continue
                        for i in range(len(vino_pink[3])):
                            if i < 5:
                                self.send_message(event.user_id, event.random_id,
                                                  vino_pink[3][i]['name'] +
                                                  ", " + vino_pink[3][i][
                                                      'sugar'] + ', ' +
                                                  str(vino_pink[3][i][
                                                          'rating']))
                            else:
                                break
                        self.send_message(event.user_id, event.random_id,
                                          'Это выборка розового вина',
                                          keyboard="keyboard.json")
                        mode[event.user_id][0] = 0
                        continue
                    if mode[event.user_id][0] == 3 and event.text == 'Другие ' \
                                                                     'функции':
                        self.send_message(event.user_id,
                                          event.random_id, 'Выбирай '
                                                           'что-то',
                                          keyboard='keyboard.json')
                        mode[event.user_id][0] = 0
                        continue
                    elif mode[event.user_id][0] == 1 and event.text == \
                            'Другие функции':
                        self.send_message(event.user_id,
                                          event.random_id, 'Выбирай '
                                                           'что-то',
                                          keyboard='keyboard.json')
                        mode[event.user_id][0] = 0
                        continue
                    elif mode[event.user_id][0] == 1:
                        if len(event.text) > 70:
                            self.send_message(event.user_id, event.random_id,
                                              'Многа букав',
                                              keyboard="keyboard.json")
                            mode[event.user_id][0] = 0
                        else:
                            try:
                                user_film = self.packYandex('ru-en', event.text)
                            except (Exception) as e:
                                self.send_message(event.user_id, event.random_id,
                                                  'Yandex умер( \n')
                            print(user_film)
                            films = Film.film_advice().give_film(str(user_film))
                            if films[0] == "incorrect request":
                                self.send_message(event.user_id, event.random_id,
                                                  "Фильмы закончились",
                                                  keyboard='keyboard2.json')
                                mode[event.user_id][0] = 0
                            else:
                                for i in films:
                                    try:
                                        message = self.packYandex('en-ru', i)
                                    except (Exception) as e:
                                        self.send_message(event.user_id,
                                                          event.random_id,
                                                          'Yandex умер( \n')
                                    try:
                                        kinopoisk(i)
                                    except (Exception) as e:
                                        self.send_message(event.user_id,
                                                          event.random_id,
                                                          'Кинопоиск крякнул( \n')
                                    self.photo_user(event.user_id, event.random_id,
                                                    'Оригинальное название: '
                                                    + i + '\nПереведенное '
                                                          'название: ' + message,
                                                    'kinopoisk.jpg')
                                self.send_message(event.user_id, event.random_id,
                                                  "\nKinopoisk " +
                                                  "думает, что это:",
                                                  keyboard='keyboard2.json')
                    elif mode[event.user_id][0] == 2 and event.text == \
                            'Другие ' \
                            'функции':
                        self.send_message(event.user_id, event.random_id, 'Выбирай что-то', keyboard='keyboard.json')
                        mode[event.user_id][0] = 0
                    elif mode[event.user_id][0] == 2:
                        if len(event.text) > 70:
                            self.send_message(event.user_id, event.random_id,
                                              'Многа букав',
                                              keyboard="keyboard.json")
                            mode[event.user_id][0] = 0
                        else:
                            try:
                                text = self.packYandex('ru-en', event.text)
                            except (Exception) as e:
                                self.send_message(event.user_id,
                                                  event.random_id,
                                                  'Yandex умер( \n')
                            Server.user_log(event.user_id, event.text)
                            temp = eat_dict.find(text, 5)
                            if len(temp) == 0:
                                self.send_message(event.user_id, event.random_id,
                                                  'Останешься голодным или попробуй ввести больше ингридиентов',
                                                  keyboard="keyboard2.json")
                                mode[event.user_id][0] = 2
                            else:
                                for i, j, _id in eat_dict.find(text, 5):
                                    i = self.packYandex('en-ru', i)
                                    j = self.packYandex('en-ru', j)
                                    self.send_message(event.user_id, event.random_id,
                                                      i + ":  " + j)
                                self.send_message(event.user_id, event.random_id,
                                                  'Кушай на здоровье!',
                                                  keyboard="keyboard2.json")
                    elif mode[event.user_id][0] == 3:
                        if len(event.text) > 70:
                            self.send_message(event.user_id, event.random_id,
                                              'Многа букав',
                                              keyboard="keyboard.json")
                            mode[event.user_id][0] = 0
                        else:
                            try:
                                vino_all = vino_dict.find_buchlo(
                                    event.text)
                                if len(mode[event.user_id]) == 1:
                                    mode[event.user_id].append(vino_all)
                                else:
                                    mode[event.user_id][1] = vino_all
                                for i in range(5):
                                    self.send_message(event.user_id,
                                                      event.random_id,
                                                      vino_all[0][i]['name'] +
                                                      ", " + vino_all[0][i][
                                                          'sugar'] + ', ' +
                                                      str(vino_all[0][i][
                                                              'rating']))
                                self.send_message(event.user_id, event.random_id,
                                                  'Это общая выборка вин',
                                                  keyboard="keyboard1.json")
                            except:
                                self.send_message(event.user_id, event.random_id,
                                                  'Сегодня ты трезвый!',
                                                  keyboard='keyboard.json')
                                mode[event.user_id][0] = 0


                    elif mode[event.user_id][0] == 0 and event.text == \
                            "Описание фильма":
                        self.send_message(event.user_id, event.random_id,
                                          f'{username}, опиши фильм!')
                        mode[event.user_id][0] = 1

                    elif mode[event.user_id][0] == 0 and event.text == \
                            "Описание еды":
                        self.send_message(event.user_id, event.random_id,
                                          f'{username}, опиши еду!')
                        mode[event.user_id][0] = 2



                    elif mode[event.user_id][0] == 0 and event.text == \
                            "Описание вина":
                        self.send_message(event.user_id, event.random_id,
                                          f'{username}, опиши вино!')
                        mode[event.user_id][0] = 3


                    else:
                        if len(event.text) > 70:
                            self.send_message(event.user_id, event.random_id,
                                              'Многа букав',
                                              keyboard="keyboard.json")
                            mode[event.user_id][0] = 0
                        else:
                            mas = mail_dict.give_answer(event.text)
                            if mas[0] == 'incorrect request':
                                self.send_message(event.user_id, event.random_id,
                                                  'https://vk.com/video?z=video273519762_456239269%2Fpl_cat_updates',
                                                  keyboard="keyboard.json")
                                mode[event.user_id][0] = 0
                            else:
                                if len(mas[0]) > 4000:
                                    self.send_message(event.user_id, event.random_id,
                                                      'Слишком длинное сообщение для вк',
                                                      keyboard="keyboard.json")
                                    mode[event.user_id][0] = 0
                                else:
                                    self.send_message(event.user_id, event.random_id,
                                                      mas[0],
                                                      keyboard="keyboard.json")
                                    mode[event.user_id][0] = 0


                elif event.text in token_list:
                    user = User(user_id=event.user_id)
                    session.add(user)
                    session.commit()
                    self.send_message(event.user_id, event.random_id,
                                      'https://vk.com/video?q=welcom%20to%20the%20club&z=video171354828_171644015')
                    self.send_message(event.user_id, event.random_id,
                                      f'{username}, теперь ты авторизован!',
                                      keyboard='keyboard.json')
                    self.photo_user(event.user_id, event.random_id,'Оригинальное название: ', 'kinopoisk.jpg')

                else:
                    self.send_message(event.user_id, event.random_id,
                                      'https://vk.com/videos147211044?z=video-145643494_456243932%2Fpl_147211044_-2')
                    self.send_message(event.user_id, event.random_id,
                                      f'Привет, {username}! У тебя нет доступа, пришли мне токен!')

    def get_user_name(self, user_id):
        """ Получаем имя пользователя"""
        return self.vk_api.users.get(user_id=user_id)[0]['first_name']

    def get_user_city(self, user_id):
        """ Получаем город пользователя"""
        return \
            self.vk_api.users.get(user_id=user_id, fields="city")[0]["city"][
                'title']

    def photo_user(self, user_id, random_id, message, filename):
        data = self.vk_api.photos.getMessagesUploadServer(user_id=-190332116)
        print(data)

        upload_url = data["upload_url"]
        files = {'photo': open(filename, 'rb')}

        response = requests.post(upload_url, files=files)
        result = json.loads(response.text)
        print(result)
        uploadResult = self.vk_api.photos.saveMessagesPhoto(
            server=result["server"],
            photo=result["photo"],
            hash=result["hash"])

        self.vk_api.messages.send(user_id=user_id,
                                  random_id=random_id,
                                  message=message,
                                  attachment='photo-190332116_' +
                                             str(uploadResult[0]["id"]))

    def send_message(self, peer_id, random_id, message, keyboard=None):
        if keyboard is not None:
            self.vk_api.messages.send(peer_id=peer_id, random_id=random_id,
                                      message=message,
                                      keyboard=open(keyboard, "r",
                                                    encoding="UTF-8").read())
        if keyboard is None:
            self.vk_api.messages.send(peer_id=peer_id, random_id=random_id,
                                      message=message)

    @staticmethod
    def packYandex(len, text_msg):
        url_trans = 'https://translate.yandex.net/api/v1.5/tr.json/translate'
        if len == 'ru-en':
            trans_option = {'key': tokenYA, 'lang': 'ru-en', 'text': text_msg}
            webRequest = requests.get(url_trans, params=trans_option)
            s = loads(webRequest.text, encoding='utf-8')
            if s["code"] != 200:
                raise Exception(f"Yandex api crash")
            data = s["text"][0]
            return data
        elif len == "en-ru":
            trans_option = {'key': tokenYA, 'lang': 'en-ru', 'text': text_msg}
            webRequest = requests.get(url_trans, params=trans_option)
            s = loads(webRequest.text, encoding='utf-8')
            if s["code"] != 200:
                raise Exception(f"Yandex api crash")
            data = s["text"][0]
            return data

    @staticmethod
    def user_log(user_id, text):
        row = Log(user_id=user_id, text=text.strip(

        ), date=datetime.datetime.now().strftime("%Y-%m-%d "
                                                 "%H:%M:%S"))
        session.add(row)
        session.commit()

    @staticmethod
    def last_query(user_id):
        print(session.query(Log).get(user_id))
コード例 #14
0
ファイル: main_vk.py プロジェクト: Korinin38/siriusneuralocr
    def run(self):
        longpoll = VkLongPoll(vk_session)
        while True:
            for event in longpoll.listen():
                print(event)
                if event.type == VkEventType.MESSAGE_NEW:
                    print('Новое сообщение:')
                    if event.from_me:
                        print('От меня для: ', end='')
                    elif event.to_me:
                        if event.text.lower() in list(responses.keys(
                        )) and config_json["changeable_config"][
                                "bool_responses_on"] == True:
                            write_msg(event.user_id,
                                      responses[event.text.lower()])
                        elif event.text[0] == config_json["com_symbol"]:
                            print("COMMAND")
                            command = event.text[1:].split()
                            print(command[0])
                            if command[0] in list(
                                    config_json["commands"].keys()):
                                if event.user_id in owner_id or config_json[
                                        "commands"][command[0]["public"]]:
                                    write_msg(
                                        event.user_id,
                                        globals()[config_json["commands"][
                                            command[0]]["func"]](*command[1:]))
                                else:
                                    write_msg(
                                        event.user_id,
                                        "Команда не доступна для пользователей."
                                    )
                            #elif command[0] in list(config_json["public_commands"].keys()):
                            #    write_msg(event.user_id, globals()[config_json["public_commands"][command[0]]](*command[1:]))
                            else:
                                write_msg(event.user_id, "Команда не найдена.")
                            #if event.text[1:] in list(config_json["commands"].keys()):

                        else:
                            write_msg(event.user_id, event.text)
                        print('Для меня от: ', end='')
                    if event.from_user:
                        print(event.user_id)

                    elif event.from_chat:
                        print(event.user_id, 'в беседе', event.chat_id)
                    elif event.from_group:
                        print('группы', event.group_id)

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

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

                    if event.from_user:
                        print(event.user_id)
                    elif event.from_group:
                        print('администратор группы', event.group_id)

                elif event.type == VkEventType.USER_TYPING_IN_CHAT:
                    print('Печатает ', event.user_id, 'в беседе',
                          event.chat_id)

                elif event.type == VkEventType.USER_ONLINE:
                    print('Пользователь', event.user_id, 'онлайн',
                          event.platform)

                elif event.type == VkEventType.USER_OFFLINE:
                    print('Пользователь', event.user_id, 'оффлайн',
                          event.offline_type)

                else:
                    print(event.type, event.raw[1:])
コード例 #15
0
def main():
    #try:
    #vk_auth
    session = requests.Session()
    level2 = []
    level3 = []
    level4 = []
    ids = []
    days_mass = []
    Ids_mass = []

    #vk_session = vk_api.VkApi(token='42117b3a93e9f6f9bb1de66446b4856a460db93cf87bff530e62de233503df5c42c13203de0f3a0ec3cc6')#quant
    vk_session = vk_api.VkApi(
        token=
        '069d9ce67dc166da0a16c9b233575e280daa970b2884df2dec367532d5798f9c87963d600a69ca66feb60'
    )  #buhi

    vk = vk_session.get_api()

    upload = VkUpload(vk_session)  # Для загрузки изображений
    longpoll = VkLongPoll(vk_session)

    text = 'Вы хотите забронировать Хайтек цех ?'

    keyboard = VkKeyboard(one_time=True)
    keyboard_2 = VkKeyboard(one_time=True)

    text_button11 = "Привет"
    text_button12 = "Бронь"
    text_button13 = "Погода"
    text_button21 = "В начало"
    text_button22 = "След. даты"
    text_button23 = ""
    text_button31 = "Назад"
    text_button32 = "Выход"
    hide_key = 0  ##для каждого айди
    keyboard.add_button(text_button11, color=VkKeyboardColor.DEFAULT)
    keyboard.add_button(text_button12, color=VkKeyboardColor.DEFAULT)
    keyboard.add_button(text_button13, color=VkKeyboardColor.DEFAULT)
    keyboard.add_line()  # Переход на вторую строку
    keyboard.add_button(text_button21, color=VkKeyboardColor.NEGATIVE)
    kb_m = keyboard
    days_plus = 0
    book_date = datetime.datetime.utcnow().isoformat()

    for event in longpoll.listen():

        if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:

            #print('написал id{}: "{}"'.format(event.user_id, event.text), end=' ')
            #jhg=vk.users.get(user_id=event.user_id)
            #name_user=jhg[0]['first_name']+'  '+jhg[0]['last_name']
            #print (name_user + " : " + event.text)
            print("message from user --  " + str(event.user_id))

            if event.text == text_button21:  ##в начало

                days_plus = 0
                text = "Добро пожаловать, воспользуйтесь клавиатурой"
                kb_m = keyboard
                if event.user_id in level4:
                    level4.remove(event.user_id)
                    Ids_mass.pop(level4.index(event.user_id))
                if event.user_id in level3:
                    level3.remove(event.user_id)
                if event.user_id in level2:
                    days_mass.pop(level2.index(event.user_id))
                    level2.remove(event.user_id)

                    #четвертый уровень################################################## add info
            elif event.user_id in level4:
                asdasd = vk.users.get(user_id=event.user_id)
                name_user = asdasd[0]['first_name'] + '  ' + asdasd[0][
                    'last_name']
                text = (
                    'Вы,  ' + name_user +
                    ", успешно забронировали и можете посмотреть на это в календаре https://calendar.google.com/calendar/b/1?cid=aHRib29raW5nZWtiQGdtYWlsLmNvbQ  "
                )
                booking_by_eventId(Ids_mass[level4.index(event.user_id)],
                                   name_user, event.text)
                Ids_mass.pop(level4.index(event.user_id))

                level4.remove(event.user_id)
                kb_m = keyboard
                #vk.messages.send(user_id=19132305,random_id=get_random_id(),message=("Ура, забронили,   "+name_user))
                vk.messages.send(user_id=1295019,
                                 random_id=get_random_id(),
                                 message=("Ура, забронили,  " + name_user))
            #третий уровень####################################################################time choose
            elif event.user_id in level3:

                if event.text == 'К выбору даты':  #### на пред. уровень
                    level3.remove(event.user_id)
                    level2.append(event.user_id)
                    days_mass.append(0)

                    text = "Когда хотите посетить ХайТек цех ?"
                    date_1 = datetime.datetime.today()
                    d1 = (date_1 - datetime.timedelta(
                        hours=(datetime.datetime.now().hour)))
                    d2 = (d1 + datetime.timedelta(days=1))
                    d3 = (d1 + datetime.timedelta(days=2))
                    d4 = (d1 + datetime.timedelta(days=3))

                    kb_m = get_date_buttons(d1, d2, d3, d4)
                else:

                    if event.text == time_format(ids[1][0]):
                        Ids_mass.append(ids[0][0])
                    elif event.text == time_format(ids[1][1]):
                        Ids_mass.append(ids[0][1])
                    elif event.text == time_format(ids[1][2]):
                        Ids_mass.append(ids[0][2])
                    elif event.text == time_format(ids[1][3]):
                        Ids_mass.append(ids[0][3])
                    elif event.text == time_format(ids[1][4]):
                        Ids_mass.append(ids[0][4])

                    level3.remove(event.user_id)
                    level4.append(event.user_id)

                    text = "Какое оборудование и материалы будут необходимы?"
                    kb_m = keyboard_2
                #второй уровень
            elif event.user_id in level2:

                ##обрабатываем дату

                ############################################################выбор даты№№№№№№№№№№№№№№№№№№№№№№№№
                if event.text == d1.strftime(
                        "%d-%m-%Y") or event.text == d2.strftime(
                            "%d-%m-%Y") or event.text == d3.strftime(
                                "%d-%m-%Y") or event.text == d4.strftime(
                                    "%d-%m-%Y"):
                    #print("trigger 1")
                    if event.text == d1.strftime("%d-%m-%Y"):
                        ids = id_events_call(d1)

                    elif event.text == d2.strftime("%d-%m-%Y"):
                        ids = id_events_call(d2)

                    elif event.text == d3.strftime("%d-%m-%Y"):
                        ids = id_events_call(d3)

                    else:
                        ids = id_events_call(d4)

                    if ids[1][0] == 'zero':

                        text = 'В этот день Hi-tech цех уже занят, выберете другую дату'

                    elif ids[1][1] == 'zero':
                        kb_m = get_time_buttons(time_format(ids[1][0]), 'zero',
                                                'zero', 'zero', 'zero')
                        text = 'Одно свободное окно на выбранную дату'
                        if event.user_id in level2:
                            days_mass.pop(level2.index(event.user_id))
                            level2.remove(event.user_id)
                        if event.user_id not in level3:
                            level3.append(event.user_id)

                    elif ids[1][2] == 'zero':
                        kb_m = get_time_buttons(time_format(ids[1][0]),
                                                time_format(ids[1][1]), 'zero',
                                                'zero', 'zero')
                        text = 'Два свободных окна на выбранную дату, выберете время'
                        if event.user_id in level2:
                            days_mass.pop(level2.index(event.user_id))
                            level2.remove(event.user_id)
                        if event.user_id not in level3:
                            level3.append(event.user_id)
                    elif ids[1][3] == 'zero':
                        kb_m = get_time_buttons(time_format(ids[1][0]),
                                                time_format(ids[1][1]),
                                                time_format(ids[1][2]), 'zero',
                                                'zero')
                        text = 'Три свободных окна на выбранную дату, выберете время'
                        if event.user_id in level2:
                            days_mass.pop(level2.index(event.user_id))
                            level2.remove(event.user_id)
                        if event.user_id not in level3:
                            level3.append(event.user_id)
                    elif ids[1][4] == 'zero':
                        kb_m = get_time_buttons(time_format(ids[1][0]),
                                                time_format(ids[1][1]),
                                                time_format(ids[1][2]),
                                                time_format(ids[1][3]), 'zero')
                        text = 'Четыре свободных окна на выбранную дату, выберете время'
                        if event.user_id in level2:
                            days_mass.pop(level2.index(event.user_id))
                            level2.remove(event.user_id)
                        if event.user_id not in level3:
                            level3.append(event.user_id)
                    elif ids[1][5] == 'zero':
                        kb_m = get_time_buttons(time_format(ids[1][0]),
                                                time_format(ids[1][1]),
                                                time_format(ids[1][2]),
                                                time_format(ids[1][3]),
                                                time_format(ids[1][4]))
                        text = 'Пять свободных окон на выбранную дату, выберете время'
                        if event.user_id in level2:
                            days_mass.pop(level2.index(event.user_id))
                            level2.remove(event.user_id)
                        if event.user_id not in level3:
                            level3.append(event.user_id)
                        #kb_m=get_time_buttons(time_format(ids[1][0]),time_format(ids[1][1]),time_format(ids[1][1]),time_format(ids[1][1])) ######Вот здесь надо поработать, создание кнопок времени и тд
                    #else:
                    #kb_m=get_time_buttons(time_format(ids[1][0]),time_format(ids[1][1]),time_format(ids[1][2]),time_format(ids[1][3]))
                    # text='Весь день свободен'
                    #else:
                    # print("else works")
                    # if event.user_id in level2:
                    #    days_mass.pop(level2.index(event.user_id))
                    #    level2.remove(event.user_id)
                    # if event.user_id not in level3:
                    #    level3.append(event.user_id)

                elif event.text == text_button22:  #след неделя

                    days_mass[level2.index(
                        event.user_id)] = days_mass[level2.index(
                            event.user_id)] + 4
                    #days_mass.append(0)

                    days_plus = days_mass[level2.index(event.user_id)]
                    date_1 = datetime.datetime.today() + datetime.timedelta(
                        days=days_plus)
                    d1 = date_1 - datetime.timedelta(
                        hours=(datetime.datetime.now().hour))
                    d2 = (d1 + datetime.timedelta(days=1))

                    d3 = (d1 + datetime.timedelta(days=2))
                    d4 = (d1 + datetime.timedelta(days=3))
                    # print('secind date')
                    #print(days_plus)
                    kb_m = get_date_buttons(d1, d2, d3, d4)

            #########################################################################################################################################
            #если юзер нажал на бронь
            elif event.text in booking_asso and event.user_id not in level2:
                text = "Когда хотите посетить Hi-tech цех?"
                date_1 = datetime.datetime.today()
                d1 = (date_1 -
                      datetime.timedelta(hours=(datetime.datetime.now().hour)))
                d2 = (d1 + datetime.timedelta(days=1))
                d3 = (d1 + datetime.timedelta(days=2))
                d4 = (d1 + datetime.timedelta(days=3))
                # print('first date')

                kb_m = get_date_buttons(d1, d2, d3, d4)
                if event.user_id not in level2:
                    level2.append(event.user_id)
                    days_mass.append(0)

            # print(str(level2.index(event.user_id))+'     номер юзера')
        #если юзер нажал привет
            elif event.text in hello_asso and event.user_id not in level2:
                text = "Привет"
        #если юзер нажал на погоду
            elif event.text in weather_asso and event.user_id not in level2:
                text = Weather.get_weather_today()
            elif event.user_id in level2:
                text = "мне нужна дата"
            else:
                text = "Воспользуйтесь клавиатурой"
                kb_m = keyboard

            ##vk.messages.send(user_id=event.user_id,random_id=get_random_id(),keyboard=get_time_buttons(time_format(ids[1][0]),time_format(ids[1][1]),time_format(ids[1][1]),time_format(ids[1][1])).get_keyboard(),message=text)
            if kb_m == keyboard_2:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message=text)
            else:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 keyboard=kb_m.get_keyboard(),
                                 message=text)
コード例 #16
0
def main():
    session = requests.Session()
    data = pd.read_excel('user_data.xlsx', header=0)
    print(data)
    uid = np.squeeze(data[['ID']].values)
    names = np.squeeze(data[['Имя']].values)
    vorname = data[['Фамилия']]
    fathername = data[['Отчество']]
    bday = data[['Дата рождения']]
    isreg = data[['ISREG']]
    vid = np.squeeze(data[['UID']].values)
    # Авторизация пользователя:
    """
    login, password = '******', 'mypassword'
    vk_session = vk_api.VkApi(login, password)
    try:
        vk_session.auth(token_only=True)
    except vk_api.AuthError as error_msg:
        print(error_msg)
        return
    """

    # Авторизация группы (для групп рекомендуется использовать VkBotLongPoll):
    # при передаче token вызывать vk_session.auth не нужно

    vk_session = vk_api.VkApi(
        token=
        'adab1fa6eddbb4fcb0b897ef8372cb95c042700616fcb7b3bc615e352c5df8910138e9d4bd63e05386a7e'
    )
    for i in range(0, len(vid)):
        vid[i] = 0
    vk = vk_session.get_api()

    upload = VkUpload(vk_session)  # Для загрузки изображений
    longpoll = VkLongPoll(vk_session)
    isFound = False
    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
            print('id{}: "{}"'.format(event.user_id, event.text), end=' ')
            print(isFound)
            for i in range(0, len(vid)):
                if (int(event.user_id - vid[i]) == 0):
                    print("Found")
                    isFound = True
                    text = "Здравствуйте, " + names[i]
                    vk.messages.send(user_id=event.user_id,
                                     random_id=get_random_id(),
                                     message=text)
                    break

            data = event.text.split(" ", 1)
            com = data[0]
            print(data)
            if (com == "!id"):
                print("Регистрация...")
                s = event.text
                l = len(s)
                integ = []
                i = 0
                while i < l:
                    s_int = ''
                    a = s[i]
                    while '0' <= a <= '9':
                        s_int += a
                        i += 1
                        if i < l:
                            a = s[i]
                        else:
                            break
                    i += 1
                    if s_int != '':
                        integ.append(int(s_int))

                idd = integ
                for i in range(0, len(uid)):
                    if (idd == uid[i]):
                        vid[i] = str(event.user_id)
                        print(int(event.user_id - vid[i]))
                        #print(vid)
                        print("User is registered")
                        isFound = True
                        text = " "
                        for i in range(0, len(vid)):
                            if (int(event.user_id - vid[i]) == 0):
                                print("Found")
                                isFound = True
                                text = "Здравствуйте, " + names[i]
                                vk.messages.send(user_id=event.user_id,
                                                 random_id=get_random_id(),
                                                 message=text)
                                break
                        break

            if (com == "!next"):
                (x, y) = getVector(generate())
                text = str(getNext(x))
                draw(y)
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message=text)
            if (com == "!comp"):
                login, password = '******', 'fedor12345'
                vk_session = vk_api.VkApi(login, password)

                try:
                    vk_session.auth(token_only=True)
                except vk_api.AuthError as error_msg:
                    print(error_msg)
                    return
                userid = event.user_id
                """ В VkUpload реализованы методы загрузки файлов в ВК
                """

                upload = vk_api.VkUpload(vk_session)

                photo = upload.photo(  # Подставьте свои данные
                    'pie.png',
                    album_id=261375384,
                    group_id=179758165)

                vk_photo_url = 'https://vk.com/photo{}_{}'.format(
                    photo[0]['owner_id'], photo[0]['id'])
                vk_session = vk_api.VkApi(
                    token=
                    'adab1fa6eddbb4fcb0b897ef8372cb95c042700616fcb7b3bc615e352c5df8910138e9d4bd63e05386a7e'
                )
                vk = vk_session.get_api()

                upload = VkUpload(vk_session)  # Для загрузки изображений
                longpoll = VkLongPoll(vk_session)
                vk.messages.send(user_id=userid,
                                 random_id=get_random_id(),
                                 message="Диаграмма ваших интересов")
                vk.messages.send(user_id=userid,
                                 random_id=get_random_id(),
                                 message=vk_photo_url)
            print('ok')
コード例 #17
0
def main():
    session = vk_api.VkApi(token=token)
    longpoll = VkLongPoll(session)
    vk = session.get_api()
    my_id = vk.users.get()[0]['id']
    dostup.add(my_id)

    for event in longpoll.listen():
        if event.type != VkEventType.MESSAGE_NEW:
            continue

        def send(text: str):
            vk.messages.send(peer_id=event.peer_id, random_id=0, message=text)

        msg = event.text.lower()

        if event.from_chat:
            from_id = event.user_id
            if msg == "":
                xz=0
                #print(f"БЕСЕДА: {from_id}: Отправил(а) стикер, видео или фото.")
            else:
                xz=1
                #print(f"БЕСЕДА: {from_id}: {event.text}")
        elif event.from_user:
            from_id = my_id if event.from_me else event.peer_id
            if msg == "":
                print(f"ЛС: {from_id}: Отправил(а) стикер, видео или фото.")
            else:
                print(f"ЛС: {from_id}: {event.text}")

        if from_id in muted_for_all:
            vk.messages.delete(message_ids=event.message_id, delete_for_all=1)
        elif from_id in muted_for_me:
            vk.messages.delete(message_ids=event.message_id, delete_for_all=0)

        if from_id in dostup:
            if msg.startswith(prefix):
                msg = msg.replace(prefix, '', 1).strip()
                user = vk.messages.getById(message_ids=event.message_id)["items"][0]["reply_message"]["from_id"]
                if msg == "+мут":
                    muted_for_all.add(user)
                    send(f"✅Удаление сообщений [id{user}|пользователя] для всех установлено.")
                if msg == "-мут":
                    muted_for_all.remove(user)
                    send(f"✅Удаление сообщений [id{user}|пользователя] для всех отключено.")
                if msg == "+игнор":
                    muted_for_me.add(user)
                    send(f"✅Удаление сообщений [id{user}|пользователя] для себя установлено.")
                if msg == "-игнор":
                    muted_for_me.remove(user)
                    send(f"✅Удаление сообщений [id{user}|пользователя] для себя отключено.")
                if msg == "+доступ":
                    dostup.add(user)
                    sync_access()
                    send(f"[id{user}|Пользователю] выдан доступ.")
                if msg == "-доступ":
                    dostup.remove(user)
                    sync_access()
                    send(f"[id{user}|Пользователю убран доступ.")
            elif msg.startswith(remote_prefix) and from_id != my_id:
                send(event.text[2:])
コード例 #18
0
ファイル: vk_server.py プロジェクト: AlexeyIgnatev/vk_bot
from vk_api.longpoll import VkLongPoll, VkEventType
import api

# Работа с сообщениями
longPoll = VkLongPoll(api.vk)

# Основной цикл
for event in longPoll.listen():

    # Если пришло новое сообщение
    if event.type == VkEventType.MESSAGE_NEW:

        # Если оно имеет метку для меня( то есть бота)
        if event.to_me:
            # Сообщение от пользователя
            text = event.text

            api.write_msg(event.user_id, 'Прочитал ваше сообщение + {}'.format(text))
コード例 #19
0
ファイル: bot.py プロジェクト: nibba228/vk_bot
def main():
    token = 'token'
    vk_session = vk_api.VkApi(token=token)
    vk = vk_session.get_api()
    longpoll = VkLongPoll(vk_session)

    summary = '''
Вот что я умею:
    /help - сводка по командам

    /n - новости

    /m - мем

    /w - получить сведения о погоде в Москве
    (Команды с /w пока могут не работать)
    /w <город> - погода на сегодня. Это может занять некоторое время.

    /exr - получить курсы основных валют

    /exr <XXX> - получить информацию по 1 валюте при помощи её чаркода, чем XXX и является.
    Например, получить информацию о Евро: /exr EUR
                            ↓↓↓
    /c - получить чаркоды валют

    /a - скачать прикреленные к команде аудиозаписи, это может занять некоторое время.
    
    /f <жанр> - случайный фильм с таким жанром
    /f жанры - показывает все доступные жанры
    '''

    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW and event.to_me:
            random_id = get_random_id()
            user_id = event.user_id
            msg = event.text.lower()

            kwargs = {'user_id': user_id,
                      'random_id': random_id}

            if msg in ('/help', 'начать'):
                vk.messages.send(message=summary, keyboard=enable_keyboard(),
                                 **kwargs)

            elif msg == '/n':
                vk.messages.send(message=get_news(), **kwargs)

            elif msg == '/m':
                vk.messages.send(attachment=get_meme('-157645793'),
                                 **kwargs)

            elif '/w' in msg:
                vk.messages.send(message=get_weather(msg[8:].strip()), **kwargs)

            elif '/exr' in msg:
                vk.messages.send(message=get_exchange_rate(msg[9:].strip().upper()),
                                 **kwargs)

            elif msg == '/c':
                vk.messages.send(message=get_char_codes(), **kwargs)

            elif msg == '/a':
                vk.messages.send(message=download_audio(vk, user_id),
                                 **kwargs)
            elif msg == '/f жанры':
                vk.messages.send(message=get_genre_names(), **kwargs)
            elif '/f' in msg:
                vk.messages.send(message=get_film(msg[2:].strip()), **kwargs)
            else:
                vk.messages.send(message='''Я не понимаю то, что вы написали.
                                 Отправьте /help, чтобы увидеть сводку по командам''',
                                 **kwargs)
コード例 #20
0
ファイル: bot.py プロジェクト: kirkylesich/VkStatWarface
class VkBot:
    def __init__(self, api_token):
        self.session = vk_api.VkApi(token=api_token)
        self.long_poll = VkLongPoll(self.session)
        self.vk = self.session.get_api()

    def listen_chat(self):
        for event in self.long_poll.listen():
            if self.event_is_valid(event):
                try:
                    Thread(target=self.give_response,
                           args=(event.text, event.user_id)).start()
                except Exception:
                    pass

    def give_response(self, event_text, event_user_id):
        response = self.message_handler(event_text)
        self.send_response(response, event_user_id)

    def message_handler(self, message_text):
        if message_text == 'help':
            view = ViewAllCommands()
            return view.get_view()
        if len(message_text.split()) == 2:
            username, profile = message_text.split()
            if profile == 'pvp':
                return self.get_wf_user_pvp_profile(username)
            elif profile == 'pve':
                return self.get_wf_user_pve_profile(username)
        return self.get_wf_user_profile(message_text)

    def get_wf_user_profile(self, username):
        wf_user = WarfaceUserProfile(username)
        return self.get_wf_user_profile_view(wf_user)

    def get_wf_user_pvp_profile(self, username):
        wf_pvp_user = WarfaceUserMainPvp(username)
        return self.get_wf_user_pvp_view(wf_pvp_user)

    def get_wf_user_pve_profile(self, username):
        wf_pve_user = WarfaceUserMainPve(username)
        return self.get_wf_user_pve_view(wf_pve_user)

    def get_wf_user_pve_view(self, wf_user):
        view_profile = ViewPveProfile(wf_user)
        return view_profile.get_view_profile()

    def get_wf_user_profile_view(self, wf_user):
        view_profile = ViewProfile(wf_user)
        return view_profile.get_view_profile()

    def get_wf_user_pvp_view(self, wf_user):
        view_profile = ViewPvpProfile(wf_user)
        return view_profile.get_view_profile()

    def send_response(self, msg, user_id):
        self.vk.messages.send(user_id=user_id,
                              message=msg,
                              random_id=random.randint(1, 10**10))

    def event_is_valid(self, event):
        return event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text and event.from_user
コード例 #21
0
ファイル: task6.py プロジェクト: Anastasia849/Python-practice
def main():
    vk_session = vk_api.VkApi(token='...')

    vk = vk_session.get_api()

    longpoll = VkLongPoll(vk_session)

    keyboard1 = VkKeyboard(one_time=True)
    keyboard1.add_button('на сегодня', color=VkKeyboardColor.POSITIVE)
    keyboard1.add_button('на завтра', color=VkKeyboardColor.NEGATIVE)
    keyboard1.add_line()
    keyboard1.add_button('на эту неделю', color=VkKeyboardColor.PRIMARY)
    keyboard1.add_button('на следующую неделю', color=VkKeyboardColor.PRIMARY)
    keyboard1.add_line()
    keyboard1.add_button('какая неделя?')
    keyboard1.add_button('какая группа?')

    users = {}
    week_days = [
        'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота'
    ]
    months = [
        'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля',
        'августа', 'сентября', 'октября', 'ноября', 'декабря'
    ]

    get_schedule_from_mirea()
    get_weather_from_site()

    for event in longpoll.listen():
        if event.to_me and event.type == VkEventType.MESSAGE_NEW and (
                event.text.lower() == 'привет'
                or event.text.lower() == 'начать'):
            print('New from {}, text = {}'.format(event.user_id, event.text))
            vk.messages.send(
                user_id=event.user_id,
                random_id=get_random_id(),
                message=
                'Введите номер группы один раз, чтобы я знал Вашу группу\nВведите "бот"(добавте номер группы или день недели для более точного результата),чтобы получить расписание\nВведите "погода",чтобы узнать погоду на сегодня в Москве'
            )

        elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower(
        ) == 'погода':
            print('New from {}, text = {}'.format(event.user_id, event.text))
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message=str_weather())

        elif event.to_me and event.type == VkEventType.MESSAGE_NEW and re.search(
                r'\w{4}-\d\d-\d\d', event.text) and len(
                    event.text.split()) == 1:
            users[event.user_id] = event.text
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message='Я запомнил, что Вы из группы ' +
                             event.text)

        elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower(
        ) == 'бот' and len(event.text.split()) == 1:
            print('New from {}, text = {}'.format(event.user_id, event.text))
            try:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message='Показать расписание группы ' +
                                 users[event.user_id],
                                 keyboard=keyboard1.get_keyboard())
            except Exception:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message='Невозможно выполнить команду')
        elif event.to_me and event.type == VkEventType.MESSAGE_NEW and len(
                event.text.split()) == 2 and event.text.split()[0].lower(
                ) == 'бот' and event.text.split()[1].lower() in week_days:
            print('New from {}, text = {}'.format(event.user_id, event.text))
            try:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message=show_schedule_for_day_on_week(
                                     users[event.user_id],
                                     week_days.index(event.text.split()[1])))
            except Exception:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message='Невозможно выполнить команду')
        elif event.to_me and event.type == VkEventType.MESSAGE_NEW and len(
                event.text.split()) == 2 and event.text.split()[0].lower(
                ) == 'бот' and re.search(r'\w{4}-\d\d-\d\d', event.text):
            print('New from {}, text = {}'.format(event.user_id, event.text))
            users[event.user_id] = event.text.split()[1]
            try:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message='Показать расписание группы ' +
                                 users[event.user_id],
                                 keyboard=keyboard1.get_keyboard())
            except Exception:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message='Невозможно выполнить команду')
        elif event.to_me and event.type == VkEventType.MESSAGE_NEW and len(
                event.text.split()) == 3 and event.text.split()[0].lower(
                ) == 'бот' and event.text.split()[1].lower(
                ) in week_days and re.search(r'\w{4}-\d\d-\d\d', event.text):
            print('New from {}, text = {}'.format(event.user_id, event.text))
            users[event.user_id] = event.text.split()[2]
            try:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message=show_schedule_for_day_on_week(
                                     users[event.user_id],
                                     week_days.index(event.text.split()[1])))
            except Exception:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message='Невозможно выполнить команду')
        elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower(
        ) == 'на сегодня':
            print('New from {}, text = {}'.format(event.user_id, event.text))
            d = datetime.datetime.now()
            try:
                vk.messages.send(
                    user_id=event.user_id,
                    random_id=get_random_id(),
                    message='Расписписание на ' + str(d.day) + ' ' +
                    months[d.month - 1] + ':\n' +
                    show_schedule_for_day(users[event.user_id], d))
            except Exception:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message='Невозможно выполнить команду')
        elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower(
        ) == 'на завтра':
            print('New from {}, text = {}'.format(event.user_id, event.text))
            d = datetime.datetime.now() + datetime.timedelta(days=1)
            try:
                vk.messages.send(
                    user_id=event.user_id,
                    random_id=get_random_id(),
                    message='Расписписание на ' + str(d.day) + ' ' +
                    months[d.month - 1] + ':\n' +
                    show_schedule_for_day(users[event.user_id], d))
            except Exception:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message='Невозможно выполнить команду')
        elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower(
        ) == 'какая неделя?':
            print('New from {}, text = {}'.format(event.user_id, event.text))
            d = datetime.datetime.now()
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message='Идёт ' + str(d.isocalendar()[1] - 6) +
                             ' неделя')
        elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower(
        ) == 'какая группа?':
            print('New from {}, text = {}'.format(event.user_id, event.text))
            d = datetime.datetime.now()
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message='Показываю расписание группы ' +
                             users[event.user_id])
        elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower(
        ) == 'на эту неделю':
            print('New from {}, text = {}'.format(event.user_id, event.text))
            d = datetime.datetime.now()
            try:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message=show_schedule_for_week(
                                     users[event.user_id], d))
            except Exception:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message='Невозможно выполнить команду')
        elif event.to_me and event.type == VkEventType.MESSAGE_NEW and event.text.lower(
        ) == 'на следующую неделю':
            print('New from {}, text = {}'.format(event.user_id, event.text))
            d = datetime.datetime.now() + datetime.timedelta(days=7)
            try:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message=show_schedule_for_week(
                                     users[event.user_id], d))
            except Exception:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message='Невозможно выполнить команду')
        elif event.to_me:
            print('New from {}, text = {}'.format(event.user_id, event.text))
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message='Неизвестная команда')
コード例 #22
0
ファイル: vk_bot.py プロジェクト: zxy-zxy/quiz_bot
class VkBot:
    GREETINGS, MENU_CHOOSING, USER_ANSWER_PROCESSING = range(3)

    def __init__(self, group_token):
        self._vk_session = vk_api.VkApi(token=group_token)
        self._vk_api = self._vk_session.get_api()
        self._longpoll = VkLongPoll(self._vk_session)
        self._state = VkBot.GREETINGS

    def start(self):
        for event in self._longpoll.listen():
            if event.type == VkEventType.MESSAGE_NEW and event.to_me:
                if self._state == VkBot.GREETINGS:
                    self._greetings_state(event)
                elif self._state == VkBot.MENU_CHOOSING:
                    self._menu_choosing_state(event)
                elif self._state == VkBot.USER_ANSWER_PROCESSING:
                    self._answer_processing_state(event)

    def _greetings_state(self, event):

        keyboard = VkKeyboard()
        keyboard.add_button('Новый вопрос', color=VkKeyboardColor.DEFAULT)
        keyboard.add_button('Сдаться', color=VkKeyboardColor.DEFAULT)
        keyboard.add_line()
        keyboard.add_button('Мой счет', color=VkKeyboardColor.DEFAULT)

        self._vk_api.messages.send(
            user_id=event.user_id,
            message='Привет! Я бот для викторин!',
            keyboard=keyboard.get_keyboard(),
            random_id=random.randint(1, 1000),
        )
        self._state = VkBot.MENU_CHOOSING

    def _menu_choosing_state(self, event):
        if event.text == 'Новый вопрос':

            try:
                quiz_question = QuizQuestion.get_random_question_from_storage()
            except (redis_exceptions.DataError, ValueError) as e:
                logger.error('An error occurred during object initialization. '
                             'User_id: {}, error: {}'.format(
                                 event.user_id.message.chat_id, str(e)))
                self._vk_api.messages.send(
                    user_id=event.user_id,
                    message='Пожалуйста, попробуйте снова.',
                    random_id=random.randint(1, 1000),
                )
                self._state = VkBot.MENU_CHOOSING
                return None

            try:
                user_question = UserQuestion(
                    event.user_id,
                    json.dumps(dataclasses.asdict(quiz_question)))
                user_question.save_to_db()
            except redis_exceptions.DataError as e:
                logger.error(
                    'An error occurred during saving data to database.'
                    'User_id: {}, record: {}, error: {}'.format(
                        event.user_id.message.chat_id,
                        dataclasses.asdict(quiz_question),
                        str(e),
                    ))
                self._vk_api.messages.send(
                    user_id=event.user_id,
                    message='Пожалуйста, попробуйте снова.',
                    random_id=random.randint(1, 1000),
                )
                self._state = VkBot.MENU_CHOOSING
                return None

            self._vk_api.messages.send(
                user_id=event.user_id,
                message=quiz_question.question,
                random_id=random.randint(1, 1000),
            )
            self._state = VkBot.USER_ANSWER_PROCESSING

        elif event.text == 'Мой счет':

            user_rating = UserRating(event.user_id)
            score = user_rating.get_rating()

            self._vk_api.messages.send(
                user_id=event.user_id,
                message=f'Ваш  результат: {score}',
                random_id=random.randint(1, 1000),
            )

            self._state = VkBot.MENU_CHOOSING
            return None

    def _answer_processing_state(self, event):

        user_question = UserQuestion.get_by_user_id(event.user_id)

        if event.text == 'Сдаться':

            if user_question.question is None:
                self._vk_api.messages.send(
                    user_id=event.user_id,
                    message='Пожалуйста, попробуйте снова.',
                    random_id=random.randint(1, 1000),
                )
                self._state = VkBot.MENU_CHOOSING
                return None

            quiz_question_dict = json.loads(user_question.question)
            quiz_question = QuizQuestion(**quiz_question_dict)

            self._vk_api.messages.send(
                user_id=event.user_id,
                message=f'Внимание, правильный ответ: {quiz_question.answer}'
                f'Для следующего вопроса нажмите «Новый вопрос».',
                random_id=random.randint(1, 1000),
            )

            self._state = VkBot.MENU_CHOOSING
            return None

        if user_question.question is None:
            self._vk_api.messages.send(
                user_id=event.user_id,
                message='Пожалуйста, попробуйте снова.',
                random_id=random.randint(1, 1000),
            )
            self._state = VkBot.MENU_CHOOSING
            return None

        quiz_question_dict = json.loads(user_question.question)
        quiz_question = QuizQuestion(**quiz_question_dict)

        normalized_answer_from_user = event.text.lower().strip()
        normalized_answer_from_base = quiz_question.answer.lower().strip()

        if normalized_answer_from_base == normalized_answer_from_user:
            user_rating = UserRating(event.user_id)
            user_rating.increase_rating()

            self._vk_api.messages.send(
                user_id=event.user_id,
                message='Правильно! Поздравляю! '
                'Для следующего вопроса нажмите «Новый вопрос».',
                random_id=random.randint(1, 1000),
            )
            self._state = VkBot.MENU_CHOOSING
            return None

        self._vk_api.messages.send(
            user_id=event.user_id,
            message='Неправильно... Попробуешь ещё раз?',
            random_id=random.randint(1, 1000),
        )

        self._state = VkBot.USER_ANSWER_PROCESSING
        return None
コード例 #23
0
def monitor_msg(vk_session, session_api, members):
    longpoll = VkLongPoll(vk_session)
    # users_not_msg = 0
    while True:
        try:
            for event in longpoll.listen():
                # Вывод сообщение по ивенту: НОВОЕ СООБЩЕНИЕ
                if event.type == VkEventType.MESSAGE_NEW:
                    print("Время сообщения: " + str(event.datetime))
                    print("Сообщение: " + str(event.text))
                    # Преобразование всего текста в нижний регистр
                    response = event.text.lower()
                    # Присоеденение к БД
                    # 0 - участник группы
                    # 1 - админ группы
                    # 2 - админ админов группы
                    if event.from_user and not event.from_me:
                        db = sqlite3.connect('server.db')
                        sql = db.cursor()
                        dataCopy = sql.execute(
                            f"SELECT permession  FROM users WHERE idlogin = '******' AND permession = '{1}'"
                        )
                        if dataCopy.fetchone() is None:
                            values = 0
                        else:
                            values = 1
                        db.close()
                        if event.user_id == my_id:
                            values = 2
                        new_keyboard = keyboard.create_keyboard(
                            response, values)
                        # Если нажимают: "1"
                        if (response == 'рассылка') and (values == 1
                                                         or values == 2):
                            print("Ввели команду: рассылка")
                            with open("buff_text\Инструкция.txt",
                                      'r',
                                      encoding="utf-8") as f:
                                message_main = f.read()
                            send_message(vk_session,
                                         id_type='user_id',
                                         id_user=event.user_id,
                                         message=f"{message_main}",
                                         keyboard=new_keyboard,
                                         attachment=None)
                        elif response == 'начать' or response == 'вернуться назад':
                            with open("buff_text\Приветствие.txt",
                                      'r',
                                      encoding="utf-8") as f:
                                message_main = f.read()
                            with open("buff_text\hello_for_users.txt",
                                      'r',
                                      encoding="utf-8") as f:
                                hello_users = f.read()
                            name = session_api.users.get(
                                user_ids=event.user_id)[0]["first_name"]
                            print("Ввели команду: начать")
                            if values == 1 or values == 2:
                                send_message(
                                    vk_session,
                                    id_type='user_id',
                                    id_user=event.user_id,
                                    message=
                                    f"Привет, {name}! &#128127; {message_main}",
                                    keyboard=new_keyboard,
                                    attachment=None)
                            else:
                                send_message(
                                    vk_session,
                                    id_type='user_id',
                                    id_user=event.user_id,
                                    message=f"Привет, {name}! {hello_users}",
                                    keyboard=new_keyboard,
                                    attachment=None)
                        elif response == 'о нас':
                            print("Ввели команду: о нас")
                            text_final = open("buff_text\аbout_text.txt",
                                              'r',
                                              encoding="utf-8")
                            attach_final = open("buff_text\аbout_attach.txt",
                                                'r',
                                                encoding="utf-8")
                            send_text_final = text_final.read()
                            send_attach_final = attach_final.read()
                            text_final.close()
                            attach_final.close()
                            send_message(vk_session,
                                         id_type='user_id',
                                         id_user=event.user_id,
                                         message=f"{send_text_final}",
                                         keyboard=None,
                                         attachment=f"{send_attach_final}")
                        elif response == 'закрыть клавиатуру':
                            print("Ввели команду: закрыть клавиатуру")
                            send_message(vk_session,
                                         id_type='user_id',
                                         id_user=event.user_id,
                                         message="Вы закрыли клавиатуру",
                                         keyboard=new_keyboard,
                                         attachment=None)
                        elif (response
                              == 'создать рассылку') and (values == 1
                                                          or values == 2):
                            print("Ввели команду: создать рассылку")
                            send_message(
                                vk_session,
                                id_type='user_id',
                                id_user=event.user_id,
                                message=
                                "Введите сообщение и прекрипите вложение!",
                                keyboard=None,
                                attachment=None)
                            text_send_in = open('buff_text\Текст рассылки.txt',
                                                'w',
                                                encoding='utf-8')
                            attach_send_in = open(
                                'buff_text\Вложение рассылки.txt',
                                'w',
                                encoding='utf-8')
                            text_send_in.truncate()
                            attach_send_in.truncate()
                        elif (response
                              == 'отправить рассылку') and (values == 1
                                                            or values == 2):
                            text_final = open("buff_text\Текст рассылки.txt",
                                              'r',
                                              encoding="utf-8")
                            attach_final = open(
                                "buff_text\Вложение рассылки.txt",
                                'r',
                                encoding="utf-8")
                            send_text_final = text_final.read()
                            send_attach_final = attach_final.read()
                            text_final.close()
                            attach_final.close()
                            print("Список id участников группы: " +
                                  str(members))
                            print("Сообщение доставляется: " +
                                  str(len(members)) + " пользовтелям...")
                            # Цикл в котором будет происходить рассылка сообщения участникам группы
                            # Кол-во участников регулируется переменной count_users_items
                            for i in range(len(members)):
                                # users_not_msg += 1
                                # Блок try catch, если по каким то причинам невозможна отправка сообщения участнику,
                                # то добавляем к итератору 1 и продолжаем цикл for
                                try:
                                    send_message(
                                        vk_session,
                                        id_type='user_id',
                                        id_user=members[i],
                                        message=f"{send_text_final}",
                                        keyboard=None,
                                        attachment=f"{str(send_attach_final)}")
                                except vk_api.exceptions.ApiError:
                                    i += 1
                                    print(
                                        "Пользователю не отправилось сообщение!"
                                    )
                                    continue
                        elif (response
                              == 'посмотреть рассылку') and (values == 1
                                                             or values == 2):
                            print("Ввели команду: посмотреть рассылку")
                            text_final = open("buff_text\Текст рассылки.txt",
                                              'r',
                                              encoding="utf-8")
                            attach_final = open(
                                "buff_text\Вложение рассылки.txt",
                                'r',
                                encoding="utf-8")
                            send_text_final = text_final.read()
                            send_attach_final = attach_final.read()
                            send_message(
                                vk_session,
                                id_type='user_id',
                                id_user=event.user_id,
                                message=
                                f"Обычная рассылка сообщений пользователям выглядит таким образом: \n\n\n {send_text_final}",
                                keyboard=None,
                                attachment=f"{send_attach_final}")
                        elif (response
                              == 'управление админами') and (values == 1
                                                             or values == 2):
                            print("Ввели команду: управление админами")
                            with open("buff_text\control_admin.txt",
                                      'r',
                                      encoding="utf-8") as f:
                                message_main = f.read()
                            send_message(vk_session,
                                         id_type='user_id',
                                         id_user=event.user_id,
                                         message=f"{message_main}",
                                         keyboard=new_keyboard,
                                         attachment=None)
                            text_final = open("buff_text\Текст рассылки.txt",
                                              'w',
                                              encoding="utf-8")
                            text_final.truncate()
                        elif (response == 'список админов') and (values == 1 or
                                                                 values == 2):
                            print("Ввели команду: список админов")
                            db = sqlite3.connect('server.db')
                            sql = db.cursor()
                            dataCount = sql.execute(
                                f"SELECT COUNT(idlogin)  FROM users WHERE permession = '{1}' OR permession = '{2}'"
                            )
                            numberOfRows = dataCount.fetchone()[0]
                            # reg = re.compile('[^a-zA-Z ]')
                            dataCopy = sql.execute(
                                f"SELECT idlogin  FROM users WHERE permession = '{1}' OR permession = '{2}'"
                            )
                            values = dataCopy.fetchmany(size=numberOfRows)
                            print("Кол во:" + str(numberOfRows))
                            print(type(values))
                            for i in range(0, numberOfRows):
                                send_message(
                                    vk_session,
                                    id_type='user_id',
                                    id_user=event.user_id,
                                    message=f"Админ группы: id{values[i]}",
                                    keyboard=None,
                                    attachment=None)
                            text_final = open("buff_text\Текст рассылки.txt",
                                              'w',
                                              encoding="utf-8")
                            text_final.truncate()
                        elif (response == 'добавить админа') and (values == 2):
                            print("Ввели команду: добавить админа")
                            send_message(
                                vk_session,
                                id_type='user_id',
                                id_user=event.user_id,
                                message=
                                f"Для того, чтобы добавить/удалить админа введите его id в формате: "
                                f"111111111 и отправьте его боту.\n А затем нажмите на кнопку "
                                f"сохранить добавление/удаление.",
                                keyboard=None,
                                attachment=None)
                            text_final = open("buff_text\id админа.txt",
                                              'w',
                                              encoding="utf-8")
                            text_final.truncate()
                        elif (response == 'удалить админа') and (values == 2):
                            print("Ввели команду: удалить админа")
                            send_message(
                                vk_session,
                                id_type='user_id',
                                id_user=event.user_id,
                                message=
                                f"Для того, чтобы добавить/удалить админа введите его id в формате: "
                                f"111111111 и отправьте его боту.\n А затем нажмите на кнопку "
                                f"сохранить добавление/удаление.",
                                keyboard=None,
                                attachment=None)
                            text_final = open("buff_text\id админа.txt",
                                              'w',
                                              encoding="utf-8")
                            text_final.truncate()
                        elif response == 'узнать id':
                            print("Ввели команду: узнать свой id")
                            send_message(vk_session,
                                         id_type='user_id',
                                         id_user=event.user_id,
                                         message=f"Ваш id: {event.user_id}",
                                         keyboard=None,
                                         attachment=None)
                        elif response == 'сохранить добавление':
                            print("Ввели команду: Сохранить добавление")
                            text_final = open("buff_text\id админа.txt",
                                              'r',
                                              encoding="utf-8")
                            send_text_final = text_final.read()
                            text_final.close()
                            db = sqlite3.connect('server.db')
                            sql = db.cursor()
                            sql.execute(
                                f'UPDATE users SET permession = {1} WHERE idlogin = "******"'
                            )
                            db.commit()
                            db.close()
                            send_message(vk_session,
                                         id_type='user_id',
                                         id_user=event.user_id,
                                         message=f"Права обновлены!",
                                         keyboard=None,
                                         attachment=None)
                            text_final = open("buff_text\id админа.txt",
                                              'w',
                                              encoding="utf-8")
                            text_final.truncate()
                        elif response == 'сохранить удаление':
                            print("Ввели команду: Сохранить удаление")
                            text_final = open("buff_text\id админа.txt",
                                              'r',
                                              encoding="utf-8")
                            send_text_final = text_final.read()
                            text_final.close()
                            db = sqlite3.connect('server.db')
                            sql = db.cursor()
                            sql.execute(
                                f'UPDATE users SET permession = {0} WHERE idlogin = "******"'
                            )
                            db.commit()
                            db.close()
                            send_message(vk_session,
                                         id_type='user_id',
                                         id_user=event.user_id,
                                         message=f"Права обновлены!",
                                         keyboard=None,
                                         attachment=None)
                            text_final = open("buff_text\id админа.txt",
                                              'w',
                                              encoding="utf-8")
                            text_final.truncate()
                        elif (response == 'рассылкаопрос') and (values == 1 or
                                                                values == 2):
                            print("Ввели команду: рассылкаопрос")
                            with open("buff_text\poll_msg.txt",
                                      'r',
                                      encoding="utf-8") as f:
                                message_main = f.read()
                            send_message(vk_session,
                                         id_type='user_id',
                                         id_user=event.user_id,
                                         message=f"{message_main}",
                                         keyboard=new_keyboard,
                                         attachment=None)
                        elif (response == 'посмотреть рассылку опроса') and (
                                values == 1 or values == 2):
                            print("Ввели команду: посмотреть рассылку")
                            text_final = open("buff_text\Текст опрос.txt",
                                              'r',
                                              encoding="utf-8")
                            attach_final = open("buff_text\Вложение опрос.txt",
                                                'r',
                                                encoding="utf-8")
                            send_text_final = text_final.read()
                            send_attach_final = attach_final.read()
                            send_message(
                                vk_session,
                                id_type='user_id',
                                id_user=event.user_id,
                                message=
                                f"Рассылка для проголосовавших в опросе выглядит таким образом: \n\n\n{send_text_final}",
                                keyboard=None,
                                attachment=f"{send_attach_final}")
                        elif (response
                              == 'создать сообщение') and (values == 1
                                                           or values == 2):
                            print("Ввели команду: создать сообщение")
                            send_message(
                                vk_session,
                                id_type='user_id',
                                id_user=event.user_id,
                                message=
                                f"Введите текст рассылки для проголосовавших в опросе и можете прикрепить "
                                f"вложения...",
                                keyboard=None,
                                attachment=None)
                            text_send_in = open('buff_text\Текст опрос.txt',
                                                'w',
                                                encoding='utf-8')
                            attach_send_in = open(
                                'buff_text\Вложение опрос.txt',
                                'w',
                                encoding='utf-8')
                            text_send_in.truncate()
                            attach_send_in.truncate()
                        elif (response
                              == 'сохранить сообщение') and (values == 1
                                                             or values == 2):
                            print("Ввели команду: сохранить сообщение")
                            send_message(
                                vk_session,
                                id_type='user_id',
                                id_user=event.user_id,
                                message=
                                f"Текст рассылки для опроса успешно сохранен!",
                                keyboard=None,
                                attachment=None)
                        elif (response
                              == 'создать id опроса') and (values == 1
                                                           or values == 2):
                            print("Ввели команду: создать id опроса")
                            send_message(
                                vk_session,
                                id_type='user_id',
                                id_user=event.user_id,
                                message=
                                f"Введите id опроса в формате: 111111111",
                                keyboard=None,
                                attachment=None)
                            text_send_in = open('buff_text\id опрос.txt',
                                                'w',
                                                encoding='utf-8')
                            text_send_in.truncate()
                        elif (response
                              == 'сохранить id опроса') and (values == 1
                                                             or values == 2):
                            print("Ввели команду: сохранить id опроса")
                            send_message(
                                vk_session,
                                id_type='user_id',
                                id_user=event.user_id,
                                message=f"Id опроса успешно сохранен!",
                                keyboard=None,
                                attachment=None)
                        elif (response == "создать о нас") and (values == 1 or
                                                                values == 2):
                            print("Ввели команду: создать о нас")
                            with open("buff_text\create_about.txt",
                                      'r',
                                      encoding="utf-8") as f:
                                message_main = f.read()
                            send_message(vk_session,
                                         id_type='user_id',
                                         id_user=event.user_id,
                                         message=f"{message_main}",
                                         keyboard=new_keyboard,
                                         attachment=None)
                        elif (response == 'создать текст') and (values == 1 or
                                                                values == 2):
                            print("Ввели команду: создать текст")
                            send_message(
                                vk_session,
                                id_type='user_id',
                                id_user=event.user_id,
                                message=
                                f"Введите текст и прекрепите вложение, а потом отправьте это "
                                f"сообщение боту. \n Затем, нажмите кнопку: сохранить текст",
                                keyboard=None,
                                attachment=None)
                            text_send_in = open('buff_text\аbout_text.txt',
                                                'w',
                                                encoding='utf-8')
                            attach_send_in = open('buff_text\аbout_attach.txt',
                                                  'w',
                                                  encoding='utf-8')
                            text_send_in.truncate()
                            attach_send_in.truncate()
                        elif (response
                              == 'сохранить текст') and (values == 1
                                                         or values == 2):
                            print("Ввели команду: сохранить текст")
                            send_message(
                                vk_session,
                                id_type='user_id',
                                id_user=event.user_id,
                                message=
                                f"Ваш текст сохранен! Проверьте кнопку: О нас",
                                keyboard=None,
                                attachment=None)
                        elif (response
                              == 'посмотреть о нас') and (values == 1
                                                          or values == 2):
                            print("Ввели команду: Посмотреть о нас")
                            text_send_in = open('buff_text\аbout_text.txt',
                                                'r',
                                                encoding='utf-8')
                            attach_send_in = open('buff_text\аbout_attach.txt',
                                                  'r',
                                                  encoding='utf-8')
                            send_text_final = text_send_in.read()
                            send_attach_final = attach_send_in.read()

                            send_message(
                                vk_session,
                                id_type='user_id',
                                id_user=event.user_id,
                                message=
                                f"Пункт меню О нас - выглядит таким образом: \n\n\n{send_text_final}",
                                keyboard=None,
                                attachment=f"{send_attach_final}")
                        elif values == 1 or values == 2:
                            msg_history = vk_session.method(
                                'messages.getHistory', {
                                    'offset': 2,
                                    'count': 1,
                                    'user_id': event.user_id,
                                    'group_id': vk_id_group
                                })
                            msg_text = msg_history["items"][0]["text"]
                            print("ОБРАТИ НА МЕНЯ ВНИМАНИЕ: " + str(msg_text))
                            if msg_text == 'создать рассылку' or msg_text == 'Создать рассылку':
                                buff_type = []
                                buff_id = []
                                for i in range(1, 10):
                                    try:
                                        id_attach = event.attachments["attach"
                                                                      + str(i)]
                                        buff_id.append(id_attach)
                                        type_attach = event.attachments[
                                            "attach" + str(i) + "_type"]
                                        buff_type.append(type_attach)
                                    except KeyError:
                                        pass
                                buff = []
                                for i in range(0, len(buff_type)):
                                    buff.append(
                                        str(buff_type[i]) + str(buff_id[i]))
                                final_buff = []
                                for items in buff:
                                    final_buff.append(items)
                                attach_list = ','.join(final_buff)
                                text_final = open(
                                    "buff_text\Текст рассылки.txt",
                                    'r+',
                                    encoding="utf-8")
                                attach_final = open(
                                    "buff_text\Вложение рассылки.txt",
                                    'r+',
                                    encoding="utf-8")
                                new_text_send = text_final.read()
                                new_attach_send = attach_final.read()
                                new_text_send = re.sub(new_text_send,
                                                       str(event.text),
                                                       new_text_send)
                                new_attach_send = re.sub(
                                    new_attach_send, str(attach_list),
                                    new_attach_send)
                                text_final.write(new_text_send)
                                attach_final.write(new_attach_send)
                                text_final.close()
                                attach_final.close()
                            elif msg_text == 'создать сообщение' or msg_text == 'Создать сообщение':
                                buff_type = []
                                buff_id = []
                                for i in range(1, 10):
                                    try:
                                        id_attach = event.attachments["attach"
                                                                      + str(i)]
                                        buff_id.append(id_attach)
                                        type_attach = event.attachments[
                                            "attach" + str(i) + "_type"]
                                        buff_type.append(type_attach)
                                    except KeyError:
                                        pass
                                buff = []
                                for i in range(0, len(buff_type)):
                                    buff.append(
                                        str(buff_type[i]) + str(buff_id[i]))
                                final_buff = []
                                for items in buff:
                                    final_buff.append(items)
                                attach_list = ','.join(final_buff)
                                text_final = open("buff_text\Текст опрос.txt",
                                                  'r+',
                                                  encoding="utf-8")
                                attach_final = open(
                                    "buff_text\Вложение опрос.txt",
                                    'r+',
                                    encoding="utf-8")
                                new_text_send = text_final.read()
                                new_attach_send = attach_final.read()
                                new_text_send = re.sub(new_text_send,
                                                       str(event.text),
                                                       new_text_send)
                                new_attach_send = re.sub(
                                    new_attach_send, str(attach_list),
                                    new_attach_send)
                                text_final.write(new_text_send)
                                attach_final.write(new_attach_send)
                                text_final.close()
                                attach_final.close()
                            elif msg_text == 'cоздать id опроса' or msg_text == 'Создать id опроса':
                                text_final = open("buff_text\id опрос.txt",
                                                  'r+',
                                                  encoding="utf-8")
                                new_text_send = text_final.read()
                                new_text_send = re.sub(new_text_send,
                                                       str(event.text),
                                                       new_text_send)
                                text_final.write(new_text_send)
                                text_final.close()
                            elif msg_text == 'добавить админа' or msg_text == 'Добавить админа':
                                text_final = open("buff_text\id админа.txt",
                                                  'r+',
                                                  encoding="utf-8")
                                new_text_send = text_final.read()
                                new_text_send = re.sub(new_text_send,
                                                       str(event.text),
                                                       new_text_send)
                                text_final.write(new_text_send)
                                text_final.close()
                            elif msg_text == 'удалить админа' or msg_text == 'Удалить админа':
                                text_final = open("buff_text\id админа.txt",
                                                  'r+',
                                                  encoding="utf-8")
                                new_text_send = text_final.read()
                                new_text_send = re.sub(new_text_send,
                                                       str(event.text),
                                                       new_text_send)
                                text_final.write(new_text_send)
                                text_final.close()
                            elif msg_text == 'cоздать текст' or msg_text == 'Создать текст':
                                buff_type = []
                                buff_id = []
                                for i in range(1, 10):
                                    try:
                                        id_attach = event.attachments["attach"
                                                                      + str(i)]
                                        buff_id.append(id_attach)
                                        type_attach = event.attachments[
                                            "attach" + str(i) + "_type"]
                                        buff_type.append(type_attach)
                                    except KeyError:
                                        pass
                                buff = []
                                for i in range(0, len(buff_type)):
                                    buff.append(
                                        str(buff_type[i]) + str(buff_id[i]))
                                final_buff = []
                                for items in buff:
                                    final_buff.append(items)
                                attach_list = ','.join(final_buff)
                                text_final = open("buff_text\аbout_text.txt",
                                                  'r+',
                                                  encoding="utf-8")
                                attach_final = open(
                                    "buff_text\аbout_attach.txt",
                                    'r+',
                                    encoding="utf-8")
                                new_text_send = text_final.read()
                                new_attach_send = attach_final.read()
                                new_text_send = re.sub(new_text_send,
                                                       str(event.text),
                                                       new_text_send)
                                new_attach_send = re.sub(
                                    new_attach_send, str(attach_list),
                                    new_attach_send)
                                text_final.write(new_text_send)
                                attach_final.write(new_attach_send)
                                text_final.close()
                                attach_final.close()
                            else:
                                print("Неопозннная команда...")
                                send_message(
                                    vk_session,
                                    id_type='user_id',
                                    id_user=event.user_id,
                                    message=
                                    f"Я тебя не понимаю. \nДля того, чтобы посмотреть мои команды введи: начать",
                                    keyboard=None,
                                    attachment=None)

        except Exception as error:
            print(error)
コード例 #24
0
class Bot:
    def __init__(self, i):
        self.token = i["token"]
        self.group_id = i["group_id"]
        self.key = i["key"]
        self.server = i["server"]
        self.ts = i["ts"]

        self.vk_session = vk_api.VkApi(token=self.token)
        self.longpoll = VkLongPoll(self.vk_session)
        self.vk = self.vk_session.get_api()

    def send_msg(self, text, peer):
        self.vk.messages.send(
            user_id = peer,
            random_id = get_random_id(),
            message = text
            )

    def start(self):
        for event in self.longpoll.listen():
            if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text and event.user_id not in data["ban"]:
                """simple command"""
                if event.text.lower() == "/оборудование":
                    text = ""
                    for i in data["tech"]:
                        text += f"{i}\n"
                    self.send_msg(text, event.user_id)

                elif event.text.lower() == "/бюджет компании":
                    self.send_msg("бюджет компании состовляет {0} рублей".format(data["money"]), event.user_id)
                elif event.text.lower() == "/сайт":
                    self.send_msg(data["web-site"], event.user_id)
                elif event.text.lower() == "/бот":
                    self.send_msg("бот был сделан на заказ компанией Daruna", event.user_id)
                elif event.text.lower() == "/проекты в разработке":
                    text = ""

                    for i in progects["dev"]:
                        text += i
                    if text == "":
                        self.send_msg("не один проект в данный момент не разрабатывается", event.user_id)
                    else:
                        self.send_msg(text, event.user_id)
                elif event.text.lower() == "/оконченные проекты":
                    text = ""

                    for i in progects["ready"]:
                        text += i
                    if text == "":
                        self.send_msg("не один проект в данный момент не готов", event.user_id)
                    else:
                        self.send_msg(text, event.user_id)
                elif event.text.lower() == "/приостановленные проекты":
                    text = ""

                    for i in progects["stoped"]:
                        text += i
                    if text == "":
                        self.send_msg("в данный момент приостановленных проектов нет", event.user_id)
                    else:
                        self.send_msg(text, event.user_id)
                elif event.text.lower() == "/лучшие проекты":
                    text = ""

                    for i in progects["best"]:
                        text += i
                    if text == "":
                        self.send_msg("в данный момент лучших проектов нет", event.user_id)
                    else:
                        self.send_msg(text, event.user_id)
                elif event.text.lower() == "/профиль":
                    profile = f.getProfileInfo(event.user_id)
                    if profile != None:
                        self.send_msg("имя - {0}\nid - {1}\nуровень технологии - {2}".format(profile[0], profile[1], profile[2]), event.user_id)
                    else:
                        self.send_msg("вы ещё не зарегистрированны", event.user_id)
                elif event.text.lower().find("/зарегистрироваться") != -1:
                    t = event.text.split(" ")
                    if f.getProfileInfo(event.user_id) == None:
                        data["users_id"].append(int(event.user_id))
                        f.register(t[1], event.user_id)
                        self.send_msg("вы зарегистрированны под именем {0}".format(t[1]), event.user_id)
                    else:
                        self.send_msg("вы уже зарегистрированны", event.user_id)
                elif event.text.lower() == "/пользователи":
                    self.send_msg(len(f.getUsers()), event.user_id)
                elif event.text.lower() == "/время компании":
                    self.send_msg("компания ITT была создана 25 ноября 2020 года", event.user_id)
                elif event.text.lower() == "/команды":
                    self.send_msg(commands, event.user_id)
                elif event.text.lower() == "/инфо":
                    self.send_msg("Дарова, сейчас ты находишься в самом крутом IT сообществе IT Techlogies(ITT). \
Здесь наша команда создаёт проекты, делает игры и постит информацию об IT.\n! ПОДПИШИСЬ !", event.user_id)
                elif event.text.lower() == "/vip":
                    if event.user_id in data["vip"]:
                        self.send_msg("у вас есть подписка vip", event.user_id)
                    else:
                        self.send_msg("у вас нет подписки vip", event.user_id)
                """for VIP"""
                if event.user_id in data["vip"]:
                    if event.text.lower().find("$give") != -1:
                        msg = event.text.split(" ")
                        if int(msg[1]) >= 1 and int(msg[1]) <= 10:
                            print(f.add(int(msg[2]), event.user_id))
                            if f.add(int(msg[1]), event.user_id) == 0:
                                self.send_msg("у пользователя(https://vk.com/id{0}) нет аккаунта".format(event.user_id), event.user_id)
                            else:
                                self.send_msg("пользователю(https://vk.com/id{0}) было добавленно {1} уровней технологии".format(event.user_id, msg[1]), event.user_id)
                """for moder"""
                if event.user_id in data["admins"]:
                    if event.text.lower().find(":изменить бюджет") != -1:
                        data["money"] = event.text.split(" ")[2]
                        self.send_msg("теперь бюджет компании состовляет {0} рублей".format(data["money"]), event.user_id)
                    elif event.text.lower().find(":вип") != -1:
                        data["vip"].append(int(event.text.split(" ")[1]))
                        self.send_msg("пользователю(https://vk.com/id{0}) был выдан статус вип".format(event.text.split(" ")[1]), event.user_id)
                    elif event.text.lower().find(":бан") != -1:
                        data["ban"].append(int(event.text.split(" ")[1]))
                        self.send_msg("пользователю(https://vk.com/id{0}) был выдан бан".format(event.text.split(" ")[1]), event.user_id)
                    elif event.text.lower().find(":новый лучший:") != -1:
                        s = event.text.split(":")
                        progects["best"].append(s[2])
                    elif event.text.lower().find(":новый готовый:") != -1:
                        s = event.text.split(":")
                        progects["ready"].append(s[2])
                    elif event.text.lower().find(":новый разрабатываемый:") != -1:
                        s = event.text.split(":")
                        progects["dev"].append(s[2])
                    elif event.text.lower().find(":новый приостановленный:") != -1:
                        s = event.text.split(":")
                        progects["stoped"].append(s[2])
                    elif event.text.lower().find(":удалить лучший:") != -1:
                        s = event.text.split(":")
                        try:
                            progects["best"].remove(s[2])
                        except:
                            pass
                    elif event.text.lower().find(":удалить готовый:") != -1:
                        s = event.text.split(":")
                        try:
                            progects["ready"].remove(s[2])
                        except:
                            pass
                    elif event.text.lower().find(":удалить разрабатываемый:") != -1:
                        s = event.text.split(":")
                        try:
                            progects["dev"].remove(s[2])
                        except:
                            pass
                    elif event.text.lower().find(":удалить приостановленный:") != -1:
                        s = event.text.split(":")
                        try:
                            progects["stoped"].remove(s[2])
                        except:
                            pass
コード例 #25
0
ファイル: VKbot.py プロジェクト: deadln/Practice1FinalProject
def main():
    #Получение файлов расписания
    page = requests.get(
        "https://www.mirea.ru/education/schedule-main/schedule/")
    soup = BeautifulSoup(page.text, "html.parser")

    result = soup.find("div", {
        "id": "toggle-3"
    }).findAll("a", {"class": "xls"})

    for x in result:
        if "IIT" in str(x) and "vesna" in str(x):
            if "1k" in str(x):
                f = open("1kurs.xlsx", "wb")
                y = requests.get(x["href"])
                f.write(y.content)
            elif "2k" in str(x):
                f = open("2kurs.xlsx", "wb")
                y = requests.get(x["href"])
                f.write(y.content)
            elif "3k" in str(x):
                f = open("3kurs.xlsx", "wb")
                y = requests.get(x["href"])
                f.write(y.content)
            elif "4k" in str(x):
                f = open("4kurs.xlsx", "wb")
                y = requests.get(x["href"])
                f.write(y.content)

    #Инициализация бота
    vk_session = vk_api.VkApi(
        token=
        "44c700bc6db1238b1a3086147e2c55fb21e8a69d4441d1e45bcacc06fe16eb861643c34edc0aff39c2a1d"
    )
    vk = vk_session.get_api()
    longpoll = VkLongPoll(vk_session)

    keyboard = VkKeyboard(one_time=True)
    keyboard.add_button("на сегодня", color=VkKeyboardColor.POSITIVE)
    keyboard.add_button("на завтра", color=VkKeyboardColor.NEGATIVE)
    keyboard.add_line()
    keyboard.add_button("на эту неделю", color=VkKeyboardColor.PRIMARY)
    keyboard.add_button("на следующую неделю", color=VkKeyboardColor.PRIMARY)
    keyboard.add_line()
    keyboard.add_button("какая неделя?", color=VkKeyboardColor.DEFAULT)
    keyboard.add_button("какая группа?", color=VkKeyboardColor.DEFAULT)

    try:
        with open("users.pickle", "rb") as f:
            userlist = pickle.load(f)
    except FileNotFoundError:
        userlist = {}

    userlist2 = {}
    custom_mark = {}
    for key in userlist.keys():
        custom_mark[key] = False

    for event in longpoll.listen():
        #Первое использование бота
        if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.user_id not in userlist:
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message=instruction)
            userlist[event.user_id] = ""
            userlist2[event.user_id] = ""
            with open("users.pickle", "wb") as f:
                pickle.dump(userlist, f)

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower(
        ) == "users":
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message=str(userlist))

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower(
        ) == "помощь":
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message=instruction)

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and re.match(
                r"\w\w\w\w-\d\d-\d\d", event.text):
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message="Я запомнил, что ты из группы " +
                             event.text.upper())
            userlist[event.user_id] = event.text.upper()
            userlist2[event.user_id] = event.text.upper()
            custom_mark[event.user_id] = False
            with open("users.pickle", "wb") as f:
                pickle.dump(userlist, f)

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower(
        ) == "бот":
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message="Показать расписание...",
                             keyboard=keyboard.get_keyboard())

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower(
        ) == "на сегодня":
            if datetime.today().weekday() == 6:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message=str(datetime.today().day) + " " +
                                 mesyacy[datetime.today().month] +
                                 " занятий нет")
            else:
                try:
                    if custom_mark[event.user_id]:
                        book = xlrd.open_workbook(
                            str(kurs[userlist2[event.user_id][-2:]]) +
                            "kurs.xlsx")
                    else:
                        book = xlrd.open_workbook(
                            str(kurs[userlist[event.user_id][-2:]]) +
                            "kurs.xlsx")
                    sheet = book.sheet_by_index(0)
                    num_cols = sheet.ncols
                    num_rows = sheet.nrows
                    found = False
                    ind = 0

                    for col_index in range(num_cols):
                        group_cell = str(sheet.cell(1, col_index).value)
                        if (custom_mark[event.user_id]
                                and group_cell == userlist2[event.user_id]
                            ) or (not custom_mark[event.user_id]
                                  and group_cell == userlist[event.user_id]):
                            ind = col_index
                            found = True
                            break

                    if found:
                        schedule = "Расписание на " + str(datetime.today(
                        ).day) + " " + mesyacy[datetime.today().month]
                        schedule += "\n"
                        start_row = 3 + 12 * datetime.today().weekday()
                        if ((datetime.today() - datetime(2019, 2, 11)).days //
                                7 + 1) % 2 == 0:
                            start_row += 1
                        print(start_row)
                        for i in range(6):
                            if sheet.cell(start_row, ind).value == "":
                                schedule += str(i + 1) + ") -"
                            else:
                                schedule += str(i + 1) + ") " + sheet.cell(
                                    start_row, ind).value
                                if sheet.cell(start_row, ind + 1).value != "":
                                    schedule += ", " + sheet.cell(
                                        start_row, ind + 1).value
                                else:
                                    schedule += ", - "
                                if sheet.cell(start_row, ind + 2).value != "":
                                    schedule += ", " + sheet.cell(
                                        start_row, ind + 2).value
                                else:
                                    schedule += ", - "
                                if sheet.cell(start_row, ind + 3).value != "":
                                    schedule += ", " + sheet.cell(
                                        start_row, ind + 3).value
                                else:
                                    schedule += ", - "
                            schedule += "\n"
                            start_row += 2
                        vk.messages.send(user_id=event.user_id,
                                         random_id=get_random_id(),
                                         message=schedule)

                    else:
                        if custom_mark[event.user_id]:
                            vk.messages.send(
                                user_id=event.user_id,
                                random_id=get_random_id(),
                                message="Некорректный номер группы - " +
                                userlist2[event.user_id])
                        else:
                            vk.messages.send(
                                user_id=event.user_id,
                                random_id=get_random_id(),
                                message="Некорректный номер группы - " +
                                userlist[event.user_id])

                except KeyError:
                    if custom_mark[event.user_id]:
                        vk.messages.send(
                            user_id=event.user_id,
                            random_id=get_random_id(),
                            message="Некорректный номер группы - " +
                            userlist2[event.user_id])
                    else:
                        vk.messages.send(
                            user_id=event.user_id,
                            random_id=get_random_id(),
                            message="Некорректный номер группы - " +
                            userlist[event.user_id])
                custom_mark[event.user_id] = False

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower(
        ) == "на завтра":
            tomorrow = datetime.today() + timedelta(days=1)
            if tomorrow.weekday() == 6:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message=str(tomorrow.day) + " " +
                                 mesyacy[tomorrow.month] + " занятий нет")
            else:
                try:
                    if custom_mark[event.user_id]:
                        book = xlrd.open_workbook(
                            str(kurs[userlist2[event.user_id][-2:]]) +
                            "kurs.xlsx")
                    else:
                        book = xlrd.open_workbook(
                            str(kurs[userlist[event.user_id][-2:]]) +
                            "kurs.xlsx")
                    sheet = book.sheet_by_index(0)
                    num_cols = sheet.ncols
                    num_rows = sheet.nrows
                    found = False
                    ind = 0

                    for col_index in range(num_cols):
                        group_cell = str(sheet.cell(1, col_index).value)
                        if (custom_mark[event.user_id]
                                and group_cell == userlist2[event.user_id]
                            ) or (not custom_mark[event.user_id]
                                  and group_cell == userlist[event.user_id]):
                            ind = col_index
                            found = True
                            break

                    if found:
                        schedule = "Расписание на " + str(
                            tomorrow.day) + " " + mesyacy[tomorrow.month]
                        schedule += "\n"
                        start_row = 3 + 12 * tomorrow.weekday()
                        if ((tomorrow - datetime(2019, 2, 11)).days // 7 +
                                1) % 2 == 0:
                            start_row += 1
                        print(start_row)
                        for i in range(6):
                            if sheet.cell(start_row, ind).value == "":
                                schedule += str(i + 1) + ") -"
                            else:
                                schedule += str(i + 1) + ") " + sheet.cell(
                                    start_row, ind).value
                                if sheet.cell(start_row, ind + 1).value != "":
                                    schedule += ", " + sheet.cell(
                                        start_row, ind + 1).value
                                else:
                                    schedule += ", - "
                                if sheet.cell(start_row, ind + 2).value != "":
                                    schedule += ", " + sheet.cell(
                                        start_row, ind + 2).value
                                else:
                                    schedule += ", - "
                                if sheet.cell(start_row, ind + 3).value != "":
                                    schedule += ", " + sheet.cell(
                                        start_row, ind + 3).value
                                else:
                                    schedule += ", - "
                            schedule += "\n"
                            start_row += 2
                        vk.messages.send(user_id=event.user_id,
                                         random_id=get_random_id(),
                                         message=schedule)

                    else:
                        if custom_mark[event.user_id]:
                            vk.messages.send(
                                user_id=event.user_id,
                                random_id=get_random_id(),
                                message="Некорректный номер группы - " +
                                userlist2[event.user_id])
                        else:
                            vk.messages.send(
                                user_id=event.user_id,
                                random_id=get_random_id(),
                                message="Некорректный номер группы - " +
                                userlist[event.user_id])

                except KeyError:
                    if custom_mark[event.user_id]:
                        vk.messages.send(
                            user_id=event.user_id,
                            random_id=get_random_id(),
                            message="Некорректный номер группы - " +
                            userlist2[event.user_id])
                    else:
                        vk.messages.send(
                            user_id=event.user_id,
                            random_id=get_random_id(),
                            message="Некорректный номер группы - " +
                            userlist[event.user_id])
                custom_mark[event.user_id] = False

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower(
        ) == "на эту неделю":
            try:
                if custom_mark[event.user_id]:
                    book = xlrd.open_workbook(
                        str(kurs[userlist2[event.user_id][-2:]]) + "kurs.xlsx")
                else:
                    book = xlrd.open_workbook(
                        str(kurs[userlist[event.user_id][-2:]]) + "kurs.xlsx")
                sheet = book.sheet_by_index(0)
                num_cols = sheet.ncols
                num_rows = sheet.nrows
                found = False
                ind = 0

                for col_index in range(num_cols):
                    group_cell = str(sheet.cell(1, col_index).value)
                    if (custom_mark[event.user_id]
                            and group_cell == userlist2[event.user_id]) or (
                                not custom_mark[event.user_id]
                                and group_cell == userlist[event.user_id]):
                        ind = col_index
                        found = True
                        break

                if found:
                    schedule = "Расписание на " + str(
                        (datetime.today() - datetime(2019, 2, 11)).days // 7 +
                        1)
                    schedule += " неделю\n"
                    start_row = 3
                    if ((datetime.today() - datetime(2019, 2, 11)).days // 7 +
                            1) % 2 == 0:
                        start_row += 1
                    print(start_row)
                    for j in range(6):
                        schedule += days_of_week[j] + "\n"
                        for i in range(6):
                            if sheet.cell(start_row, ind).value == "":
                                schedule += str(i + 1) + ") -"
                            else:
                                schedule += str(i + 1) + ") " + sheet.cell(
                                    start_row, ind).value
                                if sheet.cell(start_row, ind + 1).value != "":
                                    schedule += ", " + sheet.cell(
                                        start_row, ind + 1).value
                                else:
                                    schedule += ", - "
                                if sheet.cell(start_row, ind + 2).value != "":
                                    schedule += ", " + sheet.cell(
                                        start_row, ind + 2).value
                                else:
                                    schedule += ", - "
                                if sheet.cell(start_row, ind + 3).value != "":
                                    schedule += ", " + sheet.cell(
                                        start_row, ind + 3).value
                                else:
                                    schedule += ", - "
                            schedule += "\n"
                            start_row += 2
                        schedule += "\n"
                    vk.messages.send(user_id=event.user_id,
                                     random_id=get_random_id(),
                                     message=schedule)
                else:
                    if custom_mark[event.user_id]:
                        vk.messages.send(
                            user_id=event.user_id,
                            random_id=get_random_id(),
                            message="Некорректный номер группы - " +
                            userlist2[event.user_id])
                    else:
                        vk.messages.send(
                            user_id=event.user_id,
                            random_id=get_random_id(),
                            message="Некорректный номер группы - " +
                            userlist[event.user_id])
            except KeyError:
                if custom_mark[event.user_id]:
                    vk.messages.send(user_id=event.user_id,
                                     random_id=get_random_id(),
                                     message="Некорректный номер группы - " +
                                     userlist2[event.user_id])
                else:
                    vk.messages.send(user_id=event.user_id,
                                     random_id=get_random_id(),
                                     message="Некорректный номер группы - " +
                                     userlist[event.user_id])
            custom_mark[event.user_id] = False

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower(
        ) == "на следующую неделю":
            try:
                if custom_mark[event.user_id]:
                    book = xlrd.open_workbook(
                        str(kurs[userlist2[event.user_id][-2:]]) + "kurs.xlsx")
                else:
                    book = xlrd.open_workbook(
                        str(kurs[userlist[event.user_id][-2:]]) + "kurs.xlsx")
                sheet = book.sheet_by_index(0)
                num_cols = sheet.ncols
                num_rows = sheet.nrows
                found = False
                ind = 0

                for col_index in range(num_cols):
                    group_cell = str(sheet.cell(1, col_index).value)
                    if (custom_mark[event.user_id]
                            and group_cell == userlist2[event.user_id]) or (
                                not custom_mark[event.user_id]
                                and group_cell == userlist[event.user_id]):
                        ind = col_index
                        found = True
                        break

                if found:
                    schedule = "Расписание на " + str(
                        (datetime.today() - datetime(2019, 2, 11)).days // 7 +
                        2)
                    schedule += " неделю\n"
                    start_row = 3
                    if ((datetime.today() - datetime(2019, 2, 11)).days // 7 +
                            2) % 2 == 0:
                        start_row += 1
                    print(start_row)
                    for j in range(6):
                        schedule += days_of_week[j] + "\n"
                        for i in range(6):
                            if sheet.cell(start_row, ind).value == "":
                                schedule += str(i + 1) + ") -"
                            else:
                                schedule += str(i + 1) + ") " + sheet.cell(
                                    start_row, ind).value
                                if sheet.cell(start_row, ind + 1).value != "":
                                    schedule += ", " + sheet.cell(
                                        start_row, ind + 1).value
                                else:
                                    schedule += ", - "
                                if sheet.cell(start_row, ind + 2).value != "":
                                    schedule += ", " + sheet.cell(
                                        start_row, ind + 2).value
                                else:
                                    schedule += ", - "
                                if sheet.cell(start_row, ind + 3).value != "":
                                    schedule += ", " + sheet.cell(
                                        start_row, ind + 3).value
                                else:
                                    schedule += ", - "
                            schedule += "\n"
                            start_row += 2
                        schedule += "\n"
                    vk.messages.send(user_id=event.user_id,
                                     random_id=get_random_id(),
                                     message=schedule)
                else:
                    if custom_mark[event.user_id]:
                        vk.messages.send(
                            user_id=event.user_id,
                            random_id=get_random_id(),
                            message="Некорректный номер группы - " +
                            userlist2[event.user_id])
                    else:
                        vk.messages.send(
                            user_id=event.user_id,
                            random_id=get_random_id(),
                            message="Некорректный номер группы - " +
                            userlist[event.user_id])
            except KeyError:
                if custom_mark[event.user_id]:
                    vk.messages.send(user_id=event.user_id,
                                     random_id=get_random_id(),
                                     message="Некорректный номер группы - " +
                                     userlist2[event.user_id])
                else:
                    vk.messages.send(user_id=event.user_id,
                                     random_id=get_random_id(),
                                     message="Некорректный номер группы - " +
                                     userlist[event.user_id])
            custom_mark[event.user_id] = False

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower(
        ) == "какая неделя?":
            week = (datetime.today() - datetime(2019, 2, 11)).days // 7 + 1
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message="Идёт " + str(week) + " неделя")

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower(
        ) == "какая группа?":
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message="Показываю расписание группы " +
                             userlist[event.user_id])

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and re.match(
                r"бот \w\w\w\w-\d\d-\d\d", event.text.lower()):
            userlist2[event.user_id] = re.findall(
                r"\w\w\w\w-\d\d-\d\d", event.text.lower())[0].upper()
            custom_mark[event.user_id] = True
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message="Показать расписание группы " +
                             userlist2[event.user_id],
                             keyboard=keyboard.get_keyboard())

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and re.match(
                r"бот .+ \w\w\w\w-\d\d-\d\d", event.text.lower()):
            dow = {}
            for key, value in days_of_week.items():
                dow[value.lower()] = key
            if re.findall(r"\w+", event.text.lower())[1] not in dow:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message="Неизвестная команда")
            else:
                group = re.findall(r"\w\w\w\w-\d\d-\d\d",
                                   event.text.upper())[0]
                day = dow[re.findall(r"\w+", event.text.lower())[1]]
                if day == 6:
                    vk.messages.send(user_id=event.user_id,
                                     random_id=get_random_id(),
                                     message="В воскресенье занятий нет")
                else:
                    try:
                        book = xlrd.open_workbook(
                            str(kurs[group[-2:]]) + "kurs.xlsx")
                        sheet = book.sheet_by_index(0)
                        num_cols = sheet.ncols
                        num_rows = sheet.nrows
                        found = False
                        ind = 0

                        for col_index in range(num_cols):
                            group_cell = str(sheet.cell(1, col_index).value)
                            if group_cell == group:
                                ind = col_index
                                found = True
                                break

                        if found:
                            schedule = "Расписание на " + re.findall(
                                r"\w+", event.text.lower())[1]
                            schedule += "\n"
                            start_row = 3 + 12 * day
                            print(start_row)
                            schedule += "Нечётный\n"
                            for i in range(6):
                                if sheet.cell(start_row, ind).value == "":
                                    schedule += str(i + 1) + ") -"
                                else:
                                    schedule += str(i + 1) + ") " + sheet.cell(
                                        start_row, ind).value
                                    if sheet.cell(start_row,
                                                  ind + 1).value != "":
                                        schedule += ", " + sheet.cell(
                                            start_row, ind + 1).value
                                    else:
                                        schedule += ", - "
                                    if sheet.cell(start_row,
                                                  ind + 2).value != "":
                                        schedule += ", " + sheet.cell(
                                            start_row, ind + 2).value
                                    else:
                                        schedule += ", - "
                                    if sheet.cell(start_row,
                                                  ind + 3).value != "":
                                        schedule += ", " + sheet.cell(
                                            start_row, ind + 3).value
                                    else:
                                        schedule += ", - "
                                schedule += "\n"
                                start_row += 2

                            start_row = 3 + 12 * day + 1
                            print(start_row)
                            schedule += "Чётный\n"
                            for i in range(6):
                                if sheet.cell(start_row, ind).value == "":
                                    schedule += str(i + 1) + ") -"
                                else:
                                    schedule += str(i + 1) + ") " + sheet.cell(
                                        start_row, ind).value
                                    if sheet.cell(start_row,
                                                  ind + 1).value != "":
                                        schedule += ", " + sheet.cell(
                                            start_row, ind + 1).value
                                    else:
                                        schedule += ", - "
                                    if sheet.cell(start_row,
                                                  ind + 2).value != "":
                                        schedule += ", " + sheet.cell(
                                            start_row, ind + 2).value
                                    else:
                                        schedule += ", - "
                                    if sheet.cell(start_row,
                                                  ind + 3).value != "":
                                        schedule += ", " + sheet.cell(
                                            start_row, ind + 3).value
                                    else:
                                        schedule += ", - "
                                schedule += "\n"
                                start_row += 2
                            vk.messages.send(user_id=event.user_id,
                                             random_id=get_random_id(),
                                             message=schedule)

                        else:
                            vk.messages.send(
                                user_id=event.user_id,
                                random_id=get_random_id(),
                                message="Некорректный номер группы - " + group)

                    except KeyError:
                        vk.messages.send(
                            user_id=event.user_id,
                            random_id=get_random_id(),
                            message="Некорректный номер группы - " + group)

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and re.match(
                r"бот .+", event.text.lower()):
            dow = {}
            for key, value in days_of_week.items():
                dow[value.lower()] = key
            if re.findall(r"\w+", event.text.lower())[1] not in dow:
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message="Неизвестная команда")
            else:
                day = dow[re.findall(r"\w+", event.text.lower())[1]]
                if day == 6:
                    vk.messages.send(user_id=event.user_id,
                                     random_id=get_random_id(),
                                     message="В воскресенье занятий нет")
                else:
                    try:
                        book = xlrd.open_workbook(
                            str(kurs[userlist[event.user_id][-2:]]) +
                            "kurs.xlsx")
                        sheet = book.sheet_by_index(0)
                        num_cols = sheet.ncols
                        num_rows = sheet.nrows
                        found = False
                        ind = 0

                        for col_index in range(num_cols):
                            group_cell = str(sheet.cell(1, col_index).value)
                            if group_cell == userlist[event.user_id]:
                                ind = col_index
                                found = True
                                break

                        if found:
                            schedule = "Расписание на " + re.findall(
                                r"\w+", event.text.lower())[1]
                            schedule += "\n"
                            start_row = 3 + 12 * day
                            print(start_row)
                            schedule += "Нечётный\n"
                            for i in range(6):
                                if sheet.cell(start_row, ind).value == "":
                                    schedule += str(i + 1) + ") -"
                                else:
                                    schedule += str(i + 1) + ") " + sheet.cell(
                                        start_row, ind).value
                                    if sheet.cell(start_row,
                                                  ind + 1).value != "":
                                        schedule += ", " + sheet.cell(
                                            start_row, ind + 1).value
                                    else:
                                        schedule += ", - "
                                    if sheet.cell(start_row,
                                                  ind + 2).value != "":
                                        schedule += ", " + sheet.cell(
                                            start_row, ind + 2).value
                                    else:
                                        schedule += ", - "
                                    if sheet.cell(start_row,
                                                  ind + 3).value != "":
                                        schedule += ", " + sheet.cell(
                                            start_row, ind + 3).value
                                    else:
                                        schedule += ", - "
                                schedule += "\n"
                                start_row += 2

                            start_row = 3 + 12 * day + 1
                            print(start_row)
                            schedule += "Чётный\n"
                            for i in range(6):
                                if sheet.cell(start_row, ind).value == "":
                                    schedule += str(i + 1) + ") -"
                                else:
                                    schedule += str(i + 1) + ") " + sheet.cell(
                                        start_row, ind).value
                                    if sheet.cell(start_row,
                                                  ind + 1).value != "":
                                        schedule += ", " + sheet.cell(
                                            start_row, ind + 1).value
                                    else:
                                        schedule += ", - "
                                    if sheet.cell(start_row,
                                                  ind + 2).value != "":
                                        schedule += ", " + sheet.cell(
                                            start_row, ind + 2).value
                                    else:
                                        schedule += ", - "
                                    if sheet.cell(start_row,
                                                  ind + 3).value != "":
                                        schedule += ", " + sheet.cell(
                                            start_row, ind + 3).value
                                    else:
                                        schedule += ", - "
                                schedule += "\n"
                                start_row += 2
                            vk.messages.send(user_id=event.user_id,
                                             random_id=get_random_id(),
                                             message=schedule)

                        else:
                            vk.messages.send(
                                user_id=event.user_id,
                                random_id=get_random_id(),
                                message="Некорректный номер группы - " +
                                userlist[event.user_id])

                    except KeyError:
                        vk.messages.send(
                            user_id=event.user_id,
                            random_id=get_random_id(),
                            message="Некорректный номер группы - " +
                            userlist[event.user_id])

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text.lower(
        ) == "погода":
            w = requests.get(
                "http://api.openweathermap.org/data/2.5/weather?q=moscow&appid=9b39cc1cf3f2f9d9556efd5a0acbb4f2&units=metric"
            )
            weather = w.json()
            output = "Погода в Москве: " + weather_type[weather["weather"][0]
                                                        ["main"]] + "\n"
            output += weather_description[weather["weather"][0]
                                          ["description"]] + ", температура: "
            output += str(int(weather["main"]["temp_min"])) + "-" + str(
                int(weather["main"]["temp_max"])) + "˚C\n"
            output += "Давление: " + str(
                weather["main"]["pressure"]) + " мм рт. ст., влажность: "
            output += str(weather["main"]["humidity"]) + "%\n"
            output += "Ветер: " + get_bofort(
                weather["wind"]["speed"]) + ", " + str(
                    weather["wind"]["speed"]) + "м/с, "
            output += get_rumb(weather["wind"]["deg"])
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message=output)

        elif event.type == VkEventType.MESSAGE_NEW and event.to_me:
            vk.messages.send(user_id=event.user_id,
                             random_id=get_random_id(),
                             message="Неизвестная команда")
コード例 #26
0
class ServerBot:
    def __init__(self,
                 need_params,
                 users_token=u_t,
                 group_token=b_t,
                 give_found_result=0):
        self.vk = vk_api.VkApi(token=group_token)
        self.users_token = users_token
        self.long_poll = VkLongPoll(self.vk)
        self.request = ''
        self.state = STATUSES["hello"]
        self.give_found_result = give_found_result
        self.need_params = need_params

    def send_msg(self, user_id, message):
        self.vk.method("messages.send", {
            'user_id': user_id,
            'message': message,
            "random_id": randrange(10**7)
        })

    def send_photo(self, user_id, message, owner_photo_id, photo_id):
        self.vk.method(
            "messages.send", {
                'user_id': user_id,
                'message': message,
                "random_id": randrange(10**7),
                "attachment": f"photo{owner_photo_id}_{photo_id}"
            })

    def hello(self):
        parsing_bot_user = parse_bot_user(self.need_params.user_id)
        self.need_params.user_name = parsing_bot_user["name"]
        self.need_params.user_surname = parsing_bot_user["surname"]
        self.need_params.user_gender = parsing_bot_user["gender"]
        self.send_msg(
            self.need_params.user_id, f"Привет {self.need_params.user_name}!\n"
            f"Я бот VKinder ваш помощник для помощи вводите bot_commands")
        insert_bot_user_to_vk_users(self.need_params.user_id,
                                    self.need_params.user_name,
                                    self.need_params.user_surname,
                                    self.need_params.user_gender)
        self.state = STATUSES["commands"]
        return self.state

    def commands(self):
        return self.send_msg(
            self.need_params.user_id, f"Выберите команду:\n"
            f"Search_users: Искать людей для знакомства\n"
            f"News: Новости про команды Boston Celtics\n"
            f"History: История команды Boston Celtics и прочие материалы")

    def searching(self):
        search = search_users(self.need_params.age_from,
                              self.need_params.age_to, self.need_params.gender,
                              self.need_params.town, self.need_params.status,
                              self.need_params.country_id)
        for i in search:
            username = i["name"]
            surname = i["surname"]
            vk_id = i["User_ID"]
            city_id = i["city"]["id"]
            country_id = i["country"]["id"]
            gender_id = i["gender"]
            # print(city_id, city_title, country_id, gender_id)
            insert_searched_users_to_all_vk_users(vk_id, username, surname,
                                                  gender_id, country_id,
                                                  city_id,
                                                  self.need_params.status)
            insert_searched_users(self.need_params.user_id, vk_id)
        self.state = STATUSES["select_users"]
        return search

    def selecting_country(self):
        searching = select_search_country(self.need_params.country_name)
        if searching:
            self.need_params.country_id = searching["ID"]
            self.need_params.country_name = searching["name"]
            self.state = STATUSES["choose_city_wait"]
            self.send_msg(self.need_params.user_id, f"Вводите город поиска")
            return self.state
        else:
            self.send_msg(
                self.need_params.user_id,
                "Вы ввели неправильную страну пожалуйста вводите её заново")
            self.state = STATUSES["choose_country_wait"]
            return self.state

    def select_city(self):
        searching = check_town(self.need_params.country_id,
                               self.need_params.town)
        if searching:
            self.need_params.town_id = searching["ID"]
            self.need_params.town = searching["name"]
            self.state = STATUSES["choose_gender"]
            self.send_msg(
                self.need_params.user_id, f"вводите пол юзера:\n"
                f"man - мужчина\n"
                f"woman - женщина\n"
                f"any - без разницы")
            return self.state
        else:
            self.send_msg(
                self.need_params.user_id,
                f"Вы ввели неправильный город поиска! пожалуйста вводите её заново)\n"
                f" Постарайтесь вводить известные города")
            self.state = STATUSES["choose_city_wait"]
            return self.state

    def news(self):
        for news in n_c():
            self.send_msg(self.need_params.user_id, news)
        self.send_msg(
            self.need_params.user_id,
            "Этот сеанс окончен и мы возвращаемся в состояние bot_commands")
        self.state = STATUSES["commands"]
        self.commands()

    def history(self):
        self.send_msg(self.need_params.user_id, i_s_w())
        self.send_msg(
            self.need_params.user_id,
            "Этот сеанс окончен и мы возвращаемся в состояние bot_commands")
        self.state = STATUSES["commands"]
        self.commands()

    def got_it(self):
        self.state = STATUSES["got_it"]
        self.send_msg(
            self.need_params.user_id, f'Параметры поиска вашей половинки:\n'
            f'Минимальный возраст: {self.need_params.age_from},\n'
            f'Максимальный возраст: {self.need_params.age_to},\n'
            f'Город: {self.need_params.town},\n'
            f'Пол: {self.need_params.gender_text},\n'
            f'Страна: {self.need_params.country_name},\n'
            f'Семейное положение: {self.need_params.status}\n'
            f'Хотите начать?\n'
            f'пишите да или нет')
        return self.state

    def show_searched_users(self):
        self.give_found_result = select_searched_users_for_bot_users(
            self.need_params.user_id)
        self.send_msg(self.need_params.user_id,
                      f"vk.com/id{self.give_found_result.found_result_vk_id}")
        photos = get_photos(self.give_found_result.found_result_vk_id)
        self.send_msg(self.need_params.user_id, "Топ 3 фотографии юзера:\n ")
        for a in photos:
            self.send_photo(self.need_params.user_id, " ",
                            self.give_found_result.found_result_vk_id, a["ID"])
        self.send_msg(
            self.need_params.user_id,
            "Нравится? если да то пишите like если нет то hate! для выхода пишите quit\n",
        )
        self.state = STATUSES["wait_like"]
        return self.give_found_result

    def show_all_liked_users(self):
        liked_users = select_to_user_all_liked_users(self.need_params.user_id)
        for i in liked_users:
            self.send_msg(self.need_params.user_id,
                          f"vk.com/id{i.found_result_vk_id}")
            photos = get_photos(i.found_result_vk_id)
            for a in photos:
                self.send_photo(self.need_params.user_id, " ",
                                i.found_result_vk_id, a["ID"])
        self.send_msg(self.need_params.user_id,
                      "Этот сеанс окончен и мы вернёмся в состояние Commands")
        self.state = STATUSES["commands"]
        self.commands()

    def show_all_hated_users(self):
        hated_users = select_to_user_all_hated_users(self.need_params.user_id)
        for i in hated_users:
            self.send_msg(self.need_params.user_id,
                          f"vk.com/id{i.found_result_vk_id}")
            photos = get_photos(i.found_result_vk_id)
            for a in photos:
                self.send_photo(self.need_params.user_id, " ",
                                i.found_result_vk_id, a["ID"])
        self.send_msg(self.need_params.user_id,
                      "Этот сеанс окончен и мы вернёмся в состояние Commands")
        self.state = STATUSES["commands"]
        self.commands()

    def talking(self):
        for event in self.long_poll.listen():
            if event.type == VkEventType.MESSAGE_NEW:
                if event.to_me:
                    self.request = event.text.lower()
                    self.need_params.user_id = event.user_id

                    # print(search_users(self.age_from, self.age_to, self.gender, self.town, self.status, self.country))
                    if self.request == "привет" and self.state == STATUSES[
                            "hello"]:
                        self.hello()

                    elif self.request == "привет" and self.state == STATUSES[
                            "commands"]:
                        self.send_msg(
                            self.need_params.user_id,
                            f"Мы же уже поздаровались) давай лучше выбери команду)\n"
                        )
                        self.commands()

                    elif self.request == "bot_commands" and self.state == STATUSES[
                            "commands"]:
                        self.state = STATUSES["commands"]
                        self.commands()

                    elif self.request == "search_users" and self.state == STATUSES[
                            "commands"]:
                        self.state = STATUSES["choose_country_wait"]
                        self.send_msg(
                            self.need_params.user_id,
                            f"ВНИМАНИЯ! предупреждаю вас о том когда вы наберёте не правильную"
                            f" команду или не правильно вводите параметры поиска то это в конце"
                            f" концов повлияет на ваш же поиск и вы не получите нужный ответ и "
                            f"мы снова возвращаемся в bot_commands!\n"
                            f"Поэтому просим вас быть внимательнее и правильно заполнить нужные"
                            f" поля! спасибо за понимание)\n"
                            f"Ну а теперь приступим к поиску)\n"
                            f"Вводите страну поиска Например Россия, Украина, Белорусия и т.д.\n"
                        )

                    elif self.state == STATUSES["choose_country_wait"]:
                        self.need_params.country_name = self.request
                        self.selecting_country()

                    elif self.state == STATUSES["choose_city_wait"]:
                        self.need_params.town = self.request
                        self.select_city()

                    elif self.request == "man" and self.state == STATUSES[
                            "choose_gender"]:
                        self.need_params.gender = 2
                        self.need_params.gender_text = "man"
                        self.state = STATUSES["choose_age_from"]
                        self.send_msg(
                            self.need_params.user_id,
                            f"Вводите минимальный возраст пользователя "
                            f"от 10 до 100")

                    elif self.request == "woman" and self.state == STATUSES[
                            "choose_gender"]:
                        self.need_params.gender = 1
                        self.need_params.gender_text = "woman"
                        self.state = STATUSES["choose_age_from"]
                        self.send_msg(
                            self.need_params.user_id,
                            f"Вводите минимальный возраст пользователя "
                            f"от 10 до 100")

                    elif self.request == "any" and self.state == STATUSES[
                            "choose_gender"]:
                        self.need_params.gender = 0
                        self.need_params.gender_text = "any"
                        self.state = STATUSES["choose_age_from"]
                        self.send_msg(
                            self.need_params.user_id,
                            f"Вводите минимальный возраст пользователя "
                            f"от 10 до 100")

                    elif self.state == STATUSES["choose_age_from"] and int(
                            self.request) in range(100):
                        self.state = STATUSES["choose_age_to"]
                        self.need_params.age_from = self.request
                        self.send_msg(
                            self.need_params.user_id,
                            f"Вводите максимальный возраст пользователя"
                            f" и оно не должно быть меньше минимального возраста"
                        )

                    elif self.state == STATUSES["choose_age_to"] and int(
                            self.request) in range(100):
                        self.state = STATUSES["choose_status"]
                        self.need_params.age_to = self.request
                        self.send_msg(
                            self.need_params.user_id,
                            f"Вводите номер статуса пользователя:\n"
                            f"1.не женат(не за мужем)\n"
                            f"2.встречается\n"
                            f"3.помолвлен(-а)\n"
                            f"4.женат(за мужем)\n"
                            f"5.всё сложно\n"
                            f"6.в активном поиске\n"
                            f"7.влюблен(-а)\n"
                            f"8.в гражданском браке")

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "1":
                        self.need_params.status = 1
                        self.got_it()

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "2":
                        self.need_params.status = 2
                        self.got_it()

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "3":
                        self.need_params.status = 3
                        self.got_it()

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "4":
                        self.need_params.status = 4
                        self.got_it()

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "5":
                        self.need_params.status = 5
                        self.got_it()

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "6":
                        self.need_params.status = 6
                        self.got_it()

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "7":
                        self.need_params.status = 7
                        self.got_it()

                    elif self.state == STATUSES[
                            "choose_status"] and self.request == "8":
                        self.need_params.status = 8
                        self.got_it()

                    elif self.state == STATUSES[
                            "got_it"] and self.request.lower() == "да":
                        insert_search_params(self.need_params.user_id,
                                             self.need_params.age_from,
                                             self.need_params.age_to,
                                             self.need_params.status,
                                             self.need_params.town_id,
                                             self.need_params.country_id,
                                             self.need_params.gender)
                        self.searching()
                        self.show_searched_users()

                    elif self.state == STATUSES[
                            "got_it"] and self.request.lower() == "нет":
                        self.send_msg(
                            self.need_params.user_id,
                            f"Вы выбрали команду нет поэтому мы возвращаемся в состояние Сommands"
                        )
                        self.state = STATUSES["commands"]
                        self.commands()

                    elif self.state == STATUSES[
                            "wait_like"] and self.request == "like":
                        set_like_status_and_show_status(
                            self.give_found_result.found_result_vk_id)
                        self.state = STATUSES["wait_like"]
                        self.show_searched_users()

                    elif self.state == STATUSES[
                            "wait_like"] and self.request == "hate":
                        set_hate_status_and_show_status(
                            self.give_found_result.found_result_vk_id)
                        self.state = STATUSES["wait_like"]
                        self.show_searched_users()

                    elif self.state == STATUSES[
                            "wait_like"] and self.request == "quit":
                        self.send_msg(
                            self.need_params.user_id,
                            f"хотите ли смотреть список лайкнутых или чёрный "
                            f"список?)\n "
                            f"Если да то пишите like_list или hate_list или exit "
                            f"для выхода")
                        self.state = STATUSES["wait_likekist_or_hatelist"]

                    elif self.state == STATUSES[
                            "wait_likekist_or_hatelist"] and self.request == "like_list":
                        self.show_all_liked_users()

                    elif self.state == STATUSES[
                            "wait_likekist_or_hatelist"] and self.request == "hate_list":
                        self.show_all_hated_users()

                    elif self.state == STATUSES[
                            "wait_likekist_or_hatelist"] and self.request == "exit":
                        self.state = STATUSES["commands"]
                        self.send_msg(
                            self.need_params.user_id,
                            f"Этот сеанс окончен и мы вернёмся в состояние Commands"
                        )
                        self.commands()

                    elif self.request == "news" and self.state == STATUSES[
                            "commands"]:
                        self.news()

                    elif self.request == "history" and self.state == STATUSES[
                            "commands"]:
                        self.history()

                    else:
                        self.send_msg(
                            self.need_params.user_id,
                            f"ERROR! Вы набрали не правильную команду или где то "
                            f"допустили ошибку! поэтому вернёмся в Hello")
                        self.state = STATUSES["hello"]
                        self.hello()
コード例 #27
0
ファイル: main.py プロジェクト: cactusan/VkBot
class BotMainLoop(object):
	""" Bot main class """
	def __init__(self):
		self.app_token = "00b73157edcc1908a48d21a259762638b7cec649e01375e2dc70f5dc5a44f2ec88c6b80d66c85df03343f"
		self.vk = vk_api.VkApi(token=self.app_token)
		self.longpoll = VkLongPoll(self.vk)
		self.CitiesGame = cities.Game()
		self.loop()

	def write_msg(self, user_id, random_id, message):
		""" Message sending function"""
		self.vk.method("messages.send", {"user_id": user_id, "random_id": random_id, "message": message})

	def get_user_info(self, id):
		""" Getting user information """
		try:
			api = vk_requests.create_api(service_token=self.app_token)
			user = api.users.get(user_ids=id)
			return user[0]['first_name']
		except Exception as e:
			print("[Get user info] :: ", e)

	def loop(self):
		""" Main bot cycle """
		print("[The bot is running]")
		exit = False
		while not exit:
			try:
				# Прием сообшений
				for event in self.longpoll.listen():
					if event.type == VkEventType.MESSAGE_NEW:
						if event.to_me:
							random_id = random.randrange(1, 500, 1)
							normal_text = event.text
							command = event.text.split(" ")
							# Приветствие
							if normal_text.upper() in lists.HELLO_Q:
								user_name = self.get_user_info(event.user_id)
								message = random.choice(lists.HELLO_A) + user_name + random.choice(lists.SYMBOLS)
								self.write_msg(event.user_id, random_id, message)
							# Создатель
							elif normal_text.upper() in lists.CREATOR_Q:
								message = "https://vk.com/cact_us"
								self.write_msg(event.user_id, random_id, message)
							# Прощание
							elif normal_text.upper() in lists.BYE_Q:
								message = random.choice(lists.BYE_A)
								self.write_msg(event.user_id, random_id, message)
							# Если пользователь хочет узнать текущую погоду.
							elif command[0].upper() == "ПОГОДА":
								weather_mod = Weather()
								try:
									city_id = weather_mod.searchCity(command[1])
									city = command[1].capitalize()
									message = weather_mod.current_weather(city_id, city)
									self.write_msg(event.user_id, random_id, message)
								except Exception as e:
									print("[Incorrect city input (current weather)] :: ", e)
									self.write_msg(event.user_id, random_id, "Не могу найти информацию по Вашему запросу.")
							# Если пользователь хочет узнать прогноз погоды.
							elif command[0].upper() == "ПРОГНОЗ":
								weather_mod = Weather()
								try:
									city_id = weather_mod.searchCity(command[1])
									city = command[1].capitalize()
									days = int(command[2])
									message = weather_mod.weather_forecast(city_id, city, days)
									# self.write_msg(event.user_id, random_id, message)
									self.write_msg(event.user_id, random_id, "Данная функция находится в разработке.")
								except Exception as e:
									print("[Incorrect city input (weather forecast)] :: ", e)
									self.write_msg(event.user_id, random_id, "Не могу найти информацию по Вашему запросу.")
							# Игра в города
							elif command[0].upper() == "ГОРОДА":
								try:
									if command[0].upper() == "ГОРОДА" and command[1].upper() == "РЕСТАРТ":
										self.CitiesGame.resetGame()
										self.write_msg(event.user_id, random_id, "Игра города перезапущена!")
									elif command[0].upper() == "ГОРОДА" and command[1].upper() == "НАЗВАННЫЕ":
										message = self.CitiesGame.sendUsedCitues()
										self.write_msg(event.user_id, random_id, message)
									else:
										message = self.CitiesGame.gameMainLoop(command[1])
										self.write_msg(event.user_id, random_id, message)
								except Exception as e:
									print("[Game cities] :: ", e)
							# Общение с ботом
							else:
								message = "Я вас не понимаю.("
								self.write_msg(event.user_id, random_id, message)
			except:
				print("[The bot is off]")
				exit = True
コード例 #28
0
ファイル: bot_test1.py プロジェクト: alexeyvolkov1917/vk_bot
            return kb.get_keyboard()
        else:
            return kb.get_empty_keyboard()


kb1 = keyboard.VkKeyboard(one_time=True)
kb1.add_button('ЖКХ', color=VkKeyboardColor.PRIMARY)
kb1.add_button('Житель', color=VkKeyboardColor.PRIMARY)

kb_prim = Keyboards()
kb_sec = Keyboards()
kb2 = kb_prim.firstKB()
job_done = ''
keys = dbdrive.get_keys()
for event in Longpoll.listen():
    randomid = random.randint(1, 9999999)
    Check_user = False
    Check_JKH = False
    if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
        # for job in jobs:
        #     if event.text == job:
        if dbdrive.check_user(event.user_id):
            Check_user = True
        if dbdrive.check_jkh(event.user_id):
            Check_JKH = True
        for key in keys:
            if event.text == key[0] and Check_JKH is False:
                vk.messages.send(user_id=event.user_id,
                                 message='Теперь вы в группе ЖКХ',
                                 random_id=randomid,
コード例 #29
0
ファイル: Bot.py プロジェクト: Flarensu/SNNCBOT
def main():
    bad_words = [
        'Пидор',
        'Ты пидор',
        'Ти пидор',
        'Пэдро',
        'Ты пэдро',
        'Ти пэдро',
        'Пыдар',
        'Ты пыдар',
        'Ти пыдар',
        'Пидр',
        'Ты пидр',
        'Ти пидр',
        'Пизда',
        'Ты пизда',
        'Ти пизда',
        'Пидорас',
        'Ты пидорас',
        'Ти пидорас',
        'Тварь',
        'Ты тварь',
        'Ти тварь',
        'Говно',
        'Ты говно',
        'Ти говно',
        'Сука',
        'Ты сука',
        'Ти сука',
        'Член',
        'Ты член',
        'Ти член',
        'Даун',
        'Ты даун',
        'Ти даун',
        'Аутист',
        'Ты аутист',
        'Ти аутист',
        'Долбаеб',
        'Ты долбаеб',
        'Ти долбаеб',
        'Долбаёб',
        'Ты долбаёб',
        'Ти долбаёб',
        'Долбоеб',
        'Ты долбоеб',
        'Ти долбоеб',
        'Долбоёб',
        'Ты долбоёб',
        'Ти долбоёб',
        'Говноед',
        'Ты говноед',
        'Ти говноед',
        'Блядь',
        'Ты блядь',
        'Ти блядь',
        'Бля',
        'Блять',
        'Ты блять',
        'Ти блять',
        'Пошел нахуй',
        'Пошел ты нахуй',
        'Иди нахуй',
        'Иди на хуй',
        'Пошел на хуй',
        'Хуй',
        'Ты хуй',
        'Ти хуй',
        'Иди в пизду',
        'Пошел в пизду',
        'В пизду',
        'Ебать',
        'Ебал',
        'Ебаный',
        'Ебанный',
        'Ебал в рот',
        'Ебаный рот',
        'Ебанный рот',
        'Ублюдок мать твою',
        'Гей',
        'Ты гей',
        'Ти гей',
        'Чмо',
        'Ты чмо',
        'Ти чмо',
        'Чьмо',
        'Ты чьмо',
        'Ти чьмо',
        'Лох',
        'Ты лох',
        'Ти лох',
    ]

    SHS = [
        'Саня хуй соси', 'Хуй саня соси', 'Соси хуй саня', 'Бот, скинь дз',
        'Схс', 'Cхс', 'Cxс', 'Cxc', 'Сxс', 'Cxс', 'Сxc'
    ]

    rhythm = {
        'Да': 'Борода',
        'да': 'Борода',
        'ДА': 'Борода',
    }

    commands = {
        '!Пидор': 'chooseOneGay()',
        '!пидор': 'chooseOneGay()',
        '!ПИДОР': 'chooseOneGay()',
        '!ролл': 'getRandomNumber()',
        '!Ролл': 'getRandomNumber()',
        '!РОЛЛ': 'getRandomNumber()',
    }

    login, password = '******', 'x'
    vk_session = vk_api.VkApi(login, password, auth_handler=auth_handler)

    try:
        vk_session.auth(token_only=True)
    except vk_api.AuthError as error_msg:
        print(error_msg)
        return

    longpoll = VkLongPoll(vk_session)

    for event in longpoll.listen():
        print('New event', event.type)

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

            if event.from_me:
                print('От меня для: ', end='')
            elif event.to_me:
                print('Для меня от: ', end='')

            if event.from_user:
                print(event.user_id)
            elif event.from_chat:
                print(event.user_id, 'в беседе', event.chat_id)
            elif event.from_group:
                print('группы', event.group_id)

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

            messageText = str(event.text)

            def chooseOneGay():
                dict_members = vk_session.get_api(
                ).messages.getConversationMembers(peer_id=2000000072,
                                                  fields='id')
                a1 = []
                a2 = []
                a3 = []
                for mass in dict_members['profiles']:
                    var1 = mass.get('id')
                    a1.append(var1)
                    var2 = mass.get('first_name')
                    a2.append(var2)
                    var3 = mass.get('last_name')
                    a3.append(var3)
                print(a1)
                print(a2)
                print(a3)
                lenghtA1 = len(a1)
                randomGay = random.randint(0, lenghtA1 - 1)
                randomGayName = a2[randomGay]
                randomGayLastName = a3[randomGay]
                return randomGayName, randomGayLastName

            def getRandomNumber():
                randomNumber = random.randint(0, 100)
                return randomNumber

            def checBadWord():
                for i1 in bad_words:
                    if messageText == i1.lower() or messageText == i1.upper(
                    ) or messageText == i1:
                        return True

            def checkSHS():
                for i2 in SHS:
                    if messageText == i2.lower() or messageText == i2.upper(
                    ) or messageText == i2:
                        return True

            def chechRhythm():
                for i3 in rhythm:
                    if messageText == i3.lower() or messageText == i3.upper(
                    ) or messageText == i3:
                        return True

            def checkCommands():
                for i4 in commands:
                    if messageText == i4.lower() or messageText == i4.upper(
                    ) or messageText == i4:
                        return True

            if checBadWord() == True:
                if event.from_user:
                    vk_session.get_api().messages.send(
                        user_id=int(event.user_id),
                        message='Сам ' + str(event.text).lower() + '\n' +
                        '[ BOT // ' + ' ' + datetime.datetime.today().strftime(
                            "%Y-%m-%d; %H.%M.%S") + ' ]')
                elif event.from_chat:
                    vk_session.get_api().messages.send(
                        chat_id=int(event.chat_id),
                        message='Сам ' + str(event.text).lower() + '\n' +
                        '[ BOT // ' + ' ' + datetime.datetime.today().strftime(
                            "%Y-%m-%d; %H.%M.%S") + ' ]')
            elif checkSHS() == True:
                if event.from_chat:
                    vk_session.get_api().messages.removeChatUser(
                        chat_id=int(event.chat_id), user_id=int(event.user_id))
            elif chechRhythm() == True:
                if event.from_chat:
                    vk_session.get_api().messages.send(
                        chat_id=int(event.chat_id),
                        message=str(rhythm.get(messageText)) + '\n' +
                        '[ BOT // ' + ' ' + datetime.datetime.today().strftime(
                            "%Y-%m-%d; %H.%M.%S") + ' ]')
            elif checkCommands() == True:
                if event.from_chat:
                    commandId = commands.get(messageText)
                    if commandId == 'chooseOneGay()':
                        gayName, gaySurename = chooseOneGay()
                        vk_session.get_api().messages.send(
                            chat_id=int(event.chat_id),
                            message='Я думаю, что пидор: \n' + str(gayName) +
                            ' ' + str(gaySurename) + '\n' + '[ BOT // ' + ' ' +
                            datetime.datetime.today().strftime(
                                "%Y-%m-%d; %H.%M.%S") + ' ]')
                    elif commandId == 'getRandomNumber()':
                        randomNumber = getRandomNumber()
                        vk_session.get_api().messages.send(
                            chat_id=int(event.chat_id),
                            message=str(randomNumber) + '\n' + '[ BOT // ' +
                            ' ' + datetime.datetime.today().strftime(
                                "%Y-%m-%d; %H.%M.%S") + ' ]')
コード例 #30
0
def send_msgs(peers, message):  #Отправить рассылку
    if len(peers) > 100:
        return
    peers2 = []
    for f in range(len(peers)):
        peers2[f] = str(peers[f])
    vk_session.method(
        "messages.send", {
            "user_ids": ",".join(peers2),
            "message": message,
            "random_id": randrange(0, 184467440737095516165, 1)
        })


for event in longpoll.listen():  #Для каждого события
    if event.type == VkEventType.MESSAGE_NEW:  #Если событие - сообщение
        if event.to_me:  #Если сообщение мне
            if event.user_id in bl:  #Если человек в BlackList
                if not bl[event.user_id]:  #Если ему ещё не присылали сообщение
                    send_msg_without_keyboard(
                        event.user_id,
                        "Ошибка, вы находитесь в ЧС, если это ошибка - напишите администратору"
                    )  #Пишу ему сообщение
                    bl[event.user_id] = 1  #Теперь он уже видел сообщение
                    with open(BlackListFile, "w", encoding="UTF-8") as wf:
                        dump(bl, wf)
                continue  #Если человек в ЧС пропускаю обработку команд

            author = get_user(event.user_id)[0]  #Получаю профиль автора
            if allowTranslate:  #Если включен переводчик
コード例 #31
0
def main():
    vk = vk_session.get_api()
    longpoll = VkLongPoll(vk_session)
    upload = VkUpload(vk_session)

    print("Started")

    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
            pprint(event.__dict__)
            print('{}: id{}: "{}"'.format(event.message_id, event.user_id,
                                          event.text))

            if (event.text == ''):
                vk.messages.send(
                    user_id=event.user_id,
                    random_id=get_random_id(),
                    message=
                    'Message text is required. Please enter a name or archive and resend your message.'
                )
                continue

            messages_data = vk_session.method(
                'messages.getById', {'message_ids': set([
                    event.message_id,
                ])})
            pprint(messages_data)
            messages_data = messages_data['items'][0]

            links = get_photos_links(messages_data)
            print(links)
            print("len = ", len(links))

            if (len(links) == 0):
                vk.messages.send(user_id=event.user_id,
                                 random_id=get_random_id(),
                                 message='No photos')
                continue
            muid = str(event.user_id) + str(event.message_id)
            pics_path = os.path.join('data', muid)
            if not os.path.exists(pics_path):
                os.makedirs(pics_path)

            for c, plink in enumerate(links):
                print(c)
                with urllib.request.urlopen(plink) as response, open(
                        os.path.join('data', muid,
                                     str(c) + '.jpg'), 'wb') as out_file:
                    data = response.read()  # a `bytes` object
                    out_file.write(data)

            zip_name = os.path.join('data', str(muid) + ".zip")
            zipf = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
            zipdir(pics_path, zipf)
            zipf.close()

            doc = upload.document_message(doc=zip_name,
                                          title=event.text + str(muid) +
                                          ".zip",
                                          peer_id=event.peer_id)
            doc = doc['doc']
            pprint(doc)
            vk.messages.send(user_id=event.user_id,
                             attachment='doc{}_{}'.format(
                                 doc['owner_id'], doc['id']),
                             random_id=get_random_id(),
                             message='Ok. Done.')

            print('ok')
コード例 #32
0
ファイル: main.py プロジェクト: KerryNuleeb/bot_gmg0.06
def main():
    token = log.get_token()
    vk_session = vk_api.VkApi(token=token)

    session_api = vk_session.get_api()
    longpoll = VkLongPoll(vk_session)
    vk_session.api_version = 5.103

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

    while True:

        for event in longpoll.listen():
            if event.type == VkEventType.MESSAGE_NEW:
                print("Текст сообщения: " + str(event.text))
                print(event.user_id)
                response = event.text.lower()

                if response.find('привет') != -1 and not (event.from_me):
                    send_message(vk_session,
                                 'user_id',
                                 event.user_id,
                                 message='Хай!')
                    # get_audio.get(-210528)
                elif response.find('навали') != -1 and not (event.from_me):
                    attachment = read_audio.read()
                    send_message(
                        vk_session,
                        'user_id',
                        event.user_id,
                        message='Наваливаю! Качает? Чи не? Трэш кал кста',
                        attachment=attachment)
                elif response.find('работать') != -1:
                    attachment = 'photo580559802_457239019'
                    attachment += ',' + read_audio.read()
                    create_post.create(-33731414,
                                       'Я съел админов теперь я тут главный!',
                                       session_api, attachment)
                    send_message(vk_session,
                                 'user_id',
                                 event.user_id,
                                 message='Я насрал в предложку, иди чекни')
                elif response.find('обновить') != -1 and not (event.from_me):
                    f = open('audio.txt', 'w')
                    f.close()
                    get_audio.get(-45919397)
                    get_audio.get(-33731414)
                    get_audio.get(-210528)
                    get_audio.get(-8142)
                    get_audio.get(-53939030)
                    get_audio.get(-2036725)
                    get_audio.get(-151574935)
                    get_audio.get(-172750661)
                    get_audio.get(-2052528)
                    get_audio.get(-40631383)
                    get_audio.get(-146296871)
                    get_audio.get(-149627855)
                    get_audio.get(-138087126)
                    get_audio.get(-8938)
                    get_audio.get(-79514555)
                    get_audio.get(-29309560)
                    get_audio.get(-14100092)
                    get_audio.get(-118857127)
                    get_audio.get(-8514382)
                    send_message(vk_session,
                                 'user_id',
                                 event.user_id,
                                 message='База данных успешно обновлена')

                elif response.find('апаге') != -1 and not (event.from_me):
                    send_message(vk_session,
                                 'user_id',
                                 event.user_id,
                                 message='хуйнаны',
                                 attachment='audio371745470_456292870')
                elif response.find('как дела') != -1 and not (event.from_me):
                    send_message(
                        vk_session,
                        'user_id',
                        event.user_id,
                        message='Нормалек',
                    )
                elif response.find('кто тебя создал') != -1 and not (
                        event.from_me):
                    send_message(vk_session,
                                 'user_id',
                                 event.user_id,
                                 message='https://vk.com/knuleeb')
                elif response.find('пока') != -1 and not (event.from_me):
                    send_message(vk_session,
                                 'user_id',
                                 event.user_id,
                                 message='Бывай')
コード例 #33
0
ファイル: vkbots.py プロジェクト: themasterid/myvkbot
    if response.status_code == 200:
        return response.text
    else:
        return '<ошибка на сервере погоды>'


def write_msg(user_id, message):
    random_id = vk_api.utils.get_random_id()
    vk.method('messages.send', {
        'user_id': user_id,
        'message': message,
        'random_id': random_id
    })


vk = vk_api.VkApi(token=mytoken)
longpoll = VkLongPoll(vk)
for event in longpoll.listen():
    if event.type == VkEventType.MESSAGE_NEW:
        if event.to_me:
            request = event.text
            write_msg(event.user_id, 'Привет :)')
            if request in listkz:
                otvet = 'Погода в городе - ' + request + '\n' + what_weather(
                    request)
            else:
                otvet = 'Пожалуйста введите название крупного города в Казахстане, например, Алматы'
            write_msg(event.user_id, otvet)

bot.polling(none_stop=True)
コード例 #34
0
ファイル: user_messages_bot.py プロジェクト: python273/vk_api
def main():
    session = requests.Session()

    # Авторизация пользователя:
    """
    login, password = '******', 'mypassword'
    vk_session = vk_api.VkApi(login, password)

    try:
        vk_session.auth(token_only=True)
    except vk_api.AuthError as error_msg:
        print(error_msg)
        return
    """

    # Авторизация группы (для групп рекомендуется использовать VkBotLongPoll):
    # при передаче token вызывать vk_session.auth не нужно
    """
    vk_session = vk_api.VkApi(token='токен с доступом к сообщениям и фото')
    """

    vk = vk_session.get_api()

    upload = VkUpload(vk_session)  # Для загрузки изображений
    longpoll = VkLongPoll(vk_session)

    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:
            print('id{}: "{}"'.format(event.user_id, event.text), end=' ')

            response = session.get(
                'http://api.duckduckgo.com/',
                params={
                    'q': event.text,
                    'format': 'json'
                }
            ).json()

            text = response.get('AbstractText')
            image_url = response.get('Image')

            if not text:
                vk.messages.send(
                    user_id=event.user_id,
                    random_id=get_random_id(),
                    message='No results'
                )
                print('no results')
                continue

            attachments = []

            if image_url:
                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(
                user_id=event.user_id,
                attachment=','.join(attachments),
                random_id=get_random_id(),
                message=text
            )
            print('ok')