mirror of
https://github.com/dalbodeule/chibot-chzzk-bot.git
synced 2025-08-09 22:01:13 +00:00
Compare commits
4 Commits
5683edaa5e
...
945d3fd5e4
Author | SHA1 | Date | |
---|---|---|---|
|
945d3fd5e4 | ||
|
af9c3a2cf5 | ||
|
bd31039f2b | ||
|
c5c115f6e6 |
@@ -206,8 +206,8 @@ class UserHandler(
|
|||||||
) {
|
) {
|
||||||
lateinit var client: ChzzkClient
|
lateinit var client: ChzzkClient
|
||||||
lateinit var chatChannelId: String
|
lateinit var chatChannelId: String
|
||||||
var listener: ChzzkUserSession? = null
|
lateinit var listener: ChzzkUserSession
|
||||||
var messageHandler: MessageHandler? = null
|
lateinit var messageHandler: MessageHandler
|
||||||
|
|
||||||
private val dispatcher: CoroutinesEventBus by inject(CoroutinesEventBus::class.java)
|
private val dispatcher: CoroutinesEventBus by inject(CoroutinesEventBus::class.java)
|
||||||
private var _isActive: Boolean
|
private var _isActive: Boolean
|
||||||
@@ -233,9 +233,17 @@ class UserHandler(
|
|||||||
|
|
||||||
client.loginAsync().await()
|
client.loginAsync().await()
|
||||||
listener = ChzzkSessionBuilder(client).buildUserSession()
|
listener = ChzzkSessionBuilder(client).buildUserSession()
|
||||||
listener?.createAndConnectAsync()?.await()
|
listener.createAndConnectAsync().await()
|
||||||
|
listener.subscribeAsync(ChzzkSessionSubscriptionType.CHAT)?.await()
|
||||||
|
|
||||||
delay(1000L)
|
delay(5000L)
|
||||||
|
|
||||||
|
messageHandler = MessageHandler(this@UserHandler)
|
||||||
|
logger.info("${user.username} message handler init.")
|
||||||
|
listener.on(SessionChatMessageEvent::class.java) {
|
||||||
|
messageHandler.handle(it.message, user)
|
||||||
|
}
|
||||||
|
logger.info("${user.username} is connected.")
|
||||||
|
|
||||||
val timer = TimerConfigService.getConfig(user)
|
val timer = TimerConfigService.getConfig(user)
|
||||||
if (timer?.option == TimerType.UPTIME.value)
|
if (timer?.option == TimerType.UPTIME.value)
|
||||||
@@ -253,25 +261,17 @@ class UserHandler(
|
|||||||
null
|
null
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
messageHandler = MessageHandler(this@UserHandler)
|
|
||||||
listener?.on(SessionChatMessageEvent::class.java) {
|
|
||||||
messageHandler?.handle(it.message, user)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal suspend fun disable() {
|
internal suspend fun disable() {
|
||||||
listener?.unsubscribeAsync(ChzzkSessionSubscriptionType.CHAT)?.await()
|
listener.unsubscribeAsync(ChzzkSessionSubscriptionType.CHAT)?.await()
|
||||||
listener?.disconnectAsync()?.await()
|
listener.disconnectAsync()?.await()
|
||||||
|
|
||||||
listener = null
|
|
||||||
messageHandler = null
|
|
||||||
|
|
||||||
_isActive = false
|
_isActive = false
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun reloadCommand() {
|
internal fun reloadCommand() {
|
||||||
messageHandler?.reloadCommand()
|
messageHandler.reloadCommand()
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun reloadUser(user: User) {
|
internal fun reloadUser(user: User) {
|
||||||
@@ -325,7 +325,8 @@ class UserHandler(
|
|||||||
} else {
|
} else {
|
||||||
logger.info("${user.username} is offline.")
|
logger.info("${user.username} is offline.")
|
||||||
streamStartTime = null
|
streamStartTime = null
|
||||||
listener?.disconnectAsync()?.join()
|
listener.unsubscribeAsync(ChzzkSessionSubscriptionType.CHAT)?.join()
|
||||||
|
listener.disconnectAsync()?.join()
|
||||||
_isActive = false
|
_isActive = false
|
||||||
|
|
||||||
CoroutineScope(Dispatchers.Default).launch {
|
CoroutineScope(Dispatchers.Default).launch {
|
||||||
|
@@ -37,11 +37,13 @@ class MessageHandler(
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
reloadCommand()
|
reloadCommand()
|
||||||
dispatcher.subscribe(SongEvent::class) {
|
CoroutineScope(Dispatchers.Default).launch {
|
||||||
if(it.type == SongType.STREAM_OFF) {
|
dispatcher.subscribe(SongEvent::class) {
|
||||||
val user = UserService.getUser(channel.channelId)
|
if(it.type == SongType.STREAM_OFF) {
|
||||||
if(! user?.let { usr -> SongListService.getSong(usr) }.isNullOrEmpty()) {
|
val user = UserService.getUser(channel.channelId)
|
||||||
SongListService.deleteUser(user)
|
if(! user?.let { usr -> SongListService.getSong(usr) }.isNullOrEmpty()) {
|
||||||
|
SongListService.deleteUser(user)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -61,6 +63,7 @@ class MessageHandler(
|
|||||||
"!노래목록" to this::songListCommand,
|
"!노래목록" to this::songListCommand,
|
||||||
"!노래시작" to this::songStartCommand,
|
"!노래시작" to this::songStartCommand,
|
||||||
"!카테고리" to this::categoryChangeCommand,
|
"!카테고리" to this::categoryChangeCommand,
|
||||||
|
"!방제" to this::titleChangeCommand,
|
||||||
)
|
)
|
||||||
|
|
||||||
manageCommands.forEach { (commandName, command) ->
|
manageCommands.forEach { (commandName, command) ->
|
||||||
@@ -87,7 +90,7 @@ class MessageHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun manageAddCommand(msg: SessionChatMessage, user: User) {
|
private fun manageAddCommand(msg: SessionChatMessage, user: User) {
|
||||||
if (msg.profile.badges.none { it.imageUrl.contains("manager") || it.imageUrl.contains("streamer") }) {
|
if (msg.profile.badges.none { it.isModerator() }) {
|
||||||
handler.sendChat("매니저만 명령어를 추가할 수 있습니다.")
|
handler.sendChat("매니저만 명령어를 추가할 수 있습니다.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -108,7 +111,7 @@ class MessageHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun manageUpdateCommand(msg: SessionChatMessage, user: User) {
|
private fun manageUpdateCommand(msg: SessionChatMessage, user: User) {
|
||||||
if (msg.profile.badges.none { it.imageUrl.contains("manager") || it.imageUrl.contains("streamer") }) {
|
if (msg.profile.badges.none { it.isModerator() }) {
|
||||||
handler.sendChat("매니저만 명령어를 추가할 수 있습니다.")
|
handler.sendChat("매니저만 명령어를 추가할 수 있습니다.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -130,7 +133,7 @@ class MessageHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun manageRemoveCommand(msg: SessionChatMessage, user: User) {
|
private fun manageRemoveCommand(msg: SessionChatMessage, user: User) {
|
||||||
if (msg.profile.badges.none { it.imageUrl.contains("manager") || it.imageUrl.contains("streamer") }) {
|
if (msg.profile.badges.none { it.isModerator() }) {
|
||||||
handler.sendChat("매니저만 명령어를 삭제할 수 있습니다.")
|
handler.sendChat("매니저만 명령어를 삭제할 수 있습니다.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -147,7 +150,7 @@ class MessageHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun timerCommand(msg: SessionChatMessage, user: User) {
|
private fun timerCommand(msg: SessionChatMessage, user: User) {
|
||||||
if (msg.profile.badges.none { it.imageUrl.contains("manager") || it.imageUrl.contains("streamer") }) {
|
if (msg.profile.badges.none { it.isModerator() }) {
|
||||||
handler.sendChat("매니저만 이 명령어를 사용할 수 있습니다.")
|
handler.sendChat("매니저만 이 명령어를 사용할 수 있습니다.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -297,7 +300,7 @@ class MessageHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun songStartCommand(msg: SessionChatMessage, user: User) {
|
private fun songStartCommand(msg: SessionChatMessage, user: User) {
|
||||||
if (msg.profile.badges.none { it.imageUrl.contains("manager") || it.imageUrl.contains("streamer") }) {
|
if (msg.profile.badges.none { it.isModerator() }) {
|
||||||
handler.sendChat("매니저만 이 명령어를 사용할 수 있습니다.")
|
handler.sendChat("매니저만 이 명령어를 사용할 수 있습니다.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -316,7 +319,7 @@ class MessageHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun categoryChangeCommand(msg: SessionChatMessage, user: User) {
|
private fun categoryChangeCommand(msg: SessionChatMessage, user: User) {
|
||||||
if (msg.profile.badges.none { it.imageUrl.contains("manager") || it.imageUrl.contains("streamer") }) {
|
if (msg.profile.badges.none { it.isModerator() }) {
|
||||||
handler.sendChat("매니저만 이 명령어를 사용할 수 있습니다.")
|
handler.sendChat("매니저만 이 명령어를 사용할 수 있습니다.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -348,6 +351,25 @@ class MessageHandler(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun titleChangeCommand(msg: SessionChatMessage, user: User) {
|
||||||
|
if (msg.profile.badges.none { it.isModerator() }) {
|
||||||
|
handler.sendChat("매니저만 이 명령어를 사용할 수 있습니다.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val parts = msg.content.split(" ", limit = 2)
|
||||||
|
if(parts.size <= 1) {
|
||||||
|
handler.sendChat("입력된 방송 제목이 없습니다.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
val title = parts[1]
|
||||||
|
val settings = ChzzkLiveSettings()
|
||||||
|
settings.defaultLiveTitle = title
|
||||||
|
|
||||||
|
handler.client.modifyLiveSettings(settings)
|
||||||
|
handler.sendChat("$title 로 수정했어요!")
|
||||||
|
}
|
||||||
|
|
||||||
internal fun handle(msg: SessionChatMessage, user: User) {
|
internal fun handle(msg: SessionChatMessage, user: User) {
|
||||||
if(msg.senderChannelId == ChzzkHandler.botUid) return
|
if(msg.senderChannelId == ChzzkHandler.botUid) return
|
||||||
|
|
||||||
@@ -430,3 +452,7 @@ class MessageHandler(
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun SessionChatMessage.Profile.Badge.isManager() = imageUrl.contains("manager")
|
||||||
|
fun SessionChatMessage.Profile.Badge.isStreamer() = imageUrl.contains("streamer")
|
||||||
|
fun SessionChatMessage.Profile.Badge.isModerator() = isManager() || isStreamer()
|
Reference in New Issue
Block a user