mirror of
https://github.com/dalbodeule/chibot-chzzk-bot.git
synced 2025-08-07 21:01:14 +00:00
add WSSongListRoutes.kt
- add Websocket backend. - add session start command. - some improve logics.
This commit is contained in:
@@ -8,11 +8,19 @@ import org.jetbrains.exposed.sql.ReferenceOption
|
||||
|
||||
object SongConfigs: IntIdTable("song_config") {
|
||||
val user = reference("user", Users, onDelete = ReferenceOption.CASCADE)
|
||||
val option = integer("option")
|
||||
val token = varchar("token", 64).nullable()
|
||||
val password = varchar("password", 8).nullable()
|
||||
val streamerOnly = bool("streamer_only").default(false)
|
||||
val queueLimit = integer("queue_limit").default(50)
|
||||
val personalLimit = integer("personal_limit").default(5)
|
||||
}
|
||||
class SongConfig(id: EntityID<Int>) : IntEntity(id) {
|
||||
companion object : IntEntityClass<TimerConfig>(TimerConfigs)
|
||||
companion object : IntEntityClass<SongConfig>(SongConfigs)
|
||||
|
||||
var user by User referencedOn TimerConfigs.user
|
||||
var option by TimerConfigs.option
|
||||
var user by User referencedOn SongConfigs.user
|
||||
var token by SongConfigs.token
|
||||
var password by SongConfigs.password
|
||||
var streamerOnly by SongConfigs.streamerOnly
|
||||
var queueLimit by SongConfigs.queueLimit
|
||||
var personalLimit by SongConfigs.personalLimit
|
||||
}
|
@@ -0,0 +1,87 @@
|
||||
package space.mori.chzzk_bot.common.services
|
||||
|
||||
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import space.mori.chzzk_bot.common.models.SongConfig
|
||||
import space.mori.chzzk_bot.common.models.SongConfigs
|
||||
import space.mori.chzzk_bot.common.models.User
|
||||
|
||||
object SongConfigService {
|
||||
private fun initConfig(user: User): SongConfig {
|
||||
return transaction {
|
||||
SongConfig.new {
|
||||
this.user = user
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getConfig(user: User): SongConfig {
|
||||
return transaction {
|
||||
var songConfig = SongConfig.find(SongConfigs.user eq user.id).firstOrNull()
|
||||
if (songConfig == null) {
|
||||
songConfig = initConfig(user)
|
||||
}
|
||||
songConfig
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun getConfig(token: String): SongConfig? {
|
||||
return transaction {
|
||||
SongConfig.find(SongConfigs.token eq token).firstOrNull()
|
||||
}
|
||||
}
|
||||
fun getUserByToken(token: String): User? {
|
||||
return transaction {
|
||||
val songConfig = SongConfig.find(SongConfigs.token eq token).firstOrNull()
|
||||
if(songConfig == null) null
|
||||
else UserService.getUser(songConfig.user.discord)
|
||||
}
|
||||
}
|
||||
|
||||
fun updatePersonalLimit(user: User, limit: Int): SongConfig {
|
||||
return transaction {
|
||||
var songConfig = SongConfig.find(SongConfigs.user eq user.id).firstOrNull()
|
||||
if (songConfig == null) {
|
||||
songConfig = initConfig(user)
|
||||
}
|
||||
songConfig.personalLimit = limit
|
||||
songConfig
|
||||
}
|
||||
}
|
||||
fun updateQueueLimit(user: User, limit: Int): SongConfig {
|
||||
return transaction {
|
||||
var songConfig = SongConfig.find(SongConfigs.user eq user.id).firstOrNull()
|
||||
if (songConfig == null) {
|
||||
songConfig = initConfig(user)
|
||||
}
|
||||
songConfig.queueLimit = limit
|
||||
songConfig
|
||||
}
|
||||
}
|
||||
|
||||
fun updateSession(user: User, token: String?, password: String?): SongConfig {
|
||||
return transaction {
|
||||
var songConfig = SongConfig.find(SongConfigs.user eq user.id).firstOrNull()
|
||||
if (songConfig == null) {
|
||||
songConfig = initConfig(user)
|
||||
}
|
||||
songConfig.token = token
|
||||
songConfig.password = password
|
||||
|
||||
songConfig
|
||||
}
|
||||
}
|
||||
|
||||
fun updateStreamerOnly(user: User, config: Boolean): SongConfig {
|
||||
return transaction {
|
||||
var songConfig = SongConfig.find(SongConfigs.user eq user.id).firstOrNull()
|
||||
if (songConfig == null) {
|
||||
songConfig = initConfig(user)
|
||||
}
|
||||
songConfig.streamerOnly = config
|
||||
|
||||
songConfig
|
||||
}
|
||||
}
|
||||
}
|
@@ -129,7 +129,7 @@ fun getFollowDate(chatID: String, userId: String) : IData<IFollowContent?> {
|
||||
}
|
||||
|
||||
fun getStreamInfo(userId: String) : IData<IStreamInfo?> {
|
||||
val url = "https://api.chzzk.naver.com/service/v2/channels/${userId}/live-detail"
|
||||
val url = "https://api.chzzk.naver.com/service/v3/channels/${userId}/live-detail"
|
||||
val request = Request.Builder()
|
||||
.url(url)
|
||||
.build()
|
||||
|
@@ -0,0 +1,9 @@
|
||||
package space.mori.chzzk_bot.common.utils
|
||||
|
||||
fun getRandomString(length: Int): String {
|
||||
val charPool = ('a'..'z') + ('0'..'9')
|
||||
return (1..length)
|
||||
.map { kotlin.random.Random.nextInt(0, charPool.size) }
|
||||
.map(charPool::get)
|
||||
.joinToString("")
|
||||
}
|
@@ -28,7 +28,6 @@ fun getYoutubeVideoId(url: String): String? {
|
||||
}
|
||||
|
||||
fun parseDuration(duration: String): Int {
|
||||
println(duration)
|
||||
val matchResult = durationRegex.find(duration)
|
||||
val (hours, minutes, seconds) = matchResult?.destructured ?: return 0
|
||||
|
||||
@@ -67,8 +66,6 @@ fun getYoutubeVideo(url: String): YoutubeVideo? {
|
||||
|
||||
if (items == null || items.size() == 0) return null
|
||||
|
||||
println(json)
|
||||
|
||||
val item = items[0].asJsonObject
|
||||
val snippet = item.getAsJsonObject("snippet")
|
||||
val contentDetail = item.getAsJsonObject("contentDetails")
|
||||
|
Reference in New Issue
Block a user