This page is only available in Korean for now.

Session

Kotlin
object Session

앱 전체에서 하나뿐인 관리자 객체들을 모아 둔 곳이에요.

속성형식설명
projectManagerProjectManager프로젝트 목록과 이벤트 호출을 관리해요.
pluginManagerPluginManager불러온 플러그인을 관리해요.
apiManagerApiManager등록된 스크립트 API 목록이에요. getApis()
languageManagerLanguageManager등록된 스크립트 언어를 관리해요.
widgetManagerWidgetManager등록된 홈 위젯을 관리해요.
isInitCompleteBoolean앱 초기화가 끝났는지 알려 줘요.
jsonJson앱이 쓰는 kotlinx.serialization 설정이에요(ignoreUnknownKeys, isLenient).

projectManager와 apiManager는 앱이 초기화된 뒤에 준비돼요. 플러그인의 onEnable()이 호출될 때는 이미 쓸 수 있어요.

PluginManager

멤버설명
plugins: Set<StarlightPlugin>불러온 플러그인 목록이에요.
getPluginById(id) / getPluginByName(name)플러그인을 찾아요. 없으면 null이에요.
getPlugin<T>()클래스로 플러그인을 찾아요.
isPluginEnabled(id)플러그인이 켜져 있는지 알려 줘요.

다른 플러그인과 협력할 때 쓸 수 있어요. 이때는 starlight.json의 dependency에 그 플러그인을 적어 먼저 불러오게 하세요.

ProjectManager

메서드설명
getProjects(): List<Project>모든 프로젝트예요.
getEnabledProjects(): List<Project>켜진 프로젝트만 돌려줘요.
getProjectByName(name, ignoreCase = false): Project?이름으로 찾아요.
getProjectById(id: String): Project?UUID 문자열로 찾아요.
fireEvent<T : ProjectEvent>(vararg args, onFailure)이벤트를 받을 수 있는 모든 프로젝트의 함수를 호출해요. 플러그인 안에서는 fireProjectEvent<T>()와 같아요.

Project

Kotlin
abstract class Project : CoroutineScope, ProjectLifecycleOwner

속성

속성형식설명
infoProjectInfo프로젝트 정보예요(아래 참고).
directoryFile프로젝트 폴더예요.
configMutableConfig프로젝트 폴더에 저장되는 프로젝트 전용 설정이에요.
loggerProjectLogger프로젝트 로그예요. 앱의 프로젝트 로그 화면에 보여요.
isCompiledBoolean컴파일되어 스코프가 있는지 알려 줘요.
threadPoolNameString?스크립트가 실행되는 스레드 풀 이름이에요.

메서드

메서드설명
callFunction(name, args, onException = {})스크립트의 함수를 호출해요. 스크립트 오류는 onException으로 전달돼요.
isEventCallAllowed(eventId): Boolean프로젝트가 그 프로젝트 이벤트를 허용했는지 알려 줘요.
compile(throwException = false): Boolean다시 컴파일해요. 이전 스코프는 정리돼요.
compileAsync(): Flow<Pair<PipelineStage<*, *>, Int>>컴파일 단계와 진행률을 흘려보내며 컴파일해요.
setEnabled(enabled): Boolean프로젝트를 켜거나 꺼요.
getDataDirectory(): File데이터베이스, 사용자 데이터 같은 파일을 저장할 폴더예요.
getLanguage(): Language프로젝트의 스크립트 언어예요.
getScope(): Any?컴파일된 스코프예요. 컴파일 전이면 null이에요.
activeJobs(): Int / queuedEvents(): Int실행 중인 작업 수와 대기 중인 이벤트 수예요. queuedEvents()는 PluginCore 1.0.0 이상이에요.
stopAllJobs()실행 중인 작업을 모두 취소해요.
destroy(requestUpdate = false)작업을 취소하고 스코프를 정리해요.
requestUpdate()앱에 프로젝트 화면 갱신을 요청해요. 앱이 백그라운드면 무시돼요.
saveInfo() / loadInfo()info를 파일에 저장하거나 파일에서 다시 읽어요.
rename(name, preserveMainScript = false)이름을 바꿔요. preserveMainScript가 false면 메인 스크립트 파일 이름도 바꿔요.

한 프로젝트에 이벤트 보내기

Kotlin
inline fun <reified T : ProjectEvent> Project.fireEvent(
    vararg args: Any,
    noinline onFailure: (e: Throwable) -> Unit = {},
): Boolean

프로젝트가 그 이벤트를 허용하지 않으면 false를 돌려줘요. 자세한 내용은 프로젝트 이벤트를 참고하세요.

ProjectInfo

속성형식설명
idProjectID (UUID)프로젝트 ID예요.
nameString이름이에요.
mainScriptString메인 스크립트 파일 이름이에요.
languageIdString스크립트 언어 ID예요.
isEnabledBoolean켜져 있는지 알려 줘요.
isPinnedBoolean목록 위에 고정됐는지 알려 줘요.
createdMillisLong만든 시각이에요.
allowedEventIdsMutableSet<String>허용한 프로젝트 이벤트 ID예요. 기본값은 starlight.*이고 와일드카드를 쓸 수 있어요.
packagesMutableSet<String>메시지를 받을 메신저 앱 패키지예요. 기본값은 com.kakao.talk이에요.

프로젝트 로그

project.logger(ProjectLogger)에 남긴 로그는 그 프로젝트의 로그 화면에 보여요. 플러그인이 프로젝트를 대신해 처리한 일(오류 등)을 사용자에게 알릴 때 좋아요.

Kotlin
project.logger.info("WebServer", "GET /hello 200")
project.logger.error("WebServer", "핸들러에서 오류가 발생했어요: ${e.message}")

verbose/v, debug/d, info/i, warn/w, error/e, wtf가 있고, 각각 (message)와 (tag, message) 형태로 쓸 수 있어요.

프로젝트 생명주기

project.getLifecycle()로 프로젝트의 생명주기를 관찰할 수 있어요.

ProjectLifecycle.State의미
COMPILING컴파일 중이에요.
ENABLED켜져 있어요.
DISABLED꺼져 있어요(컴파일이 끝난 직후 포함).
DESTROYED정리됐어요.
Kotlin
project.getLifecycle().registerObserver(object : ProjectLifecycleObserver.ExplicitObserver {
    override fun onCompileEnd(project: Project) { /* … */ }
    override fun onDestroy(project: Project) { /* … */ }
})

상태만 받고 싶다면 ProjectLifecycleObserver.StateObserver { project, state -> }를 쓰고, 특정 상태 동안만 코드를 실행하려면 whileInState(state) { project -> }를 써요. 관찰을 멈출 때는 unregisterObserver()를 호출하세요.