Exemplo n.º 1
0
    def __init__(self, event):
        self.req, self.rec, self.hwc, self.hwa = False, False, False, False
        self.Vk = Vk()
        self.Users = UserBase()
        self.Settings = SettingsBase()
        self.Schedules = ScheduleBase()
        self.UserLogger = GetCustomLogger(
            'UserLogger', f'userlogs/{event.obj.message["peer_id"]}')
        self.UserLogger.info(
            f'info:\n'
            f'now - {pendulum.now()}\n'
            f'today - {GetTodayDate()}\n'
            f'tomorrow_schedule - {GetScheduleTomorrow(pendulum.tomorrow(TZ))}\n'
            f'schedule_date - {GetScheduleDate()}')
        if not SettingsBase().GetSettings()['offline']:
            if event.obj.message['text']:
                self.Message(event)
            else:
                self.NoText(event)
        else:
            self.Vk.MessageSend(event.obj.message['peer_id'], Answers.OFFLINE)

        self.Users.IncreaseParameters(event.obj.message['peer_id'],
                                      requests=self.req,
                                      received=self.rec,
                                      hw_check=self.hwc,
                                      hw_add=self.hwa)
Exemplo n.º 2
0
 def __init__(self, event):
     try:
         Vk().ConsoleMessage(
             f'✏ Коммент от @id{event.obj["from_id"]}({" ".join(list(Vk().UserNameGet(event.obj["from_id"])))}):\n{event.obj["text"]}'
         )
     except:
         pass
Exemplo n.º 3
0
def ClassSend(cls, date):
    ids = UserBase().DistributeClassUsers(cls)
    for i in ids:
        UserBase().IncreaseParameters(i, received=True, messages_received=True)
    msg = f'Держи расписание на {date}!'
    schedule = GetSchedule(date, cls)
    if schedule:
        Vk().ManyMessagesSend(ids, msg, attachment=schedule)
Exemplo n.º 4
0
def MainBot():
    Logger.info(f'Бот запущен! Версия: {Config.VERSION}')
    Logger.info('Старт прослушивания сервера!')
    print('LongPooling started!')
    Vk.ConsoleMessage(
        f'Бот запущен на платформе {platform}\nТекущая версия: {Config.VERSION}\nВремя: {pendulum.now()}'
    )
    Utilities.INIT_TIME = pendulum.now(TZ)

    while True:
        if not Config.DEBUGGING:
            try:
                for event in Vk.LongPool.listen():
                    try:
                        EventLogger.info(
                            f'from: {event.obj.message["peer_id"]}; text: {event.obj.message["text"]};\n{event.obj.message}'
                        )
                    except Exception as e:
                        ExceptionLogger.warning(f'Exception {e} caused')
                    if event.type == VkBotEventType.MESSAGE_NEW:
                        try:
                            NewMessage(event)
                        except Exception as e:
                            print(e)
                            Vk.ConsoleMessage(
                                f'Ошибка: {e} caused by {event.obj.message}')
                            Logger.warning('Exception!')
                            ExceptionLogger.warning(
                                f'Exception {e} caused by {event.obj.message}')
                    elif event.type == VkBotEventType.MESSAGE_DENY:
                        MessagesDeny(event)
                    elif event.type == VkBotEventType.GROUP_JOIN:
                        MemberJoin(event)
                    elif event.type == VkBotEventType.GROUP_LEAVE:
                        MemberLeave(event)
                    elif event.type == VkBotEventType.WALL_REPLY_NEW:
                        Comment(event)
            except requests.exceptions.ReadTimeout:
                Vk.ConsoleMessage('LongPool перезапущен!')
                Logger.warning('LongPool is restarted')
                ExceptionLogger.warning('LongPool is restarted')
        else:
            for event in Vk.LongPool.listen():
                print(event)
                if event.type == VkBotEventType.MESSAGE_NEW:
                    NewMessage(event)
Exemplo n.º 5
0
def Parser():
    # NOT_TODO: автодобавление/удаление расписаний
    print('Parsing started!')
    Logger.info('Запущен процесс парсинга')
    PB = ParseBase()
    while True:
        try:
            Report = 'Наличие расписаний на сайте:\n'
            if PB.GetParseSchedules() and PB.CheckParseTime():
                PB.SetParseTime()
                for i in sorted(PB.GetParseSchedules()):
                    if CheckAvailabilityOnSite(i):
                        ParseLogger.info(f'Распсиание на {i} доступно')
                        Report += f'{i} - ✅\n'
                    else:
                        ParseLogger.info(f'Распсиание на {i} не доступно')
                        Report += f'{i} - ⛔\n'
                if Report:
                    Vk().ConsoleMessage(Report)
                    Vk().ManyMessagesSend(UserBase().TrackList(), Report)
            sleep(Config.PARSE_INTERVAL)
        except:
            print('Parse are failed')
            sleep(20)
Exemplo n.º 6
0
def AutoUpdater():
    print('AutoUpdating started!')
    Logger = GetNewMainLogger('Updater')
    UpdateLogger = GetCustomLogger('UpdateLogger', 'UpdateLog')
    Logger.info('Запущено авто-обновление')
    while True:
        schedule_date = GetScheduleDate(pendulum.now())
        Update = UpdateSchedule(schedule_date)
        try:
            Vk().SetOnline()
        except vk_api.exceptions.ApiError:
            pass
        try:
            if Update.CheckClassesUpdate() or Update.CheckMainUpdates():
                if SettingsBase().GetSettings()['auto_update']:
                    ScheduleBase().UpdateSchedule(schedule_date)
                    UpdateLogger.info(
                        f'Обновление расписания на {schedule_date}')
                    print(f'Update to {schedule_date}')
                    Update.UpdateAll()
            sleep(910)
        except:
            print('Update are failed')
            sleep(30)
