Исходник БОТ для вашего колледжа

Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,442
Реакции[?]
671
Поинты[?]
30K
Бот предназначался для выдачи расписания, контактов преподавателей и прочей помощи работягам.
Тк я колледж заканчиваю и бот в скором времени уйдет на полки истории, отдаю хомякам на съедение.

Что умеет этот бот:
  • Выдавать расписание занятий на различные дни недели.
  • Выдавать расписание производственных практик.
  • Выдавать время пар (когда перемены).
  • Выдавать контакты преподавателей (почта, номер телефона и тд).
  • Отправлять файлы (задания по разным предметам и прочий полезный контент для группы).
  • Позволяет менять тип клавиатуры (либо inline клавиатура, либо панель команд).
  • Панель администратора (позволяет выполнять какие-либо манипуляции).
Рассмотрим команды поподробнее.
Позволяет выдавать расписание указанный дни недели.
Причем если условно нажать сначала на Понедельник а потом на Вторник, то он изменит последнее сообщение, таким образом минимизируем засорение чата.

У нашего колледжа есть сайт, на котором выкладывается файл с заменами. Для таких случаев в FileNameOnSite.py реализован алгоритм, который ищет название файла по отрывку даты (например: 09 марта 2023, находит Замена на 09 марта 2023 г..docx), если файл был загружен на сайт или он не был скачан ранее, то скачает его в папку Files и начнет парсить таблицу в файле.

Структура таблицы представлена следующим образом:

Парсить начинает со столбца Группа, если находит совпадение тогда начинает парсить саму строку, относительно индекса группы.
Сам парсер docx файла можете улицезреть в файле DocxParser.py
Код, где происходит магия подстановки замен прямиков в расписание и прочее можно увидеть в Lesson.py, объяснять каждую функцию не вижу смысла, больше половины просто не поймут.
Можно сказать просто переменная, которая отправляется. К сожалению, не было времени реализовать ее через SQL по этому имеем что имеем, заполняется только через изменение содержимого переменной через код. Файл - Practice.py
Просто показывает когда начало, когда конец, ничего сверхъестественного тут нет, типичное расписание для типичного колледжа.
По схеме визуального отображение схоже с расписанием, тыкаешь на преподавателя, получаешь его контакты, так же изменяет предыдущее сообщение если оно того же типа.


К сожалению, изменить состав преподавателей и их контактную информацию можно только через код.
Позволяет скачивать файлы с определенных папок.
Имеет интерфейс как у проводника windows, конечно на сколько это можно было реализовать.
Отправляет конкретно файл побайтово, а не кешируя в ссылку, таким образом не получится отправить более или менее объемные файлы.

Активный путь для каждого пользователя хранит в классе, так что учитывайте, любой перезапуск скрипта == слет инфы о активных путях для пользователя, прийдется заново прожимать команду. Естественно отправляется 1 сообщение, а дальше лишь редактируется ботом, получается своеобразный проводник windows. Можно делать сколько хочешь подпапок, на сколько это позволит API, для тек кто не в курсе, API телег не даст сделать callback больше 64 байт, так что имена файлов и папок с большим названием могут парализовать работу данной функции.
Просто позволяем менять тип взаимодействия между командами и клавиатурой.


К слову, данные у кого какой тип взаимодействия с ботом нигде не хранятся, так что если вы добавите какую-либо команду, то потребуется отправить данные на каждого пользователя, а так как основной тип взаимодействия это командное меню, то задумайтесь над этим, либо вырежьте клавиатуру из доступных.
Позволяет выполнять манипуляции над расписанием.

