개발을 본격적으로 시작하고서부터는 아이스크립트로 무언가를 안 만들겠다고 결심하고 현재까지 그 규칙을 깨지 않았습니다만,

공유오피스 라운지에 출퇴근하게 되면서 그 결심이 깨져 버렸습니다. 주로 미스키를 켜두고 있는데 미스키 바깥의 사이트를 따로 파서 입력을 받기에는 작심삼일의 기운이 느껴졌거든요.

아직 테스트 중인 코드입니다만(달이 넘어가 봐야 정상 동작하는 지 알 수 있음), 일단 남겨두도록 하겠습니다.

코드

### {
	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)