Exemplo n.º 7
0
import requests
import vk_api
from vk_api.bot_longpoll import VkBotEventType
import pendulum

from bot.Api import Vk
from bot.events.Events import MessagesDeny, MemberLeave, MemberJoin, Comment
from bot.messages.NewMessage import NewMessage
from bot.schedule.DisrtibuteSchedule import AutoDistribution
from bot.schedule.Updater import AutoUpdater
from bot.stuff.Config import Config as Config
from bot.stuff.Logging import GetMainLogger, GetCustomLogger
from bot.stuff import Utilities
from bot.stuff.Utilities import TZ

Vk = Vk()
Logger = GetMainLogger()
EventLogger = GetCustomLogger('EventLog', 'EventLog')
ExceptionLogger = GetCustomLogger('Exception', 'ExceptionLog')


def MainBot():
    Logger.info(f'Бот запущен! Версия: {Config.VERSION}')
    Logger.info('Старт прослушивания сервера!')
    print('LongPooling started!')
    Vk.ConsoleMessage(
        f'Бот запущен на платформе {platform}\nТекущая версия: {Config.VERSION}\nВремя: {pendulum.now()}'
    )
    Utilities.INIT_TIME = pendulum.now(TZ)

    while True:
Exemplo n.º 8
0
def UploadSchedule(path_to_schedule, date, cls):
    SB = ScheduleBase()
    SB.NewSchedule(date)
    VK = Vk()
    attachment = VK.UploadAttachmentPhoto(path_to_schedule)
    SB.UploadedClass(date, cls, attachment)