Список команд:
  • /setReducedSchedule -interval -lesson -date | Позволяет задавать сокращенные занятия на определенную дату | Например: /setReducedSchedule -50 -2 -09 марта 2023 - установить сокращенные пары на 09 марта 2023, начиная со 2-ой пары, каждая пара по 50 минут, перемена 10 минут (это поменять можно только в коде, тк мне это не требуется). После повторного вода этой же команда с тем же содержанием она удалиться из базы (если случайно добавили или что-то не верно ввели).
  • /addSchedule -№ -item -point -teacher -date | Позволяет задать специальное занятие на определенный день, старое расписание отображаться на этот день не будет и будет начинаться с первой добавленной командой записи | Например: /addSchedule -1 -Физра -Спортивный зал -Иванов И.И -09 марта 2023, таким образом расписание на 9 марта будет состоять из 1-ой пары, если хотим добавить еще занятий на это же число то просто прописываем ту же команду просто меняя номер и прочие данные, кроме даты. Если повторно прописать те же самый команды то они удалятся и вернется старое расписание из БД.
  • /setSpecialLesson -№ -item -point -teacher -date | Позволяет делать замену на определенный день и пару | Например: /setSpecialLesson -2 -НБ -point -teacher -09 марта 2023 | 9 марта 2-ой пары не будет, если мы ставим НБ то отображаться аудитория, преподаватель и время начала занятия не будут. Повторным вводом команды так же удаляем замену.
  • /setSpecialDay -description -date | Позволяет задать информацию вместо расписания | Например: /setSpecialDay -Не учимся, 8 марта -08 марта 2023.
  • /addSpecialArgForLesson -description | Позволяет добавить метку со звездочкой к каждому дню недели (ниже в скринах будет показан пример).
  • /notification -description | Позволяет отправить уведомление всем пользователям, которые хоть раз писали команды в бота.
  • /switchAPI | Нужна была что бы отключать парсинг файла с сайта.
  • /group | Так как я староста, мне надо было заполнять рапортичку (кого не было на парах).
  • /history | Показывает кто когда пользовался ботом.
Пример установки сокращенного расписания.


Пример установки ручных замен.


Пример установки специального дня.

В общем бот хороший, но надо его хорошенько шлефануть что бы вообще конфетка была.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
здарова ребята
Начинающий
Статус
Оффлайн
Регистрация
19 Апр 2020
Сообщения
274
Реакции[?]
27
Поинты[?]
9K
хорошая работа, очень хорошая
 
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,598
Реакции[?]
880
Поинты[?]
114K
Отличная работа, тоже такого себе написал, но на го
 
Начинающий
Статус
Оффлайн
Регистрация
15 Фев 2023
Сообщения
4
Реакции[?]
0
Поинты[?]
0
в settings.py AdminList = [] вставлять айди админа или токен ?
 
Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,442
Реакции[?]
671
Поинты[?]
30K
Последнее редактирование:
Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,442
Реакции[?]
671
Поинты[?]
30K
сделаешь гайд для дурочков типа меня что куда вставлять ?
Я исправил на UserID, у меня раньше было по chatId, оказывается я переделал.
Если ты про поиск chatId, то в функцию бота проста вставь этот код и вызови ее командой бота.
print(Message.from_user.id)
 
Начинающий
Статус
Оффлайн
Регистрация
15 Фев 2023
Сообщения
4
Реакции[?]
0
Поинты[?]
0
Я исправил на UserID, у меня раньше было по chatId, оказывается я переделал.
Если ты про поиск chatId, то в функцию бота проста вставь этот код и вызови ее командой бота.
print(Message.from_user.id)
я в общем о о боте, для меня как человека не так сильно изучавший питон сложно, что либо понять куда вставлять. пытался вчера запустить бота, ввел токен, чат айди, установил все библиотеки, консоль просто открывается и закрывается мгновенно. консоль - сам bot.py
 
Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,442
Реакции[?]
671
Поинты[?]
30K
я в общем о о боте, для меня как человека не так сильно изучавший питон сложно, что либо понять куда вставлять. пытался вчера запустить бота, ввел токен, чат айди, установил все библиотеки, консоль просто открывается и закрывается мгновенно. консоль - сам bot.py
Ну... Есть папка Logs и в ней будут файлы с ошибками, это как минимум.
Запускай через cmd питоновский файл, а не через питоновский терминал
 
