개발을 본격적으로 시작하고서부터는 아이스크립트로 무언가를 안 만들겠다고 결심하고 현재까지 그 규칙을 깨지 않았습니다만,
공유오피스 라운지에 출퇴근하게 되면서 그 결심이 깨져 버렸습니다. 주로 미스키를 켜두고 있는데 미스키 바깥의 사이트를 따로 파서 입력을 받기에는 작심삼일의 기운이 느껴졌거든요.
아직 테스트 중인 코드입니다만(달이 넘어가 봐야 정상 동작하는 지 알 수 있음), 일단 남겨두도록 하겠습니다.
코드
### {
name: '출퇴근기록'
author: '@hyun1008@peacht.art'
version: 1
description: '출근 및 퇴근 시간을 기록하고 하루에 얼마나 일했는지 세봅니다.'
permissions: ['write:notes']
}
let me = Mk:api('i' {})
let myId = me.id
let myName = me.name
let myUsername = me.username
//---------------------------------------------------GENERAL VARIABLES
// 공개설정
var vis = 'public' // 'public', 'home', 'followers'
// 노트 제목
let noteTitle = `**{myName}의 출퇴근기록장**`
// 자기 인스턴스의 출퇴근 이모지
let gotoworkEmoji = 'ko_go_to_work'
let gohomeEmoji = 'ko_gohome'
let buttons = [['출근', gotoworkEmoji], ['퇴근', gohomeEmoji]]
// 출퇴근 시 할말, {myName}, {myUsername} 등의 변수 사용할 수 있습니다.
let gotoworkString = `출근했습니다! 오늘도 일해봐야징`
let gohomeString = `퇴근합니다!!! 야호!!!!`
// 설정 끝 코드 시작~
//---------------------------------------------------NOTE CREATE FUNCTIONS
@NewNote(txt) {
Mk:api('notes/create' {
visibility: vis,
text: txt
})
}
@NewCWNote(cw, txt) {
Mk:api('notes/create' {
visibility: vis,
cw: cw,
text: txt
})
}
@NewGotoWorkNote() {
var today_str = '0시간 0분'
var month_str = '0시간 0분'
var now = Date:now()
let notes = Mk:api('notes/search', {
query: `#{myUsername}_work_record`,
userId: myId
})
if (notes.len > 0) {
if (Date:day(Date:parse(notes[0].createdAt)) == Date:day(now)) {
today_str = notes[0].text.split('오늘 일한 시간: ')[1].split(Str:lf)[0]
}
if (Date:month(Date:parse(notes[0].createdAt)) == Date:month(now)) {
month_str = notes[0].text.split('이번 달 일한 시간: ')[1].split(Str:lf)[0]
}
}
if (notes.len == 0 || (notes.len > 0 && notes[0].text.incl(gohomeEmoji))) {
Mk:api('notes/create' {
visibility: vis,
text: `{noteTitle}{Str:lf}{Str:lf}$[x2 :{gotoworkEmoji}:]{Str:lf}{Str:lf}{gotoworkString}{Str:lf}오늘 일한 시간: {today_str}{Str:lf}이번 달 일한 시간: {month_str}{Str:lf}{Str:lf}#{myUsername}_work_record`
})
} else {
Mk:dialog('출근하기' '오늘은 이미 출근했습니다.')
}
}
@NewGoHomeNote() {
var today_str = '0시간 0분'
var month_str = '0시간 0분'
var now = Date:now()
var add_value = 0
var rest_time = '0분'
let notes = Mk:api('notes/search', {
query: `#{myUsername}_work_record`,
userId: myId
})
if (notes.len > 0) {
add_value = now - Date:parse(notes[0].createdAt)
add_value = add_value - Math:floor(add_value / 16200000)*1800000
rest_time = `{Math:floor(add_value / 16200000) * 30}분`
if (Date:day(Date:parse(notes[0].createdAt)) == Date:day(now)) {
today_str = notes[0].text.split('오늘 일한 시간: ')[1].split(Str:lf)[0]
}
if (Date:month(Date:parse(notes[0].createdAt)) == Date:month(now)) {
month_str = notes[0].text.split('이번 달 일한 시간: ')[1].split(Str:lf)[0]
}
}
let today_ms = today_str.split('시간 ')[0].to_num()*3600000+today_str.split('시간 ')[1].split('분')[0].to_num()*60000 + add_value
let today_hour = Math:floor(today_ms / 3600000)
let today_min = Math:floor((today_ms - today_hour*3600000) / 60000)
let month_ms = month_str.split('시간 ')[0].to_num()*3600000+month_str.split('시간 ')[1].split('분')[0].to_num()*60000 + add_value
let month_hour = Math:floor(month_ms / 3600000)
let month_min = Math:floor((month_ms - month_hour*3600000) / 60000)
if (notes.len == 0 || (notes.len > 0 && notes[0].text.incl(gotoworkEmoji))) {
Mk:api('notes/create' {
visibility: vis,
text: `{noteTitle}{Str:lf}{Str:lf}$[x2 :{gohomeEmoji}:]{Str:lf}{Str:lf}{gohomeString}{Str:lf}오늘 일한 시간: {today_hour}시간 {today_min}분{Str:lf}이번 달 일한 시간: {month_hour}시간 {month_min}분{Str:lf}휴게 시간: {rest_time}{Str:lf}{Str:lf}#{myUsername}_work_record`
})
} else {
Mk:dialog('퇴근하기' '오늘은 이미 퇴근했습니다.')
}
}
//---------------------------------------------------BUTTONS
let newButtons = [{
text: buttons[0][0]
onClick: @() {NewGotoWorkNote()}
}, {
text: buttons[1][0]
onClick: @() {NewGoHomeNote()}
}]
//---------------------------------------------------ELEMENTS
var uiEl = [
Ui:C:container({
align: 'center',
children: [
Ui:C:mfm({
text: `{noteTitle}`
})
Ui:C:buttons({
buttons: newButtons
})
]
})
]
Ui:render(uiEl)