Exemplo n.º 9
0
class User:
    def __init__(self, event):
        self.req, self.rec, self.hwc, self.hwa = False, False, False, False
        self.Vk = Vk()
        self.Users = UserBase()
        self.Settings = SettingsBase()
        self.Schedules = ScheduleBase()
        self.UserLogger = GetCustomLogger(
            'UserLogger', f'userlogs/{event.obj.message["peer_id"]}')
        self.UserLogger.info(
            f'info:\n'
            f'now - {pendulum.now()}\n'
            f'today - {GetTodayDate()}\n'
            f'tomorrow_schedule - {GetScheduleTomorrow(pendulum.tomorrow(TZ))}\n'
            f'schedule_date - {GetScheduleDate()}')
        if not SettingsBase().GetSettings()['offline']:
            if event.obj.message['text']:
                self.Message(event)
            else:
                self.NoText(event)
        else:
            self.Vk.MessageSend(event.obj.message['peer_id'], Answers.OFFLINE)

        self.Users.IncreaseParameters(event.obj.message['peer_id'],
                                      requests=self.req,
                                      received=self.rec,
                                      hw_check=self.hwc,
                                      hw_add=self.hwa)

    def NoText(self, event):
        pass

    def Message(self, event):
        user_id = event.obj.message['peer_id']
        message = event.obj.message['text']
        self.Vk.SetActivity(user_id)

        if message == 'raise':
            raise ValueError
        if message == 'beginning':
            self.Users.SetUserParameters(user_id, state=0)
            self.Vk.MessageSend(user_id,
                                'Главное меню',
                                keyboard=Keyboard.StayHomeKeyboard())

        if (not self.Users.CheckUserInBase(user_id)) or (
                self.Users.GetUserState(user_id) in [1, 2]):
            self.UserRegister(event)
        elif self.Users.GetUserState(user_id) == 3:
            self.UserSettings(user_id, message)
        elif self.Users.GetUserState(user_id) == 4:
            user_info = self.Users.GetUserInfo(user_id)
            if message.lower() == 'показать дз':
                self.hwc = True
                self.UserLogger.info(f'Запрос на ДЗ')
                user_class = user_info["cls"]
                homework_date = user_info["homework_date"].replace(
                    "today", GetTodayDate())
                homework = HomeworkBase().GetHomework(homework_date,
                                                      user_class)
                self.Vk.MessageSend(
                    user_id,
                    f'Домашнее задание {user_class} класса на {homework_date}:\n'
                    + homework)
            elif message.lower() == 'добавить дз':
                self.UserLogger.info(f'Режим добавления ДЗ')
                self.Vk.MessageSend(
                    user_id,
                    'Введи домашнее задание или нажми кнопку "Отмена"\nВнимание! Рядом с домашним заданием будет отображаться ссылка на твой профиль!',
                    keyboard=Keyboard.DenyKeyboard())
                self.Users.SetUserParameters(user_id, state=6)
            elif message.lower() == 'указать дату':
                self.UserLogger.info(f'Режим выбора даты ДЗ')
                self.Vk.MessageSend(
                    user_id, 'Введи дату, чтобы посмотреть домашнее задание')
                self.Users.SetUserParameters(user_id, state=5)
            elif message.lower() == 'пожаловаться':
                self.UserLogger.info(f'Отправлена жалоба на расписание')
                user_class = user_info["cls"]
                homework_date = user_info["homework_date"].replace(
                    "today", GetTodayDate())
                homework = HomeworkBase().GetHomework(homework_date,
                                                      user_class)
                self.Vk.ConsoleMessage(
                    f'Жалоба от @id{user_id}({user_info["name"]} {user_info["last"]}) на ДЗ {user_class} класса на {homework_date}:\n{homework}'
                )
                self.Vk.MessageSend(user_id, 'Жалоба отправлена!')
            else:
                self.Users.SetUserParameters(user_id, state=0, hw_date='today')
                self.Vk.MessageSend(user_id,
                                    'Главное меню',
                                    keyboard=Keyboard.MenuKeyboard())
        elif self.Users.GetUserState(user_id) == 5:
            date = DialogFlow().SendRequest(message)
            if 'system' in date:
                y, m, d = list(
                    map(int,
                        date.lstrip('system user_class').split('-')))
                hw_date = pendulum.date(y, m, d).__format__(Utilities.FORMAT)
                self.Users.SetUserParameters(user_id, state=4, hw_date=hw_date)
                self.Vk.MessageSend(user_id, f'Установлена дата {hw_date}')
            else:
                self.Users.SetUserParameters(user_id, state=4)
                self.Vk.MessageSend(user_id, 'Дата указана неверно!')
        elif self.Users.GetUserState(user_id) == 6:
            user_info = self.Users.GetUserInfo(user_id)
            lexics = DialogFlow().SendRequest(message)
            if lexics.lower() == 'мат':
                self.Vk.ConsoleMessage(
                    f'@id{user_id}({user_info["name"]}) пытается добавить ДЗ:\n{message}'
                )
                self.Vk.MessageSend(
                    user_id,
                    'Возможно, домашнее задание содержит ненормативную лексику! Я не могу его добавить',
                    keyboard=Keyboard.HomeworkKeyboard())
            else:
                if message.lower() != 'отмена':
                    self.hwa = True
                    self.UserLogger.info(
                        f'Добавлено домашнее задание на {user_info["homework_date"].replace("today", GetTodayDate())}'
                    )
                    HomeworkBase().AddHomework(
                        user_info["homework_date"].replace(
                            "today",
                            GetTodayDate()), user_info["cls"], message +
                        f' - (@id{user_id}({user_info["name"][0]}{user_info["last"][0]}))\n'
                    )
                    self.Vk.MessageSend(user_id,
                                        'Домашнее задание добавлено!',
                                        keyboard=Keyboard.HomeworkKeyboard())
                    self.Vk.ConsoleMessage(
                        f'@id{user_id}({user_info["name"]}) добавил ДЗ:\n{message}'
                    )
                else:
                    self.Vk.MessageSend(user_id,
                                        'Окей, отмена',
                                        keyboard=Keyboard.HomeworkKeyboard())
            self.Users.SetUserParameters(user_id, state=4)
        elif self.Users.GetUserState(user_id) == 0:
            self.MainMenu(event)

    def MainMenu(self, event):
        user_id = event.obj.message['peer_id']
        message = event.obj.message['text']
        user_info = self.Users.GetUserInfo(user_id)
        if message.lower() == 'онлайн на сегодня':
            self.req = True
            self.UserLogger.info(f'Запрошено онлайн распсиание на сегодня')
            cls = user_info['cls']
            date = GetTodayDate()

            if ScheduleBase().GetReplace(date):
                cls = 'main'

            schedule = GetSchedule(date, cls)
            if schedule:
                self.rec = True
                self.UserLogger.info(f'Расписание отправлено')
                self.Vk.MessageSend(user_id,
                                    Answers.GIVE_TODAY_ONLINE,
                                    attachment=schedule)
            else:
                self.UserLogger.info(f'Расписание не отправлено')
                self.Vk.MessageSend(user_id, Answers.TODAY_NONE)
        elif message.lower() == 'онлайн на завтра':
            self.req = True
            self.UserLogger.info(f'Запрошено онлайн распсиание на завтра')
            cls = user_info['cls']
            date = GetScheduleTomorrow(pendulum.tomorrow(TZ))

            if ScheduleBase().GetReplace(date):
                cls = 'main'
            schedule = GetSchedule(date, cls)
            if schedule:
                self.rec = True
                self.UserLogger.info(f'Расписание отправлено')
                if pendulum.today(tz=Utilities.TZ).weekday() == 5:
                    self.Vk.MessageSend(user_id,
                                        Answers.GIVE_MONDAY,
                                        attachment=schedule)
                else:
                    self.Vk.MessageSend(user_id,
                                        Answers.GIVE_TOMORROW_ONLINE,
                                        attachment=schedule)
            else:
                self.UserLogger.info(f'Расписание не отправлено')
                self.Vk.MessageSend(user_id, Answers.TOMORROW_NONE)

        elif message.lower() == 'на сегодня':
            self.req = True
            self.UserLogger.info(f'Запрошено распсиание на сегодня')
            cls = user_info['cls']
            date = GetTodayDate()

            if ScheduleBase().GetReplace(date):
                cls = 'main'

            schedule = GetSchedule(date, cls, static=True)
            if schedule:
                self.rec = True
                self.UserLogger.info(f'Расписание отправлено')
                self.Vk.MessageSend(user_id,
                                    Answers.GIVE_TODAY,
                                    attachment=schedule)
            else:
                self.UserLogger.info(f'Расписание не отправлено')
                self.Vk.MessageSend(user_id, Answers.TODAY_NONE)
        elif message.lower() == 'на завтра':
            self.req = True
            self.UserLogger.info(f'Запрошено распсиание на завтра')
            cls = user_info['cls']
            date = GetScheduleTomorrow(pendulum.tomorrow(TZ))

            if ScheduleBase().GetReplace(date):
                cls = 'main'
            schedule = GetSchedule(date, cls, static=True)
            if schedule:
                self.rec = True
                self.UserLogger.info(f'Расписание отправлено')
                if pendulum.today(tz=Utilities.TZ).weekday() == 5:
                    self.Vk.MessageSend(user_id,
                                        Answers.GIVE_MONDAY,
                                        attachment=schedule)
                else:
                    self.Vk.MessageSend(user_id,
                                        Answers.GIVE_TOMORROW,
                                        attachment=schedule)
            else:
                self.UserLogger.info(f'Расписание не отправлено')
                self.Vk.MessageSend(user_id, Answers.TOMORROW_NONE)
        elif message.lower() == 'общее на сегодня':
            self.req = True
            self.UserLogger.info(f'Запрошено общее распсиание на сегодня')
            cls = 'main'
            date = GetTodayDate()
            schedule = GetSchedule(date, cls)
            if schedule:
                self.rec = True
                self.UserLogger.info(f'Расписание отправлено')
                self.Vk.MessageSend(user_id,
                                    Answers.GIVE_TODAY,
                                    attachment=schedule)
            else:
                self.UserLogger.info(f'Расписание не отправлено')
                self.Vk.MessageSend(user_id, Answers.TODAY_NONE)
        elif message.lower() == 'общее на завтра':
            self.req = True
            self.UserLogger.info(f'Запрошено общее распсиание на завтра')
            cls = 'main'
            date = GetScheduleTomorrow(pendulum.tomorrow(TZ))

            schedule = GetSchedule(date, cls)
            if schedule:
                self.rec = True
                self.UserLogger.info(f'Расписание отправлено')
                if pendulum.today(tz=Utilities.TZ).weekday() == 5:
                    self.Vk.MessageSend(user_id,
                                        Answers.GIVE_MONDAY,
                                        attachment=schedule)
                else:
                    self.Vk.MessageSend(user_id,
                                        Answers.GIVE_TOMORROW,
                                        attachment=schedule)
            else:
                self.UserLogger.info(f'Расписание не отправлено')
                self.Vk.MessageSend(user_id, Answers.TOMORROW_NONE)
        elif message.lower(
        ) == 'гд':  # ToDo: Сделать DialogFlow, либо изменить вид, выглядит так себе
            self.Vk.MessageSend(
                user_id,
                f'Гугл-Диск {self.Users.GetUserInfo(user_id)["cls"]} класса:\n'
                + Utilities.GD[self.Users.GetUserInfo(user_id)['cls']] +
                f'\n\nОбщий Гугл-диск:\n' + Utilities.GD['main'])
        elif message.lower() == 'звонки':
            self.req = True
            self.rec = True
            self.UserLogger.info(f'Запрос звонков')
            self.Vk.MessageSend(
                user_id,
                message=f'Держи расписание звонков на {GetScheduleDate()}',
                attachment=GetRings(GetScheduleDate()))
        elif message.lower() == 'дз':
            self.UserLogger.info(f'Вход в дневник')
            if self.Settings.GetSettings()['diary']:
                self.Users.SetUserParameters(user_id, state=4)
                self.Vk.MessageSend(user_id,
                                    'Дневник (?)',
                                    keyboard=Keyboard.HomeworkKeyboard())
            else:
                self.Vk.MessageSend(user_id,
                                    'Прости, но дневник сейчас не работает 😥')
        elif message.lower() == 'настройки':
            self.UserLogger.info(f'Вход в настройки')
            self.Users.SetUserParameters(user_id, state=3)
            self.Vk.MessageSend(user_id,
                                'Меню настроек',
                                keyboard=Keyboard.SettingsKeyboard(
                                    self.Users.GetUserInfo(user_id)))
        elif message.lower()[:4] == 'инфо':
            info, date, cls = DialogFlow().SendRequest(message).split()
            date = Utilities.GetFormat(date)
            self.UserLogger.info(
                f'Запрошена информация о расписании на {date}')
            self.Vk.MessageSend(user_id, ScheduleInfo(date, cls))
        else:
            answer = DialogFlow().SendRequest(message)
            if 'system' in answer:
                self.req = True
                answer = answer.replace('today', GetTodayDate())
                cls, date = answer.upper().split()[1:]
                date = Utilities.GetFormat(date)
                if ScheduleBase().GetReplace(date):
                    cls = 'main'
                schedule = GetSchedule(
                    date,
                    cls.replace('ОБЩЕЕ',
                                'main').replace('USER_CLASS',
                                                user_info['cls']))
                self.UserLogger.info(f'Запрошено распсиание на {date}')
                if schedule:
                    self.rec = True
                    self.UserLogger.info(f'Расписание отправлено')
                    self.Vk.MessageSend(user_id,
                                        f'Держи расписание на {date}',
                                        attachment=schedule)
                else:
                    self.UserLogger.info(f'Распсиание не найдено')
                    self.Vk.MessageSend(
                        user_id,
                        f'Прости, но расписания на {date} нигде нет\nИспользуй команду "Инфо <дата>" для подробностей'
                    )
            elif 'homework' in answer and False:
                date = Utilities.GetFormat(
                    answer.replace('today',
                                   GetTodayDate()).replace('homework ', ''))
                self.UserLogger.info(f'Запрошено ДЗ на {date}')
                self.Vk.MessageSend(
                    user_id,
                    f'Домашнее задание {user_info["cls"]} класса на {date}:\n'
                    + HomeworkBase().GetHomework(date, user_info["cls"]))
            elif answer == 'мат':
                # TODO: Поработать над обработкой intents
                pass
            elif answer in 'Рад быть полезным 😉 Всегда к вашим услугам 🙂 Пожалуйста! Обращайся еще 🤗 С любовью, ScheduleFlow 🥰 Стараюсь для вас! 😀 Всегда пожалуйста 😉':
                self.Vk.MessageSend(user_id, answer)

    def UserRegister(self, event):
        user_id = event.obj.message['peer_id']
        message = event.obj.message['text']
        if not self.Users.CheckUserInBase(user_id):
            self.UserLogger.info('Новый юзер!')
            name, last = self.Vk.UserNameGet(user_id)
            self.Vk.MessageSend(
                user_id,
                f'Привет, {name}!\nДавай настроим бота под тебя. Для начала выбери класс',
                keyboard=Keyboard.ChooseClassNum())
            self.Users.AddNewUser(user_id, name, last)
            self.Users.SetUserParameters(user_id, state=1)

        elif self.Users.GetUserState(user_id) == 1:
            if message in '5 6 7 8 9 10 11':
                self.UserLogger.info(f'Выбран {message} класс')
                self.Users.SetUserParameters(user_id,
                                             state=2,
                                             cls_num=int(message))
                class_num = self.Users.GetUserInfo(user_id)['cls_num']
                g_class = class_num in [5, 10, 11]
                self.Vk.MessageSend(
                    user_id,
                    f'Отлично! Теперь выбери букву класса',
                    keyboard=Keyboard.ChooseClassLetter(g_class))

        elif self.Users.GetUserState(user_id) == 2:
            class_num = self.Users.GetUserInfo(user_id)['cls_num']
            g_class = class_num in [5, 10, 11]
            if ((message.lower() in 'абв') and
                (not g_class)) or ((message.lower() in 'абвг') and g_class):
                self.UserLogger.info(f'Установлен {class_num}{message} класс')
                self.Users.SetUserParameters(user_id, state=0, cls_lit=message)
                self.Vk.MessageSend(
                    user_id,
                    f'Замечательно! Выбран {self.Users.GetUserInfo(user_id)["cls"]} класс! Ты всегда можешь изменить свой класс в настройках!',
                    keyboard=Keyboard.MenuKeyboard())
                self.Vk.ConsoleMessage(
                    f'✅ Новый юзер: @id{user_id}({self.Users.GetUserInfo(user_id)["name"]} {self.Users.GetUserInfo(user_id)["last"]}) - {self.Users.GetUserInfo(user_id)["cls"]} класс'
                )

    def UserSettings(self, user_id, message):
        if message.lower() == 'сменить класс':
            self.UserLogger.info('Запущена процедура смены класса')
            self.Users.SetUserParameters(user_id, state=1)
            self.Vk.MessageSend(user_id,
                                'Выбери номер класса',
                                keyboard=Keyboard.ChooseClassNum())

        elif message.lower() == 'вкл 7:00':
            self.Users.SetUserParameters(user_id, n_7=0)
            self.Vk.MessageSend(user_id,
                                'Рассылка расписания на 7:00 отключена!',
                                keyboard=Keyboard.SettingsKeyboard(
                                    self.Users.GetUserInfo(user_id)))
        elif message.lower() == 'выкл 7:00':
            self.Users.SetUserParameters(user_id, n_7=1)
            self.Vk.MessageSend(user_id,
                                'Рассылка расписания на 7:00 включена!',
                                keyboard=Keyboard.SettingsKeyboard(
                                    self.Users.GetUserInfo(user_id)))

        elif message.lower() == 'вкл 13:00':
            self.Users.SetUserParameters(user_id, n_13=0)
            self.Vk.MessageSend(user_id,
                                'Рассылка расписания на 13:00 отключена!',
                                keyboard=Keyboard.SettingsKeyboard(
                                    self.Users.GetUserInfo(user_id)))
        elif message.lower() == 'выкл 13:00':
            self.Users.SetUserParameters(user_id, n_13=1)
            self.Vk.MessageSend(user_id,
                                'Рассылка расписания на 13:00 включена!',
                                keyboard=Keyboard.SettingsKeyboard(
                                    self.Users.GetUserInfo(user_id)))

        elif message.lower() == 'вкл 17:00':
            self.Users.SetUserParameters(user_id, n_17=0)
            self.Vk.MessageSend(user_id,
                                'Рассылка расписания на 17:00 отключена!',
                                keyboard=Keyboard.SettingsKeyboard(
                                    self.Users.GetUserInfo(user_id)))
        elif message.lower() == 'выкл 17:00':
            self.Users.SetUserParameters(user_id, n_17=1)
            self.Vk.MessageSend(user_id,
                                'Рассылка расписания на 17:00 включена!',
                                keyboard=Keyboard.SettingsKeyboard(
                                    self.Users.GetUserInfo(user_id)))

        elif message.lower() == 'вкл 20:00':
            self.Users.SetUserParameters(user_id, n_20=0)
            self.Vk.MessageSend(user_id,
                                'Рассылка расписания на 20:00 отключена!',
                                keyboard=Keyboard.SettingsKeyboard(
                                    self.Users.GetUserInfo(user_id)))
        elif message.lower() == 'выкл 20:00':
            self.Users.SetUserParameters(user_id, n_20=1)
            self.Vk.MessageSend(user_id,
                                'Рассылка расписания на 20:00 включена!',
                                keyboard=Keyboard.SettingsKeyboard(
                                    self.Users.GetUserInfo(user_id)))

        elif message.lower() == 'вкл 23:00':
            self.Users.SetUserParameters(user_id, n_23=0)
            self.Vk.MessageSend(user_id,
                                'Рассылка расписания на 23:00 отключена!',
                                keyboard=Keyboard.SettingsKeyboard(
                                    self.Users.GetUserInfo(user_id)))
        elif message.lower() == 'выкл 23:00':
            self.Users.SetUserParameters(user_id, n_23=1)
            self.Vk.MessageSend(user_id,
                                'Рассылка расписания на 23:00 включена!',
                                keyboard=Keyboard.SettingsKeyboard(
                                    self.Users.GetUserInfo(user_id)))

        elif message.lower() == 'назад':
            self.UserLogger.info('Выход из меню настроек')
            self.Users.SetUserParameters(user_id, state=0)
            self.Vk.MessageSend(user_id,
                                'Главное меню',
                                keyboard=Keyboard.MenuKeyboard())