Начинающий
Статус
Оффлайн
Регистрация
10 Мар 2023
Сообщения
3
Реакции[?]
0
Поинты[?]
0
Извини за оффтоп, сидел, тестил, хотел кое че допилить, но походу сломал команду /notification или она не работает?
В консоле только одна ошибка, что она может быть значит?

"File "C:\Users\usedred\Desktop\Telegram_Bot-main\Module\Tool\BotSDK.py", line 42, in getNotificationDescription
return Command[1]
IndexError: list index out of range"
 
Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,442
Реакции[?]
671
Поинты[?]
30K
Извини за оффтоп, сидел, тестил, хотел кое че допилить, но походу сломал команду /notification или она не работает?
В консоле только одна ошибка, что она может быть значит?

"File "C:\Users\usedred\Desktop\Telegram_Bot-main\Module\Tool\BotSDK.py", line 42, in getNotificationDescription
return Command[1]
IndexError: list index out of range"
Ты неправильно команду написал.
Заметь, между - и самим описанием не должно быть пробела
/notification -description
 
Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,442
Реакции[?]
671
Поинты[?]
30K
Начинающий
Статус
Оффлайн
Регистрация
10 Мар 2023
Сообщения
3
Реакции[?]
0
Поинты[?]
0
Я конечно сомневаюсь что это из-за того что у меня 3.9 а у тебя 3.11, но это как раз похоже на поломанную библиотеку
Ибо он не правильно библиотеку загрузил, либо :\ 3.11 немного кривой, ибо у меня тоже изначально на 3.11 работать не хотел.:roflanBuldiga:
 
$$$ INJECTING PRIV9 FOR ROBLOX $$$
Участник
Статус
Оффлайн
Регистрация
9 Июл 2022
Сообщения
851
Реакции[?]
162
Поинты[?]
15K
Бот предназначался для выдачи расписания, контактов преподавателей и прочей помощи мои одногруппникам.
Тк я колледж заканчиваю и бот в скором времени уйдет на полки истории, отдаю хомякам на съедение.

Что умеет этот бот:
  • Выдавать расписание занятий на различные дни недели.
  • Выдавать расписание производственных практик.
  • Выдавать время пар (когда перемены).
  • Выдавать контакты преподавателей (почта, номер телефона и тд).
  • Отправлять файлы (задания по разным предметам и прочий полезный контент для группы).
  • Позволяет менять тип клавиатуры (либо inline клавиатура, либо панель команд).
  • Панель администратора (позволяет выполнять какие-либо манипуляции).
Рассмотрим команды поподробнее.
Позволяет выдавать расписание указанный дни недели.
Причем если условно нажать сначала на Понедельник а потом на Вторник, то он изменит последнее сообщение, таким образом минимизируем засорение чата.

У нашего колледжа есть сайт, на котором выкладывается файл с заменами. Для таких случаев в FileNameOnSite.py реализован алгоритм, который ищет название файла по отрывку даты (например: 09 марта 2023, находит Замена на 09 марта 2023 г..docx), если файл был загружен на сайт или он не был скачан ранее, то скачает его в папку Files и начнет парсить таблицу в файле.

Структура таблицы представлена следующим образом:

Парсить начинает со столбца Группа, если находит совпадение тогда начинает парсить саму строку, относительно индекса группы.
Сам парсер docx файла можете улицезреть в файле DocxParser.py
Код, где происходит магия подстановки замен прямиков в расписание и прочее можно увидеть в Lesson.py, объяснять каждую функцию не вижу смысла, больше половины просто не поймут.
Можно сказать просто переменная, которая отправляется. К сожалению, не было времени реализовать ее через SQL по этому имеем что имеем, заполняется только через изменение содержимого переменной через код. Файл - Practice.py
Просто показывает когда начало, когда конец, ничего сверхъестественного тут нет, типичное расписание для типичного колледжа.
По схеме визуального отображение схоже с расписанием, тыкаешь на преподавателя, получаешь его контакты, так же изменяет предыдущее сообщение если оно того же типа.


