Skip to content

Commit

Permalink
жесткий апгрейд до 1.5
Browse files Browse the repository at this point in the history
  • Loading branch information
Kofirs2634 committed Apr 18, 2024
1 parent 0295191 commit 779bd47
Show file tree
Hide file tree
Showing 21 changed files with 1,645 additions and 1,757 deletions.
12 changes: 8 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
# зависимости
node_modules/
node_modules

# тесты разработки
tests/
tests

# конфиденциальные данные
data/
files/
data
files
CONFIG.yaml

# мак генерит забавные вещи
.DS_Store
*/.DS_Store
28 changes: 16 additions & 12 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
# Список изменений
## v1.5.0
*Выпущена 8 сентября 2023 года*
* Добавлена возможность подписаться на рассылку расписания, которая будет происходить каждый день, кроме пятницы, субботы и праздников, в 8 часов вечера. Расписание берется из журнала.
* В меню настройки рассылок теперь можно попасть по команде `/notifs`.

## v1.4.0
*Выпущена 25 ноября 2022 года*
* Новая функция — "Автоотмечалка".
* Будучи активной, автоотмечалка отслеживает дистанционные пары и автоматически заходит на них.
* Чтобы подключить автоотмечалку, нужно предоставить боту логин и пароль от портала, которые будут определенным образом зашифрованы.
* После посещения дистанционных пар бот пришлет уведомление с отчетом. Его отключить нельзя, терпите. 😊
* В одноименном меню на главной клавиатуре можно воспользоваться "Ручным обходом", который сможет закрыть огрехи автоотмечалки, если они случатся.
* Будучи активной, автоотмечалка отслеживает дистанционные пары и автоматически заходит на них.
* Чтобы подключить автоотмечалку, нужно предоставить боту логин и пароль от портала, которые будут определенным образом зашифрованы.
* После посещения дистанционных пар бот пришлет уведомление с отчетом. Его отключить нельзя, терпите. 😊
* В одноименном меню на главной клавиатуре можно воспользоваться "Ручным обходом", который сможет закрыть огрехи автоотмечалки, если они случатся.
* Кнопка проверки статуса заменена "Автоотмечалкой", а сама функция переехала в команду `/status`.
* Со стороны неочевидно, в рабочие функции бота теперь тщательно задокументированы. Также изменены импорты.
* Конфиденциальные данные вынесены из кода в отдельный файл.
Expand All @@ -21,22 +26,21 @@
* По просьбам трудящихся в список дней рождения в качестве маркеров добавлены знаки зодиака.
* На клавиатуре месяцев декабрь перенесен в начало, чтобы ликвидировать сдвиг сезонов. Опять же по просьбам трудящихся.
* Произошли большие изменения в главном меню.
* Раздел "Оценки" расформирован, пункты из него пересены в "Журнал".
* Настройки уведомлений собраны из разных разделов под единую кнопку "Уведомления". Теперь управлять ими стало проще.
* Раздел "Оценки" расформирован, пункты из него пересены в "Журнал".
* Настройки уведомлений собраны из разных разделов под единую кнопку "Уведомления". Теперь управлять ими стало проще.

## v1.2.0
*Выпущена 15 октября 2022 года*
* Специально для одного человека добавлена админ-панель, из которой можно делать рассылку.
* "История версий" убрана, а ссылка на просмотр чейнджлога добавлена в "Справку". Там же теперь показывается текущая версия бота.
* Переделан раздел "Журнал".
* Убраны кнопки "Профиль" и "Успеваемость", которые все равно никто не использовал. "Бот ККМТ LIVE" отправился туда же, потому что в Telegram-версии ссылка на него не имеет смысла.
* Все ссылки на страницы Портала сложены в кнопку "Ссылки".
* Теперь можно просмотреть названия и статистику последних пяти публикаций на Портале и по ссылкам перейти к чтению.
* Данные профиля теперь можно обновить с помощью соответствующей кнопки.
* Раздел "Дистант" теперь отвечает за показ дистанционных пар (если они есть) и рассылку соответствующих напоминаний.
* Убраны кнопки "Профиль" и "Успеваемость", которые все равно никто не использовал. "Бот ККМТ LIVE" отправился туда же, потому что в Telegram-версии ссылка на него не имеет смысла.
* Все ссылки на страницы Портала сложены в кнопку "Ссылки".
* Теперь можно просмотреть названия и статистику последних пяти публикаций на Портале и по ссылкам перейти к чтению.
* Данные профиля теперь можно обновить с помощью соответствующей кнопки.
* Раздел "Дистант" теперь отвечает за показ дистанционных пар (если они есть) и рассылку соответствующих напоминаний.
* "Чек статуса" переименован в "Статус".


## v1.1.3
*Выпущена 14 октября 2022 года*
* В отчете по пропускам теперь показывается место в группе.
Expand Down
1 change: 0 additions & 1 deletion data/cookie.txt

This file was deleted.

9 changes: 0 additions & 9 deletions data/files.json

This file was deleted.

14 changes: 0 additions & 14 deletions data/linked.json

This file was deleted.

25 changes: 0 additions & 25 deletions data/marks.json

This file was deleted.

10 changes: 0 additions & 10 deletions data/notifs.json

This file was deleted.

8 changes: 0 additions & 8 deletions data/subjects.json

This file was deleted.