Exemplo n.º 10
0
 def __init__(self, event):
     user_id = event.obj['user_id']
     Vk().ConsoleMessage(
         f'🐔 Подписчик пропал...!\n@id{user_id}({" ".join(list(Vk().UserNameGet(user_id)))}) покинул нас...'
     )
Exemplo n.º 11
0
 def __init__(self, event):
     user_id = event.obj['user_id']
     Vk().ConsoleMessage(
         f'🔔 Новый подписчик!\n@id{user_id}({" ".join(list(Vk().UserNameGet(user_id)))}) присоединился к нам!'
     )
Exemplo n.º 12
0
 def __init__(self, event):
     UserBase().DeleteUser(event.obj["user_id"])
     Vk().ConsoleMessage(
         f'⛔ @id{event.obj["user_id"]}({" ".join(list(Vk().UserNameGet(event.obj["user_id"])))}) запретил сообщения и был удален из базы!'
     )
Exemplo n.º 13
0
    def __init__(self, event):
        self.Vk = Vk()
        self.ConsoleBase = ConsoleBase()
        self.SettingsBase = SettingsBase()
        self.UserBase = UserBase()
        self.Settings = Settings()
        if event.obj.message['text']:
            Logger.info(
                f'{event.obj.message["from_id"]} - {event.obj.message["text"]}'
            )
            self.originalText = event.obj.message['text']
            lowerText = event.obj.message['text'].lower()

            if lowerText == 'setstat':
                self.ConsoleBase.ChangeState(0)
                self.Vk.MessageSend(Config.CONSOLE,
                                    'Меню',
                                    keyboard=MainMenu())
            if lowerText == 'raiseexc':
                raise ValueError
            if lowerText == 'params':
                self.Vk.ConsoleMessage(
                    f'now - {pendulum.now()}\n'
                    f'today - {GetTodayDate()}\n'
                    f'tomorrow_schedule - {GetScheduleTomorrow(pendulum.tomorrow(TZ))}'
                )

            if self.ConsoleBase.GetState() == 0:
                self.CommandHandler(lowerText)
            elif self.ConsoleBase.GetState() == 1:
                self.SettingsHandler(lowerText.replace('@', ''))
            elif self.ConsoleBase.GetState() == 2:
                self.ConsoleBase.ChangeState(0)
                if lowerText == 'да, выполнить':
                    if ConsoleTemp.Distribute == 'all':
                        all_ids = self.UserBase.AllUsers()
                        SendProcess = Process(target=SendManyUsers,
                                              args=(all_ids, ConsoleTemp.Text))
                        SendProcess.start()
                        Logger.info('Запущена общая рассылка')
                        self.Vk.ConsoleMessage('Рассылка запущена!')
                    elif ConsoleTemp.Distribute.upper(
                    ) in bot.stuff.Utilities.CLASSES:
                        ids = self.UserBase.DistributeClassUsers(
                            ConsoleTemp.Distribute.upper())
                        SendProcess = Process(target=SendManyUsers,
                                              args=(ids, ConsoleTemp.Text))
                        SendProcess.start()
                        Logger.info(
                            f'Запущена рассылка по {ConsoleTemp.Distribute.upper()} классу'
                        )
                        self.Vk.ConsoleMessage('Рассылка запущена!')
                    elif ConsoleTemp.Distribute in '5 6 7 8 9 10 11':
                        ids = self.UserBase.DistributeParallelUsers(
                            int(ConsoleTemp.Distribute))
                        SendProcess = Process(target=SendManyUsers,
                                              args=(ids, ConsoleTemp.Text))
                        SendProcess.start()
                        Logger.info(
                            f'Запущена рассылка по {ConsoleTemp.Distribute} параллели'
                        )
                        self.Vk.ConsoleMessage('Рассылка запущена!')
            elif self.ConsoleBase.GetState() == 3:
                self.ConsoleBase.ChangeState(0)
                if lowerText == 'да, выполнить':
                    if GetSchedule(ConsoleTemp.Date, 'main'):
                        send_process = Process(target=SendAllClasses,
                                               args=(ConsoleTemp.Date, ))
                        send_process.start()
                        self.Vk.ConsoleMessage(
                            f'Рассылка расписания на {ConsoleTemp.Date} запущена!'
                        )
                    else:
                        self.Vk.ConsoleMessage(
                            f'Расписание на {ConsoleTemp.Date} не найдено!\nРассылка отменена!'
                        )
                else:
                    self.Vk.ConsoleMessage(f'Рассылка отменена!')
