Compare commits

...
Sign in to create a new pull request.

60 commits

Author SHA1 Message Date
fd2eafac95
test again
All checks were successful
Build & Publish / build (push) Successful in 2m14s
2025-06-16 18:28:37 +02:00
95dc9bffdc
test again
All checks were successful
Build & Publish / build (push) Successful in 12m13s
2025-06-16 18:03:27 +02:00
fa8dd0ab14
remove cache from qemu action
All checks were successful
Build & Publish / build (push) Successful in 7m45s
2025-06-16 17:50:30 +02:00
8b49b19b1a
test caching
Some checks failed
Build & Publish / build (push) Has been cancelled
2025-06-16 17:46:48 +02:00
3b292d6ddd
[skip ci] move privacy-policy.md and terms-of-service.md into the root 2025-06-16 12:43:35 +02:00
4d5ba6754a
[skip ci] remove plugins from settings.gradle.kts 2025-06-16 12:40:46 +02:00
bf93c329b7
finish dependency update, also use the newer docker file template haha
All checks were successful
Build & Publish / build (push) Successful in 13m6s
2025-06-16 02:20:25 +02:00
6fa42168ac [skip ci] Merge pull request 'Update dependency org.codehaus.groovy:groovy to v3.0.25' (#5) from renovate/groovy-monorepo into root
Reviewed-on: #5
2025-06-16 02:05:19 +02:00
87108407a2 [skip ci] Merge pull request 'Update plugin dev.kordex.gradle.kordex to v1.7.1' (#14) from renovate/dev.kordex.gradle.kordex-1.x into root
Reviewed-on: #14
2025-06-16 02:05:05 +02:00
7f39c0767c [skip ci] Merge pull request 'Migrate renovate config' (#16) from renovate/migrate-config into root
Reviewed-on: #16
2025-06-16 02:04:43 +02:00
32208e0496 Migrate config renovate.json 2025-06-16 00:01:13 +00:00
adb69e1f1f Update plugin dev.kordex.gradle.kordex to v1.7.1 2025-06-16 00:01:10 +00:00
f67b016014 Update dependency org.codehaus.groovy:groovy to v3.0.25 2025-06-16 00:01:02 +00:00
27b4234cf7 [skip ci] Merge pull request 'Update plugin dev.kordex.gradle.docker to v1.7.1' (#13) from renovate/dev.kordex.gradle.docker-1.x into root
Reviewed-on: #13
2025-06-16 01:53:20 +02:00
7748d1b413 [skip ci] Merge pull request 'Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-core to v1.10.2' (#10) from renovate/kotlinx-coroutines-monorepo into root
Reviewed-on: #10
2025-06-16 01:52:58 +02:00
308df01d54 [skip ci] Merge pull request 'Update dependency io.github.oshai:kotlin-logging to v7.0.7' (#3) from renovate/logging into root
Reviewed-on: #3
2025-06-16 01:52:38 +02:00
b42f65bce2 [skip ci] Merge pull request 'Update dependency ch.qos.logback:logback-classic to v1.5.18' (#2) from renovate/logback-monorepo into root
Reviewed-on: #2
2025-06-16 01:52:11 +02:00
9f30a1415f [skip ci] Merge pull request 'Update dependency org.fusesource.jansi:jansi to v2.4.2' (#6) from renovate/jansi into root
Reviewed-on: #6
2025-06-16 01:51:25 +02:00
e5c731c016 [skip ci] Merge pull request 'Update https://github.com/docker/build-push-action action to v6' (#15) from renovate/https-github.com-docker-build-push-action-6.x into root
Reviewed-on: #15
2025-06-16 01:50:55 +02:00
b19242fc8a Update https://github.com/docker/build-push-action action to v6 2025-06-15 22:03:09 +00:00
881298dd15 Update plugin dev.kordex.gradle.docker to v1.7.1 2025-06-15 22:02:56 +00:00
700a2410ef Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-core to v1.10.2 2025-06-15 22:02:50 +00:00
b2db4cdfc3 Update dependency org.fusesource.jansi:jansi to v2.4.2 2025-06-15 22:02:45 +00:00
add22d993c Update dependency io.github.oshai:kotlin-logging to v7.0.7 2025-06-15 22:02:25 +00:00
91cf4d2608 Update dependency ch.qos.logback:logback-classic to v1.5.18 2025-06-15 22:02:09 +00:00
db4096e71a [skip ci] Merge pull request 'Update dependency com.github.twitch4j:twitch4j to v1.25.0' (#8) from renovate/twitch4j into root
Reviewed-on: #8
2025-06-15 23:47:46 +02:00
b601693905 Update dependency com.github.twitch4j:twitch4j to v1.25.0 2025-06-15 23:47:23 +02:00
07cd0f1aed [skip ci] Merge pull request 'Update kotlin monorepo to v2.1.21' (#7) from renovate/kotlin-monorepo into root
Reviewed-on: #7
2025-06-15 23:47:02 +02:00
080234fa0a Update kotlin monorepo to v2.1.21 2025-06-15 23:46:39 +02:00
35bce0277f [skip ci] Merge pull request 'Update dependency org.litote.kmongo:kmongo-coroutine-serialization to v5.2.1' (#12) from renovate/kmongo into root
Reviewed-on: #12
2025-06-15 23:45:31 +02:00
ec202e631b Update dependency org.litote.kmongo:kmongo-coroutine-serialization to v5.2.1 2025-06-15 23:44:47 +02:00
110a3cffce Merge pull request 'Update dependency gradle to v8.14.2' (#9) from renovate/gradle-8.x into root [skip ci]
Reviewed-on: #9
2025-06-15 23:43:39 +02:00
b6f0209529 Update dependency gradle to v8.14.2 2025-06-15 23:43:07 +02:00
4ebe867f03 Merge pull request 'Update dependency org.jetbrains.kotlinx:kotlinx-serialization-core to v1.8.1' (#11) from renovate/kx.ser into root
Some checks failed
Build & Publish / build (push) Has been cancelled
Reviewed-on: #11
2025-06-15 23:41:54 +02:00
089f09031e Update dependency org.jetbrains.kotlinx:kotlinx-serialization-core to v1.8.1 2025-06-15 21:39:06 +00:00
e2651e17f2 [skip ci] update <filename> 2025-06-15 23:19:20 +02:00
9f2ed39bb8 Merge pull request 'Configure Renovate' (#1) from renovate/configure into root
All checks were successful
Build & Publish / build (push) Successful in 12m31s
Reviewed-on: #1
2025-06-15 23:14:00 +02:00
8b6f60c1ea Update renovate.json 2025-06-15 23:13:01 +02:00
a003f54e72 Merge branch 'root' into renovate/configure 2025-06-15 23:08:22 +02:00
62ccfcd8bf Update .github/workflows/root.yml
Some checks failed
Build & Publish / build (push) Has been cancelled
2025-06-15 23:08:06 +02:00
f162ef0d7e Add renovate.json
Some checks failed
Build & Publish / build (push) Has been cancelled
2025-06-15 21:05:59 +00:00
806cfe8f46 Update .github/workflows/root.yml
Some checks failed
Build & Publish / build (push) Failing after 11m33s
2025-06-14 23:42:55 +02:00
a1b3587af4 Update .github/workflows/root.yml 2025-05-20 10:33:45 +02:00
550912020e Update .github/workflows/root.yml 2025-05-20 10:25:17 +02:00
8788c0100d Update .github/workflows/root.yml 2025-04-15 00:12:16 +02:00
e8250b2e3a Update .github/workflows/root.yml 2025-04-03 17:06:03 +02:00
da4c983d89
remove minimum allocation, but keep max allocation 2025-03-18 11:08:05 +01:00
469dbff421
update twitch4j 2025-03-12 20:18:49 +01:00
58275f2262
update some dependencies 2025-03-10 14:30:31 +01:00
c6cf204f44
MAYBE INIT A TWITCH CLIENT WHEN MIGRATING AAAAAAAAA 2025-02-15 11:34:17 +01:00
836e938dce
Streamers are now saved by both name and id, and on startup updates to the new name if there is one. 2025-02-15 11:10:51 +01:00
b680ce4ef4 [skip ci] yep should change this lol 2025-02-15 03:38:42 +01:00
63102a7ba2 change registry to DigitalOcean 2025-02-15 03:32:32 +01:00
c5ef4b0b56 Update .github/workflows/root.yml 2025-02-09 19:39:25 +01:00
8ce36de89a
gradle 8.12.1 2025-01-25 02:39:18 +01:00
3a04c4d6ed Upgrade Version to 1.1-SNAPSHOT
Signed-off-by: jansel <me@jansel.dev>
2025-01-22 11:38:34 +01:00
7969b988d7 [skip ci] change run name so it doesnt just take the last commit name 2025-01-17 00:35:53 +01:00
5dc0c64e0e [skip ci] change scheduled builds to just monday midnight 2025-01-17 00:31:24 +01:00
7d4d0fda3f
upgrade various versions, including gradle to 8.12 2025-01-08 18:45:17 +01:00
9228529f18 fuck the cache, it didnt wanna work properly anyways 2025-01-05 21:14:59 +01:00
18 changed files with 197 additions and 89 deletions

View file

@ -1,75 +1,81 @@
name: Build & Publish
on:
workflow_dispatch:
push:
branches:
- root
schedule:
- cron: "0 6 * * *"
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Disable SSL verify (Temporary Fix)
run: git config --global http.sslVerify false
- uses: actions/checkout@v4
- name: Checkout code
uses: https://github.com/actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: https://github.com/docker/setup-qemu-action@v3
with:
cache-image: false
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: https://github.com/docker/setup-buildx-action@v3
- name: Set up Java
uses: actions/setup-java@v4
uses: https://github.com/actions/setup-java@v4
with:
java-version: 21
distribution: temurin
- name: Get current date
id: date
run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
- name: "Restore Cache"
id: restore-cache
uses: https://data.forgejo.org/actions/cache/restore@v4
- name: Gradle Cache
uses: actions/cache/restore@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-Feixiao
restore-keys: |
${{ runner.os }}-gradle-
~/.m2/repository
key: gradle-store
- name: Grant execute permission for gradlew
run: chmod +x gradlew
with:
dependency-graph: generate-and-submit
cache-disabled: true
- name: Get current date
id: date
run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
- name: Gradle (Build)
run: "./gradlew build"
- name: Gradle Cache
uses: actions/cache/save@v4
- name: Login to DigitalOcean Registry
uses: https://github.com/docker/login-action@v3
with:
registry: registry.digitalocean.com
username: ${{ secrets.DOMAIL }}
password: ${{ secrets.DOKEY }}
- name: Build and push
uses: https://github.com/docker/build-push-action@v6
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: registry.digitalocean.com/jansel/feixiao:latest,registry.digitalocean.com/jansel/feixiao:${{ steps.date.outputs.date }}
- name: "Save Cache"
uses: https://data.forgejo.org/actions/cache/save@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-Feixiao
- name: Login to Gitea Registry
uses: docker/login-action@v3
with:
registry: pi5:8125
username: ${{ github.repository_owner }}
password: ${{ secrets.PW }}
- name: Build the Docker image
run: docker build -t pi5:8125/jansel/feixiao:latest -t pi5:8125/jansel/feixiao:${{ steps.date.outputs.date }} .
- name: Push the Docker image related to this workflow
run: docker push pi5:8125/jansel/feixiao:${{ steps.date.outputs.date }}
- name: Push the latest Docker image
run: docker push pi5:8125/jansel/feixiao:latest
~/.m2/repository
key: ${{ steps.restore-cache.outputs.cache-primary-key }}

2
.idea/kotlinc.xml generated
View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="KotlinJpsPluginSettings">
<option name="version" value="2.0.21" />
<option name="version" value="2.1.21" />
</component>
</project>

View file

@ -2,17 +2,17 @@ import dev.kordex.gradle.plugins.docker.file.*
import dev.kordex.gradle.plugins.kordex.DataCollection
plugins {
kotlin("jvm")
kotlin("plugin.serialization")
distribution
id("com.github.johnrengelman.shadow")
alias(libs.plugins.kotlin.jvm)
alias(libs.plugins.kotlin.serialization)
id("dev.kordex.gradle.docker")
id("dev.kordex.gradle.kordex")
alias(libs.plugins.kordex.plugin)
alias(libs.plugins.kordex.docker)
}
group = "dev.jansel"
version = "1.0-SNAPSHOT"
version = "1.2-SNAPSHOT"
dependencies {
@ -31,9 +31,26 @@ dependencies {
implementation(libs.logging)
}
// Configure distributions plugin
distributions {
main {
distributionBaseName = project.name
contents {
// Copy the LICENSE file into the distribution
from("LICENSE")
// Exclude src/main/dist/README.md
exclude("README.md")
}
}
}
kordEx {
kordExVersion = "2.3.1-SNAPSHOT"
jvmTarget = 21
ignoreIncompatibleKotlinVersion = true
bot {
// See https://docs.kordex.dev/data-collection.html
@ -58,37 +75,51 @@ docker {
// Each function (aside from comment/emptyLine) corresponds to a Dockerfile instruction.
// See: https://docs.docker.com/reference/dockerfile/
from("azul/zulu-openjdk-alpine:21-jre-headless-latest")
from("openjdk:21-jdk-slim")
emptyLine()
comment("Create required directories")
runShell("mkdir -p /bot/plugins")
runShell("mkdir -p /bot/data")
emptyLine()
copy("build/libs/$name-*-all.jar", "/bot/bot.jar")
runShell("mkdir -p /dist/out")
emptyLine()
// Add volumes for locations that you need to persist. This is important!
comment("Declare required volumes")
volume("/bot/data") // Storage for data files
volume("/bot/plugins") // Plugin ZIP/JAR location
emptyLine()
comment("Copy the distribution files into the container")
copy("build/distributions/${project.name}-${project.version}.tar", "/dist")
emptyLine()
comment("Extract the distribution files, and prepare them for use")
runShell("tar -xf /dist/${project.name}-${project.version}.tar -C /dist/out")
if (file("src/main/dist/plugins").isDirectory) {
runShell("mv /dist/out/${project.name}-${project.version}/plugins/* /bot/plugins")
}
runShell("chmod +x /dist/out/${project.name}-${project.version}/bin/$name")
emptyLine()
comment("Clean up unnecessary files")
runShell("rm /dist/${project.name}-${project.version}.tar")
emptyLine()
comment("Set the correct working directory")
workdir("/bot")
emptyLine()
entryPointExec(
"java", "-Xms2G", "-Xmx2G",
"-jar", "/bot/bot.jar"
)
comment("Run the distribution start script")
entryPointExec("/dist/out/${project.name}-${project.version}/bin/$name")
}
}
tasks.wrapper {
gradleVersion = "8.11.1"
distributionType = Wrapper.DistributionType.BIN
}

View file

@ -1,16 +1,17 @@
[versions]
kotlin = "2.0.21" # Note: Plugin versions must be updated in the settings.gradle.kts too
kotlin = "2.1.21" # Note: Plugin versions must be updated in the settings.gradle.kts too
groovy = "3.0.23"
jansi = "2.4.1"
kx-ser = "1.7.3"
logback = "1.5.12"
groovy = "3.0.25"
jansi = "2.4.2"
kx-ser = "1.8.1"
logback = "1.5.18"
logback-groovy = "1.14.5"
logging = "7.0.3"
twitch4j = "1.23.0"
logging = "7.0.7"
twitch4j = "1.25.0"
events4j = "0.12.2"
kx-coroutines = "1.9.0"
kmongo = "5.1.0"
kx-coroutines = "1.10.2"
kmongo = "5.2.1"
kordex-gradle = "1.7.1"
[libraries]
groovy = { module = "org.codehaus.groovy:groovy", version.ref = "groovy" }
@ -24,3 +25,11 @@ logging = { module = "io.github.oshai:kotlin-logging", version.ref = "logging" }
twitch4j = { module = "com.github.twitch4j:twitch4j", version.ref = "twitch4j" }
events4j = { module = "com.github.philippheuer.events4j:events4j-handler-reactor", version.ref = "events4j" }
kmongo = { module="org.litote.kmongo:kmongo-coroutine-serialization", version.ref = "kmongo" }
[plugins]
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
kordex-docker = { id = "dev.kordex.gradle.docker", version.ref = "kordex-gradle" }
kordex-plugin = { id = "dev.kordex.gradle.kordex", version.ref = "kordex-gradle" }

Binary file not shown.

View file

@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME

9
gradlew vendored
View file

@ -86,8 +86,7 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@ -115,7 +114,7 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
@ -206,7 +205,7 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
@ -214,7 +213,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.

4
gradlew.bat vendored
View file

@ -70,11 +70,11 @@ goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
set CLASSPATH=
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell

15
renovate.json Normal file
View file

@ -0,0 +1,15 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended"
],
"packageRules": [
{
"matchUpdateTypes": [
"minor",
"patch"
]
}
],
"prHourlyLimit": 0
}

View file

@ -1,14 +1,4 @@
pluginManagement {
plugins {
// Update this in libs.version.toml when you change it here.
kotlin("jvm") version "2.0.21"
kotlin("plugin.serialization") version "2.0.21"
id("com.github.johnrengelman.shadow") version "8.1.1"
id("dev.kordex.gradle.docker") version "1.6.0"
id("dev.kordex.gradle.kordex") version "1.6.0"
}
repositories {
gradlePluginPortal()
mavenCentral()

View file

@ -1,8 +1,14 @@
package dev.jansel.feixiao.database
import com.github.philippheuer.events4j.reactor.ReactorEventHandler
import com.github.twitch4j.TwitchClientBuilder
import dev.jansel.feixiao.database.collections.MetaCollection
import dev.jansel.feixiao.database.entities.MetaData
import dev.jansel.feixiao.database.migrations.v1
import dev.jansel.feixiao.database.migrations.v2
import dev.jansel.feixiao.twitchClient
import dev.jansel.feixiao.utils.twitchcid
import dev.jansel.feixiao.utils.twitchcs
import dev.kordex.core.koin.KordExKoinComponent
import io.github.oshai.kotlinlogging.KotlinLogging
import org.koin.core.component.inject
@ -15,6 +21,13 @@ object Migrator : KordExKoinComponent {
suspend fun migrate() {
logger.info { "Starting main database migration" }
logger.info { "Initializing Twitch client just in case" }
twitchClient = TwitchClientBuilder.builder()
.withEnableHelix(true)
.withDefaultEventHandler(ReactorEventHandler::class.java)
.withClientId(twitchcid)
.withClientSecret(twitchcs)
.build()
var meta = mainMetaCollection.get()
@ -35,6 +48,7 @@ object Migrator : KordExKoinComponent {
try {
when (nextVersion) {
1 -> ::v1
2 -> ::v2
else -> break
}(db.mongo)

View file

@ -3,6 +3,7 @@ package dev.jansel.feixiao.database.collections
import dev.jansel.feixiao.database.Database
import dev.jansel.feixiao.database.entities.Server
import dev.jansel.feixiao.database.entities.StreamerData
import dev.jansel.feixiao.utils.getTwitchIdByName
import dev.kord.common.entity.Snowflake
import dev.kordex.core.koin.KordExKoinComponent
import org.koin.core.component.inject
@ -35,7 +36,7 @@ class StreamerCollection : KordExKoinComponent {
)
} else {
collection.insertOne(
StreamerData(streamerName, listOf(Server(guildId, channelId, roleId, liveMessage)))
StreamerData(streamerName, getTwitchIdByName(streamerName), listOf(Server(guildId, channelId, roleId, liveMessage)))
)
}
}

View file

@ -6,6 +6,7 @@ import kotlinx.serialization.Serializable
@Serializable
data class StreamerData(
val name: String,
val id: String?,
val servers: List<Server>
)

View file

@ -0,0 +1,16 @@
package dev.jansel.feixiao.database.migrations
import dev.jansel.feixiao.database.entities.StreamerData
import dev.jansel.feixiao.utils.getTwitchIdByName
import org.litote.kmongo.coroutine.CoroutineDatabase
import org.litote.kmongo.eq
import org.litote.kmongo.setValue
suspend fun v2(db: CoroutineDatabase) {
db.getCollection<StreamerData>("streamerData").findOne(StreamerData::id eq null)?.let {
db.getCollection<StreamerData>("streamerData").updateOne(
StreamerData::name eq it.name,
setValue(StreamerData::id, getTwitchIdByName(it.name))
)
}
}

View file

@ -4,6 +4,8 @@ import dev.jansel.feixiao.database.collections.StreamerCollection
import dev.jansel.feixiao.database.entities.StreamerData
import dev.jansel.feixiao.logger
import dev.jansel.feixiao.twitchClient
import dev.jansel.feixiao.utils.getTwitchIdByName
import dev.jansel.feixiao.utils.getTwitchNameById
import dev.jansel.feixiao.utils.tchannelid
import dev.jansel.feixiao.utils.tserverid
import dev.kord.core.behavior.getChannelOf
@ -12,6 +14,7 @@ import dev.kord.core.event.gateway.ReadyEvent
import dev.kordex.core.extensions.Extension
import dev.kordex.core.extensions.event
import org.litote.kmongo.eq
import org.litote.kmongo.setValue
class EventHooks : Extension() {
override val name = "eventhooks"
@ -27,8 +30,10 @@ class EventHooks : Extension() {
// check every entry in the database and enable the stream event listener if a server is listening to the streamer
StreamerCollection().collection.find().toList().forEach {
if (it.servers.isNotEmpty()) {
twitchClient!!.clientHelper.enableStreamEventListener(it.name)
logger.info { "Enabled stream event listener for ${it.name}" }
val currentName = getTwitchNameById(it.id!!)
twitchClient!!.clientHelper.enableStreamEventListener(currentName)
logger.info { "Enabled stream event listener for $currentName" }
StreamerCollection().collection.updateOne(StreamerData::name eq it.name, setValue(StreamerData::name, currentName))
} else {
logger.info { "No servers are listening to ${it.name}, deleting from the database..." }
StreamerCollection().collection.deleteMany(StreamerData::name eq it.name)

View file

@ -3,6 +3,7 @@ package dev.jansel.feixiao.utils
import dev.jansel.feixiao.database.Database
import dev.jansel.feixiao.database.collections.MetaCollection
import dev.jansel.feixiao.database.collections.StreamerCollection
import dev.jansel.feixiao.twitchClient
import dev.kord.common.entity.Snowflake
import dev.kordex.core.builders.ExtensibleBotBuilder
import dev.kordex.core.utils.env
@ -52,3 +53,23 @@ suspend inline fun ExtensibleBotBuilder.twitch(active: Boolean) {
}
}
fun getTwitchNameById(id: String): String? {
val resultList = twitchClient!!.helix?.getUsers(null, listOf(id), null)?.execute()
resultList?.users?.forEach { user ->
if (user.id == id) {
return user.displayName
}
}
return null
}
fun getTwitchIdByName(name: String): String? {
val resultList = twitchClient!!.helix?.getUsers(null, null, listOf(name))?.execute()
resultList?.users?.forEach { user ->
if (user.displayName == name) {
return user.id
}
}
return null
}