К сожалению, изменить состав преподавателей и их контактную информацию можно только через код.
Позволяет скачивать файлы с определенных папок.
Имеет интерфейс как у проводника windows, конечно на сколько это можно было реализовать.
Отправляет конкретно файл побайтово, а не кешируя в ссылку, таким образом не получится отправить более или менее объемные файлы.

Активный путь для каждого пользователя хранит в классе, так что учитывайте, любой перезапуск скрипта == слет инфы о активных путях для пользователя, прийдется заново прожимать команду. Естественно отправляется 1 сообщение, а дальше лишь редактируется ботом, получается своеобразный проводник windows. Можно делать сколько хочешь подпапок, на сколько это позволит API, для тек кто не в курсе, API телег не даст сделать callback больше 64 байт, так что имена файлов и папок с большим названием могут парализовать работу данной функции.
Просто позволяем менять тип взаимодействия между командами и клавиатурой.


К слову, данные у кого какой тип взаимодействия с ботом нигде не хранятся, так что если вы добавите какую-либо команду, то потребуется отправить данные на каждого пользователя, а так как основной тип взаимодействия это командное меню, то задумайтесь над этим, либо вырежьте клавиатуру из доступных.
Позволяет выполнять манипуляции над расписанием.

Список команд:
  • /setReducedSchedule -interval -lesson -date | Позволяет задавать сокращенные занятия на определенную дату | Например: /setReducedSchedule -50 -2 -09 марта 2023 - установить сокращенные пары на 09 марта 2023, начиная со 2-ой пары, каждая пара по 50 минут, перемена 10 минут (это поменять можно только в коде, тк мне это не требуется). После повторного вода этой же команда с тем же содержанием она удалиться из базы (если случайно добавили или что-то не верно ввели).
  • /addSchedule -№ -item -point -teacher -date | Позволяет задать специальное занятие на определенный день, старое расписание отображаться на этот день не будет и будет начинаться с первой добавленной командой записи | Например: /addSchedule -1 -Физра -Спортивный зал -Иванов И.И -09 марта 2023, таким образом расписание на 9 марта будет состоять из 1-ой пары, если хотим добавить еще занятий на это же число то просто прописываем ту же команду просто меняя номер и прочие данные, кроме даты. Если повторно прописать те же самый команды то они удалятся и вернется старое расписание из БД.
  • /setSpecialLesson -№ -item -point -teacher -date | Позволяет делать замену на определенный день и пару | Например: /setSpecialLesson -2 -НБ -point -teacher -09 марта 2023 | 9 марта 2-ой пары не будет, если мы ставим НБ то отображаться аудитория, преподаватель и время начала занятия не будут. Повторным вводом команды так же удаляем замену.
  • /setSpecialDay -description -date | Позволяет задать информацию вместо расписания | Например: /setSpecialDay -Не учимся, 8 марта -08 марта 2023.
  • /addSpecialArgForLesson -description | Позволяет добавить метку со звездочкой к каждому дню недели (ниже в скринах будет показан пример).
  • /notification -description | Позволяет отправить уведомление всем пользователям, которые хоть раз писали команды в бота.
  • /switchAPI | Нужна была что бы отключать парсинг файла с сайта.
  • /group | Так как я староста, мне надо было заполнять рапортичку (кого не было на парах).
  • /history | Показывает кто когда пользовался ботом.
Пример установки сокращенного расписания.


Пример установки ручных замен.


Пример установки специального дня.

В общем бот хороший, но надо его хорошенько шлефануть что бы вообще конфетка была.
Пожалуйста, авторизуйтесь для просмотра ссылки.
бот прикольный
а signature жрачный
 
Сверху Снизу