Exemplo n.º 14
0
class Console:
    def __init__(self, event):
        self.Vk = Vk()
        self.ConsoleBase = ConsoleBase()
        self.SettingsBase = SettingsBase()
        self.UserBase = UserBase()
        self.Settings = Settings()
        if event.obj.message['text']:
            Logger.info(
                f'{event.obj.message["from_id"]} - {event.obj.message["text"]}'
            )
            self.originalText = event.obj.message['text']
            lowerText = event.obj.message['text'].lower()

            if lowerText == 'setstat':
                self.ConsoleBase.ChangeState(0)
                self.Vk.MessageSend(Config.CONSOLE,
                                    'Меню',
                                    keyboard=MainMenu())
            if lowerText == 'raiseexc':
                raise ValueError
            if lowerText == 'params':
                self.Vk.ConsoleMessage(
                    f'now - {pendulum.now()}\n'
                    f'today - {GetTodayDate()}\n'
                    f'tomorrow_schedule - {GetScheduleTomorrow(pendulum.tomorrow(TZ))}'
                )

            if self.ConsoleBase.GetState() == 0:
                self.CommandHandler(lowerText)
            elif self.ConsoleBase.GetState() == 1:
                self.SettingsHandler(lowerText.replace('@', ''))
            elif self.ConsoleBase.GetState() == 2:
                self.ConsoleBase.ChangeState(0)
                if lowerText == 'да, выполнить':
                    if ConsoleTemp.Distribute == 'all':
                        all_ids = self.UserBase.AllUsers()
                        SendProcess = Process(target=SendManyUsers,
                                              args=(all_ids, ConsoleTemp.Text))
                        SendProcess.start()
                        Logger.info('Запущена общая рассылка')
                        self.Vk.ConsoleMessage('Рассылка запущена!')
                    elif ConsoleTemp.Distribute.upper(
                    ) in bot.stuff.Utilities.CLASSES:
                        ids = self.UserBase.DistributeClassUsers(
                            ConsoleTemp.Distribute.upper())
                        SendProcess = Process(target=SendManyUsers,
                                              args=(ids, ConsoleTemp.Text))
                        SendProcess.start()
                        Logger.info(
                            f'Запущена рассылка по {ConsoleTemp.Distribute.upper()} классу'
                        )
                        self.Vk.ConsoleMessage('Рассылка запущена!')
                    elif ConsoleTemp.Distribute in '5 6 7 8 9 10 11':
                        ids = self.UserBase.DistributeParallelUsers(
                            int(ConsoleTemp.Distribute))
                        SendProcess = Process(target=SendManyUsers,
                                              args=(ids, ConsoleTemp.Text))
                        SendProcess.start()
                        Logger.info(
                            f'Запущена рассылка по {ConsoleTemp.Distribute} параллели'
                        )
                        self.Vk.ConsoleMessage('Рассылка запущена!')
            elif self.ConsoleBase.GetState() == 3:
                self.ConsoleBase.ChangeState(0)
                if lowerText == 'да, выполнить':
                    if GetSchedule(ConsoleTemp.Date, 'main'):
                        send_process = Process(target=SendAllClasses,
                                               args=(ConsoleTemp.Date, ))
                        send_process.start()
                        self.Vk.ConsoleMessage(
                            f'Рассылка расписания на {ConsoleTemp.Date} запущена!'
                        )
                    else:
                        self.Vk.ConsoleMessage(
                            f'Расписание на {ConsoleTemp.Date} не найдено!\nРассылка отменена!'
                        )
                else:
                    self.Vk.ConsoleMessage(f'Рассылка отменена!')

    def CommandHandler(self, message: str):
        if message.replace('@', '') == Config.PREFIX + 'настройки':
            self.Vk.MessageSend(Config.CONSOLE,
                                keyboard=Settings(),
                                message='Меню настроек')
            self.ConsoleBase.ChangeState(1)
        elif 'статистика' in message.lower():
            self.Vk.ConsoleMessage(ScheduleFlowInfo())
        elif 'обновить на сегодня' in message.lower():
            date = GetTodayDate()
            self.ScheduleUpdate(date)
        elif 'обновить на завтра' in message.lower():
            date = GetScheduleTomorrow(pendulum.tomorrow(TZ))
            self.ScheduleUpdate(date)
        elif message.replace('@', '') == Config.PREFIX + 'проверить наличие':
            self.Vk.ConsoleMessage(ParseFast())
        elif message[:11] == 'обновить на':
            date_arg = DialogFlow().SendRequest(message).lstrip('update')
            year, month, day = list(map(int, date_arg.split('-')))
            date = pendulum.date(year, month, day).__format__(Utilities.FORMAT)
            self.ScheduleUpdate(date)
        elif message[:14] == 'общая рассылка':
            ConsoleTemp.Distribute = 'all'
            ConsoleTemp.Text = message[15:]
            self.Vk.ConsoleMessage(Distribution())
            self.ConsoleBase.ChangeState(2)
        elif message[:18] == 'рассылка по классу':
            ConsoleTemp.Distribute = message[19:].split(' ')[0]
            ConsoleTemp.Text = ' '.join(
                message[19:].split(' ')[1:]).capitalize()
            self.Vk.ConsoleMessage(Distribution())
            self.ConsoleBase.ChangeState(2)
        elif message[:21] == 'рассылка по параллели':
            ConsoleTemp.Distribute = message[22:].split(' ')[0]
            ConsoleTemp.Text = ' '.join(
                message[12:].split(' ')[1:]).capitalize()
            self.Vk.ConsoleMessage(Distribution())
            self.ConsoleBase.ChangeState(2)
        elif message[:19] == 'рассылка расписания':
            if '_' not in message:
                date = GetScheduleTomorrow(pendulum.tomorrow(TZ))
            else:
                date = message.lstrip('рассылка расписания_')

            if GetSchedule(date, '11А'):
                ConsoleTemp.Date = date
                self.ConsoleBase.ChangeState(3)
                self.Vk.ConsoleMessage(
                    f'Введите "Да, выполнить" для подтверждения рассылки расписания на {date}'
                )
                self.Vk.MessageSend(Config.CONSOLE,
                                    'Расписание:',
                                    attachment=GetSchedule(date, '11А'))
            else:
                self.Vk.ConsoleMessage(f'Расписания на {date} нет!')
        elif message[:4] == 'инфо':
            if message[5:].replace(' ', '').isdigit():
                uid = int(message[5:].replace(' ', ''))
                info = self.UserBase.GetUserInfo(uid)
                self.Vk.ConsoleMessage(UserInfo(info))
            else:
                name, last = self.originalText[5:].split(' ')
                info = self.UserBase.GetUserInfoByName(name, last)
                self.Vk.ConsoleMessage(UserInfo(info))
        elif message[:6] == 'замена':
            replace_date = message[7:].replace('общим на ', '')
            ScheduleBase().Replace(replace_date)
            self.Vk.ConsoleMessage(
                f'Замена общим на {replace_date} активирована!')
        elif message[:13] == 'отмена замены':
            replace_date = message[14:].lstrip('общим на ')
            ScheduleBase().UnReplace(replace_date)
            ScheduleBase().DeleteSchedule(replace_date)
            self.Vk.ConsoleMessage(f'Замена общим на {replace_date} отменена!')
        elif 'не отслеживать' in message.lower():
            date = message.lower().lstrip('не отслеживать')
            ParseBase().DeleteFromParse(date)
            self.Vk.ConsoleMessage(f'Расписание на {date} не отслеживается')
        elif 'отслеживать' in message.lower():
            date = message.lower().lstrip('отслеживать ')
            ParseBase().AddToParse(date)
            self.Vk.ConsoleMessage(f'Отслеживается расписание на {date}')
        elif 'список отслеживания' in message.lower():
            self.Vk.ConsoleMessage(
                'Список отслеживаемых расписаний:\n' +
                '\n'.join(sorted(ParseBase().GetParseSchedules())))
        elif 'удалить дз' in message.lower():
            cls, date = message.lower().lstrip('удалить дз').upper().replace(
                ',', '').split(' ')
            HomeworkBase().DeleteHomework(date, cls)
            self.Vk.ConsoleMessage('ДЗ удалено!')
        elif 'редирект' in message.lower():
            date = message.lstrip('редирект на')
            if date != 'сброс':
                Config.REDIRECT_DATE = date
            else:
                Config.REDIRECT_DATE = 0
        elif 'sql' in message:
            self.Vk.ConsoleMessage(f'{self.UserBase.SQL(message[4:])}')

    def ScheduleUpdate(self, date):
        self.Vk.ConsoleMessage(f'Обновление расписания на {date}')
        answer = UpdateSchedule(date).UpdateAll()
        if answer:
            Logger.info(f'Обновлено расписание на {date}')
            self.Vk.ConsoleMessage('Расписание обновлено!')
        else:
            Logger.info(f'Расписание на {date} не обновлено')
            self.Vk.ConsoleMessage('Расписание не найдено!')

    def SettingsHandler(self, message: str):
        if message == Config.PREFIX + 'выход':
            self.Vk.MessageSend(Config.CONSOLE,
                                keyboard=MainMenu(),
                                message='Основное меню')
            self.ConsoleBase.ChangeState(0)
            return None

        elif message == Config.PREFIX + 'онлайн' and not self.SettingsBase.GetSettings(
        )['offline']:
            self.SettingsBase.ChangeSettings(parameters={'offline': 1})
            Logger.info('Включен онлайн бота')
        elif message == Config.PREFIX + 'оффлайн' and self.SettingsBase.GetSettings(
        )['offline']:
            self.SettingsBase.ChangeSettings(parameters={'offline': 0})
            Logger.info('Выключен онлайн бота')

        elif message == Config.PREFIX + 'рассылка вкл' and self.SettingsBase.GetSettings(
        )['auto_distribution']:
            self.SettingsBase.ChangeSettings(
                parameters={'auto_distribution': 0})
            Logger.info('Авто-рассылка включена')
        elif message == Config.PREFIX + 'рассылка выкл' and not self.SettingsBase.GetSettings(
        )['auto_distribution']:
            self.SettingsBase.ChangeSettings(
                parameters={'auto_distribution': 1})
            Logger.info('Авто-рассылка выключена')

        elif message == Config.PREFIX + 'обновление вкл' and self.SettingsBase.GetSettings(
        )['auto_update']:
            self.SettingsBase.ChangeSettings(parameters={'auto_update': 0})
            Logger.info('Авто-обновление включено')
        elif message == Config.PREFIX + 'обновление выкл' and not self.SettingsBase.GetSettings(
        )['auto_update']:
            self.SettingsBase.ChangeSettings(parameters={'auto_update': 1})
            Logger.info('Авто-обновление выключено')

        elif message == Config.PREFIX + 'замена общим вкл' and self.SettingsBase.GetSettings(
        )['main_replace']:
            self.SettingsBase.ChangeSettings(parameters={'main_replace': 0})
            ScheduleBase().Replace(GetScheduleDate())
            Logger.info('Замена общим включена')
        elif message == Config.PREFIX + 'замена общим выкл' and not self.SettingsBase.GetSettings(
        )['main_replace']:
            self.SettingsBase.ChangeSettings(parameters={'main_replace': 1})
            ScheduleBase().UnReplace(GetScheduleDate())
            Logger.info('Замена общим выключена')

        elif message == Config.PREFIX + 'дневник вкл' and self.SettingsBase.GetSettings(
        )['diary']:
            self.SettingsBase.ChangeSettings(parameters={'diary': 0})
            Logger.info('Дневник включен')
        elif message == Config.PREFIX + 'дневник выкл' and not self.SettingsBase.GetSettings(
        )['diary']:
            self.SettingsBase.ChangeSettings(parameters={'diary': 1})
            Logger.info('Дневник выключен')

        elif message == Config.PREFIX + 'сброс':
            self.SettingsBase.ChangeSettings(
                parameters={
                    'auto_update': 1,
                    'main_replace': 0,
                    'offline': 0,
                    'diary': 0,
                    'auto_distribution': 0
                })

        self.Vk.MessageSend(Config.CONSOLE,
                            keyboard=Settings(),
                            message='Меню настроек')
Exemplo n.º 15
0
def SendManyUsers(user_ids, message):
    Vk().ManyMessagesSend(user_ids, message)