Skip to content
/ soop Public

라이브 스트리밍 서비스 숲(soop)의 비공식 API 라이브러리

License

Notifications You must be signed in to change notification settings

maro5397/soop

Repository files navigation

soop

npm version npm downloads license

createAt language

라이브 스트리밍 서비스 숲(soop)의 비공식 API 라이브러리

라이브 스트리밍 서비스 SOOP의 비공식 API 라이브러리입니다.

현재 구현된 기능은 다음과 같습니다.

  • 방송 상태 및 상세 정보 조회
  • 채팅

설치

Node 20.17.0 버전에서 개발되었습니다.

npm install soop-extension

예시

const streamerId = "cotton1217"
const client = new SoopClient();

// 라이브 세부정보
const liveDetail = await client.live.detail(streamerId);
console.log(liveDetail)

// 채널 정보
const stationInfo = await client.channel.station(streamerId);
console.log(stationInfo)

const soopChat = client.chat({
    streamerId: streamerId
})

// 연결 성공
soopChat.on('connect', response => {
    console.log(`[${response.receivedTime}] Connected to ${response.streamerId}`)
})

// 채팅방 입장
soopChat.on('enterChatRoom', response => {
    console.log(`[${response.receivedTime}] Enter to ${response.streamerId}'s chat room`)
})

// 채팅방 공지
soopChat.on('notification', response => {
    console.log('-'.repeat(50))
    console.log(`[${response.receivedTime}]`)
    console.log(response.notification.replace(/\r\n/g, '\n'))
    console.log('-'.repeat(50))
})

// 일반 채팅
soopChat.on('chat', response => {
    console.log(`[${response.receivedTime}] ${response.username}(${response.userId}): ${response.comment}`)
})

// 이모티콘 채팅
soopChat.on('emoticon', response => {
    console.log(`[${response.receivedTime}] ${response.username}(${response.userId}): ${response.emoticonId}`)
})

// 텍스트/음성 후원 채팅
soopChat.on('textDonation', response => {
    console.log(`\n[${response.receivedTime}] ${response.fromUsername}(${response.from})님이 ${response.to}님에게 ${response.amount}개 후원`)
    if (Number(response.fanClubOrdinal) !== 0) {
        console.log(`[${response.receivedTime}] ${response.fanClubOrdinal}번째 팬클럽 가입을 환영합니다.\n`)
    } else {
        console.log(`[${response.receivedTime}] 이미 팬클럽에 가입된 사용자입니다.\n`)
    }
})

// 영상 후원 채팅
soopChat.on('videoDonation', response => {
    console.log(`\n[${response.receivedTime}] ${response.fromUsername}(${response.from})님이 ${response.to}님에게 ${response.amount}개 후원`)
    if (Number(response.fanClubOrdinal) !== 0) {
        console.log(`[${response.receivedTime}] ${response.fanClubOrdinal}번째 팬클럽 가입을 환영합니다.\n`)
    } else {
        console.log(`[${response.receivedTime}] 이미 팬클럽에 가입된 사용자입니다.\n`)
    }
})

// 애드벌룬 후원 채팅
soopChat.on('adBalloonDonation', response => {
    console.log(`\n[${response.receivedTime}] ${response.fromUsername}(${response.from})님이 ${response.to}님에게 ${response.amount}개 후원`)
    if (Number(response.fanClubOrdinal) !== 0) {
        console.log(`[${response.receivedTime}] ${response.fanClubOrdinal}번째 팬클럽 가입을 환영합니다.\n`)
    } else {
        console.log(`[${response.receivedTime}] 이미 팬클럽에 가입된 사용자입니다.\n`)
    }
})

// 구독 채팅
soopChat.on('subscribe', response => {
    console.log(`\n[${response.receivedTime}] ${response.fromUsername}(${response.from})님이 ${response.to}님을 구독하셨습니다.`)
    console.log(`[${response.receivedTime}] ${response.monthCount}개월, ${response.tier}티어\n`)
})

// 퇴장 정보
soopChat.on('exit', response => {
    console.log(`\n[${response.receivedTime}] ${response.username}(${response.userId})이/가 퇴장하셨습니다\n`)
})

// 입장 정보
soopChat.on('viewer', response => {
    if(response.userId.length > 1) {
        console.log(`[${response.receivedTime}] 수신한 채팅방 사용자는 ${response.userId.length}명 입니다.`)
    } else {
        console.log(`[${response.receivedTime}] ${response.userId[0]}이/가 입장하셨습니다`)
    }
})

// 방송 종료
soopChat.on('disconnect', response => {
    console.log(`[${response.receivedTime}] ${response.streamerId}의 방송이 종료됨`)
})

// 특정하지 못한 패킷
soopChat.on('unknown', packet => {
    console.log(packet)
})

// 패킷을 바이너리 형태로 확인
soopChat.on('raw', packet => {
    console.log(packet)
})

// 채팅 연결
await soopChat.connect()

About

라이브 스트리밍 서비스 숲(soop)의 비공식 API 라이브러리

Resources

License

Stars

Watchers

Forks

Packages

No packages published