3 changes: 0 additions & 3 deletions data/user_scenes.json

This file was deleted.

24 changes: 12 additions & 12 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@ import * as Recurrent from './modules/Recurrent.js'
import * as Static from './modules/Static.js'

;(async function() {
if (Static.DEV_MODE) Util.warn('DEV MODE is enabled')
if (Static.DEV_MODE) Util.warn('DEV MODE is enabled')

await Journal.checkMasterCookie().catch(err => Util.error('Failed to check cookie in main function:', err))
await Journal.checkMasterCookie().catch(err => Util.error('Failed to check cookie in main function:', err))

Api.listenUpdates()
Api.listenUpdates()

setInterval(() => {
Recurrent.birthdaySpectator()
Recurrent.heartbeat()
}, 60000)
setInterval(() => {
Recurrent.journalSpectator()
Recurrent.provisionSpectator()
//Recurrent.filePurger()
}, 10 * 60000)
setInterval(() => {
Recurrent.birthdaySpectator()
Recurrent.scheduleSpectator()
Recurrent.heartbeat()
}, 60000)
setInterval(() => {
Recurrent.journalSpectator()
Recurrent.provisionSpectator()
}, 10 * 60000)
})();
104 changes: 52 additions & 52 deletions modules/Api.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,67 +9,67 @@ const TOKEN = Util.getConfig('API_TOKEN')
let OFFSET = 0

export function query(method, data) {
return new Promise(async (res, rej) => {
const request = await fetch(`https://api.telegram.org/bot${TOKEN}/${method}`, {
method: 'post',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify(data)
}).catch(err => { Util.error('Request failed due to network reasons:', err) })
if (!request) return rej('network failure')
const response = await request.json()
if (!response.ok) return rej(response)
res(response)
})
return new Promise(async (res, rej) => {
const request = await fetch(`https://api.telegram.org/bot${TOKEN}/${method}`, {
method: 'post',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify(data)
}).catch(err => { Util.error('Request failed due to network reasons:', err) })
if (!request) return rej('network failure')
const response = await request.json()
if (!response.ok) return rej(response)
res(response)
})
}

/**
* Рекурсивная функция для отслеживания новых сообщений
* @returns {Promise<never>}
*/
export async function listenUpdates() {
Util.log('Listening...')
const data = await query('getUpdates', {
timeout: 50,
allowed_updates: ['message'],
offset: OFFSET
}).catch(err => Util.error('Failed to fetch updates:', err))
if (typeof data === 'undefined') {
Util.log('Updates request failed (undefined value), trying to return to recursion')
return listenUpdates()
}
if (!data) {
Util.log('Updates request failed (falsy value), trying to return to recursion')
return listenUpdates()
}
Util.log('Listening...')
const data = await query('getUpdates', {
timeout: 50,
allowed_updates: ['message'],
offset: OFFSET
}).catch(err => Util.error('Failed to fetch updates:', err))
if (typeof data === 'undefined') {
Util.log('Updates request failed (undefined value), trying to return to recursion')
return listenUpdates()
}
if (!data) {
Util.log('Updates request failed (falsy value), trying to return to recursion')
return listenUpdates()
}

data.result.forEach(update => {
const { update_id, message } = update
OFFSET = update_id + 1
data.result.forEach(update => {
const { update_id, message } = update
OFFSET = update_id + 1

const { text, from } = message
let scene = Scenes.get(from.id)
if (Static.DEV_MODE && ![403241596, 5799729218].includes(from.id)) {
Util.warn(`Ignored message #${message.message_id} from @${from.username} (ID ${from.id}): "${text}"`)
Handlers.sendDevWarn(from.id, true)
return
}
Util.log(`Got message #${message.message_id} from @${from.username} (ID ${from.id}): "${scene === 'autovisit_await' ? '[ДАННЫЕ УДАЛЕНЫ]' : text}"`)
Stats.updateStat('got_messages', '++')
try {
for (const handler in Handlers) {
if (typeof Handlers[handler] !== 'function') continue
Handlers[handler](text, from, scene)
if (handler == '_returnButton') scene = Scenes.get(from.id)
}
} catch (err) {
Util.error(`Caught an error while handling message:`, err)
Stats.updateStat('caught_errors', '++')
}
})
const { text, from } = message
let scene = Scenes.get(from.id)
if (Static.DEV_MODE && ![403241596, 5799729218].includes(from.id)) {
Util.warn(`Ignored message #${message.message_id} from @${from.username} (ID ${from.id}): "${text}"`)
Handlers.sendDevWarn(from.id, true)
return
}
Util.log(`Got message #${message.message_id} from @${from.username} (ID ${from.id}): "${scene === 'autovisit_await' ? '[ДАННЫЕ УДАЛЕНЫ]' : text}"`)
Stats.updateStat('got_messages', '++')
try {
for (const handler in Handlers) {
if (typeof Handlers[handler] !== 'function') continue
Handlers[handler](text, from, scene)
if (handler == '_returnButton') scene = Scenes.get(from.id)
}
} catch (err) {
Util.error(`Caught an error while handling message:`, err)
Stats.updateStat('caught_errors', '++')
}
})

Stats.updateStat('last_update', Date.now())
Stats.updateStat('last_update', Date.now())

return listenUpdates()
return listenUpdates()
}
Loading

0 comments on commit 779bd47

Please sign in to comment.