Skip to content

Instantly share code, notes, and snippets.

@ltlapy
Created May 11, 2025 02:04
Show Gist options
  • Save ltlapy/13a4ca263b887dc4a776777395131240 to your computer and use it in GitHub Desktop.
Save ltlapy/13a4ca263b887dc4a776777395131240 to your computer and use it in GitHub Desktop.
특정 유저가 지정한 시점 이후에 삭제한 커스텀 이모지 덤프
// 특정 유저가 지정한 시점 이후에 삭제한 커스텀 이모지 복구
// !! 사용 전 API 리밋 해제
let userId = 'a4ap7lwhjy'
let timeAfter_timestamp = '2025-05-05T09:00:00.000Z'
var lastLogId = "ffffffffffffffffffffff" // 특정 id 이전의 편집 로그부터 살피려면 사용
// ---
var emojis = []
let timeAfter = Date:parse(timeAfter_timestamp)
<: `{userId} 가 삭제한 이모지를 {timeAfter_timestamp} 까지 탐색합니다...`
loop {
let res = Mk:api('admin/show-moderation-logs', {
limit: 100,
type: "deleteCustomEmoji",
untilId: lastLogId
})
if (res.len == 0) {
<: '모든 로그를 탐색하였습니다.'
}
var breakFlag = false
each(let log, res) {
if (Date:parse(log.createdAt) < timeAfter) {
<: `기간 내의 탐색이 완료되었습니다. {log.id}({log.createdAt}) 부터 처리하지 않습니다.`
breakFlag = true
break
} else {
let emoji = log.info.emoji
<: `({emoji.id}) {emoji.category} : {emoji.name}`
emojis.push(emoji)
}
}
if (breakFlag) break
lastLogId = res.at(-1).id
}
<: `총 {emojis.len} 개의 이모지를 발견하였습니다.`
//<: '복구를 시작합니다...'
// each(let emoji, emojis) {
// Mk:api('admin/emoji/add', {
// name: emoji.name,
// // TODO: modlog에서 fileId를 제공하지 않음.
// // admin/drive/show-file 를 이용하여 파일 ID를 추출할 수는 있으나,
// // 호출 속도가 느림
// fileId: ,
// category: emoji.category,
// aliases: emoji.aliases,
// license: emoji.license,
// isSensitive: emoji.isSensitive,
// localOnly: emoji.localOnly,
// requestedBy: emoji.requestedBy,
// memo: emoji.memo,
// roleIdsThatCanBeUsedThisEmojiAsReaction: emoji.roleIdsThatCanBeUsedThisEmojiAsReaction,
// roleIdsThatCanNotBeUsedThisEmojiAsReaction: emoji. roleIdsThatCanNotBeUsedThisEmojiAsReaction
// })
// }
Json:stringify(emojis)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment