A modular framework for building Discord bots in Kotlin using Kordex and Kord

Overview

Mik Bot

A modular framework for building Discord bots in Kotlin using Kordex and Kord

**If you are here for mikmusic, click here and there

Deployment

Requirements

Example Environment file

.env
ENVIRONMENT=PRODUCTION
SENTRY_TOKEN=<>
DISCORD_TOKEN=<>
MONGO_URL=mongodb://bot:bot@mongo
MONGO_DATABASE=bot_prod
LOG_LEVEL=DEBUG
BOT_OWNERS=416902379598774273
OWNER_GUILD=<>

Starting the bot

Docker image from: https://github.com/DRSchlaubi/mikmusic/pkgs/container/mikmusic%2Fbot

  • Clone this repo
  • Run docker-compose up -d

For developers

JDK is required it can be obtained here (Recommended for Windows but works everywhere) and here (Recommended for Linux/Mac)

Currently you can only use JDK 16, we will migrate to JDK 17 as soon as Kotlin 1.6 becomes stable Please set the ENVIRONMENT env var to DEVELOPMENT whilst developing the bot. Also set a TEST_GUILD environment variable, for local commands

Comments
  • excited with code 1

    excited with code 1

    I'm having a bit of trouble getting this bot to run, I have docker and lavalink installed, I have created changed my .env and created the docker-compose.yml as well when I try to run the bot it just ends up exciting with code 1 would you be able to point and laughing at me before telling me what I'm doing wrong?

    Microsoft Windows [Version 10.0.19044.1889] (c) Microsoft Corporation. All rights reserved.

    C:\WINDOWS\system32>cd C:\Music-Bot-2

    C:\Music-Bot-2>docker-compose up -d [+] Running 16/16

    • bot Pulled 23.4s
      • 675920708c8b Pull complete 7.7s
      • 8d642f39b108 Pull complete 8.3s
      • 9f4772666698 Pull complete 15.4s
      • b3ad047f9def Pull complete 15.6s
      • 4844e895491a Pull complete 15.7s
      • bc78e3c069ed Pull complete 21.9s
    • mongo Pulled 42.1s
      • 6f9c8c301e0f Pull complete 5.0s
      • 73738965c4ce Pull complete 6.7s
      • 7fd6635b9ddf Pull complete 8.7s
      • 73a471eaa4ad Pull complete 9.6s
      • bcf274af89b0 Pull complete 10.7s
      • 04fc489f2a3b Pull complete 11.6s
      • 6eff8a505292 Pull complete 36.6s
      • a5ef4431fce7 Pull complete 36.7s [+] Running 4/4
    • Network music-bot-2_default Created 0.6s
    • Volume "music-bot-2_mongo-data" Created 0.0s
    • Container music-bot-2-mongo-1 Started 7.6s
    • Container music-bot-2-bot-1 Started 2.0s

    [+] Running 2/2docker-compose up

    • Container music-bot-2-mongo-1 Recreated 0.6s
    • Container music-bot-2-bot-1 Recreated 0.2s Attaching to music-bot-2-bot-1, music-bot-2-mongo-1 music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.389+00:00"},"s":"I", "c":"NETWORK", "id":4915701, "ctx":"-","msg":"Initialized wire specification","attr":{"spec":{"incomingExternalClient":{"minWireVersion":0,"maxWireVersion":17},"incomingInternalClient":{"minWireVersion":0,"maxWireVersion":17},"outgoing":{"minWireVersion":6,"maxWireVersion":17},"isInternalClient":true}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.389+00:00"},"s":"I", "c":"CONTROL", "id":23285, "ctx":"main","msg":"Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'"} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.390+00:00"},"s":"I", "c":"NETWORK", "id":4648601, "ctx":"main","msg":"Implicit TCP FastOpen unavailable. If TCP FastOpen is required, set tcpFastOpenServer, tcpFastOpenClient, and tcpFastOpenQueueSize."} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.390+00:00"},"s":"I", "c":"REPL", "id":5123008, "ctx":"main","msg":"Successfully registered PrimaryOnlyService","attr":{"service":"TenantMigrationDonorService","namespace":"config.tenantMigrationDonors"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.390+00:00"},"s":"I", "c":"REPL", "id":5123008, "ctx":"main","msg":"Successfully registered PrimaryOnlyService","attr":{"service":"TenantMigrationRecipientService","namespace":"config.tenantMigrationRecipients"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.390+00:00"},"s":"I", "c":"REPL", "id":5123008, "ctx":"main","msg":"Successfully registered PrimaryOnlyService","attr":{"service":"ShardSplitDonorService","namespace":"config.tenantSplitDonors"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.390+00:00"},"s":"I", "c":"CONTROL", "id":5945603, "ctx":"main","msg":"Multi threading initialized"} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"CONTROL", "id":4615611, "ctx":"initandlisten","msg":"MongoDB starting","attr":{"pid":1,"port":27017,"dbPath":"/data/db","architecture":"64-bit","host":"5a9af1a27d43"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"CONTROL", "id":23403, "ctx":"initandlisten","msg":"Build Info","attr":{"buildInfo":{"version":"6.0.1","gitVersion":"32f0f9c88dc44a2c8073a5bd47cf779d4bfdee6b","openSSLVersion":"OpenSSL 1.1.1f 31 Mar 2020","modules":[],"allocator":"tcmalloc","environment":{"distmod":"ubuntu2004","distarch":"x86_64","target_arch":"x86_64"}}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"CONTROL", "id":51765, "ctx":"initandlisten","msg":"Operating System","attr":{"os":{"name":"Ubuntu","version":"20.04"}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"CONTROL", "id":21951, "ctx":"initandlisten","msg":"Options set by command line","attr":{"options":{"net":{"bindIp":"*"},"security":{"authorization":"enabled"}}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"STORAGE", "id":22270, "ctx":"initandlisten","msg":"Storage engine to use detected by data files","attr":{"dbpath":"/data/db","storageEngine":"wiredTiger"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"STORAGE", "id":22297, "ctx":"initandlisten","msg":"Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem","tags":["startupWarnings"]} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.391+00:00"},"s":"I", "c":"STORAGE", "id":22315, "ctx":"initandlisten","msg":"Opening WiredTiger","attr":{"config":"create,cache_size=25163M,session_max=33000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,remove=true,path=journal,compressor=snappy),builtin_extension_config=(zstd=(compression_level=6)),file_manager=(close_idle_time=600,close_scan_interval=10,close_handle_minimum=2000),statistics_log=(wait=0),json_output=(error,message),verbose=[recovery_progress:1,checkpoint_progress:1,compact_progress:1,backup:0,checkpoint:0,compact:0,evict:0,history_store:0,recovery:0,rts:0,salvage:0,tiered:0,timestamp:0,transaction:0,verify:0,log:0],"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.655+00:00"},"s":"I", "c":"STORAGE", "id":4795906, "ctx":"initandlisten","msg":"WiredTiger opened","attr":{"durationMillis":264}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.655+00:00"},"s":"I", "c":"RECOVERY", "id":23987, "ctx":"initandlisten","msg":"WiredTiger recoveryTimestamp","attr":{"recoveryTimestamp":{"$timestamp":{"t":0,"i":0}}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.655+00:00"},"s":"I", "c":"WT", "id":4366408, "ctx":"initandlisten","msg":"No table logging settings modifications are required for existing WiredTiger tables","attr":{"loggingEnabled":true}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.674+00:00"},"s":"W", "c":"CONTROL", "id":22178, "ctx":"initandlisten","msg":"/sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'","tags":["startupWarnings"]} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.674+00:00"},"s":"W", "c":"CONTROL", "id":5123300, "ctx":"initandlisten","msg":"vm.max_map_count is too low","attr":{"currentValue":65530,"recommendedMinimum":1677720,"maxConns":838860},"tags":["startupWarnings"]} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.675+00:00"},"s":"I", "c":"NETWORK", "id":4915702, "ctx":"initandlisten","msg":"Updated wire specification","attr":{"oldSpec":{"incomingExternalClient":{"minWireVersion":0,"maxWireVersion":17},"incomingInternalClient":{"minWireVersion":0,"maxWireVersion":17},"outgoing":{"minWireVersion":6,"maxWireVersion":17},"isInternalClient":true},"newSpec":{"incomingExternalClient":{"minWireVersion":0,"maxWireVersion":17},"incomingInternalClient":{"minWireVersion":17,"maxWireVersion":17},"outgoing":{"minWireVersion":17,"maxWireVersion":17},"isInternalClient":true}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.675+00:00"},"s":"I", "c":"REPL", "id":5853300, "ctx":"initandlisten","msg":"current featureCompatibilityVersion value","attr":{"featureCompatibilityVersion":"6.0","context":"startup"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.675+00:00"},"s":"I", "c":"STORAGE", "id":5071100, "ctx":"initandlisten","msg":"Clearing temp directory"} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.675+00:00"},"s":"I", "c":"CONTROL", "id":20536, "ctx":"initandlisten","msg":"Flow Control is enabled on this deployment"} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.675+00:00"},"s":"I", "c":"FTDC", "id":20625, "ctx":"initandlisten","msg":"Initializing full-time diagnostic data capture","attr":{"dataDirectory":"/data/db/diagnostic.data"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.677+00:00"},"s":"I", "c":"REPL", "id":6015317, "ctx":"initandlisten","msg":"Setting new configuration state","attr":{"newState":"ConfigReplicationDisabled","oldState":"ConfigPreStart"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.677+00:00"},"s":"I", "c":"STORAGE", "id":22262, "ctx":"initandlisten","msg":"Timestamp monitor starting"} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.678+00:00"},"s":"I", "c":"NETWORK", "id":23015, "ctx":"listener","msg":"Listening on","attr":{"address":"/tmp/mongodb-27017.sock"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.678+00:00"},"s":"I", "c":"NETWORK", "id":23015, "ctx":"listener","msg":"Listening on","attr":{"address":"0.0.0.0"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:11.678+00:00"},"s":"I", "c":"NETWORK", "id":23016, "ctx":"listener","msg":"Waiting for connections","attr":{"port":27017,"ssl":"off"}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:12.788+00:00"},"s":"I", "c":"NETWORK", "id":22943, "ctx":"listener","msg":"Connection accepted","attr":{"remote":"172.22.0.3:46678","uuid":"04e2901a-f80a-4f53-8c58-65732906073d","connectionId":1,"connectionCount":1}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:12.788+00:00"},"s":"I", "c":"NETWORK", "id":22943, "ctx":"listener","msg":"Connection accepted","attr":{"remote":"172.22.0.3:46676","uuid":"3338b9a5-eb82-49a3-9e0d-5f6a0545e29e","connectionId":2,"connectionCount":2}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:12.793+00:00"},"s":"I", "c":"NETWORK", "id":51800, "ctx":"conn2","msg":"client metadata","attr":{"remote":"172.22.0.3:46676","client":"conn2","doc":{"driver":{"name":"mongo-java-driver|reactive-streams","version":"4.7.1"},"os":{"type":"Linux","name":"Linux","architecture":"amd64","version":"5.10.16.3-microsoft-standard-WSL2"},"platform":"Java/IBM Corporation/18.0.2+9"}}} music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:12.793+00:00"},"s":"I", "c":"NETWORK", "id":51800, "ctx":"conn1","msg":"client metadata","attr":{"remote":"172.22.0.3:46678","client":"conn1","doc":{"driver":{"name":"mongo-java-driver|reactive-streams","version":"4.7.1"},"os":{"type":"Linux","name":"Linux","architecture":"amd64","version":"5.10.16.3-microsoft-standard-WSL2"},"platform":"Java/IBM Corporation/18.0.2+9"}}} music-bot-2-bot-1 | 2022-09-10 00:30:12.787 [main] INFO org.mongodb.driver.client - MongoClient with metadata {"driver": {"name": "mongo-java-driver|reactive-streams", "version": "4.7.1"}, "os": {"type": "Linux", "name": "Linux", "architecture": "amd64", "version": "5.10.16.3-microsoft-standard-WSL2"}, "platform": "Java/IBM Corporation/18.0.2+9"} created with settings MongoClientSettings{readPreference=primary, writeConcern=WriteConcern{w=null, wTimeout=null ms, journal=null}, retryWrites=true, retryReads=true, readConcern=ReadConcern{level=null}, credential=MongoCredential{mechanism=null, userName='bot', source='admin', password=, mechanismProperties=}, streamFactoryFactory=null, commandListeners=[], codecRegistry=ProvidersCodecRegistry{codecProviders=[ProvidersCodecRegistry{codecProviders=[ValueCodecProvider{}, BsonValueCodecProvider{}, DBRefCodecProvider{}, DBObjectCodecProvider{}, DocumentCodecProvider{}, IterableCodecProvider{}, MapCodecProvider{}, GeoJsonCodecProvider{}, GridFSFileCodecProvider{}, Jsr310CodecProvider{}, JsonObjectCodecProvider{}, BsonCodecProvider{}, EnumCodecProvider{}, com.mongodb.Jep395RecordCodecProvider@62b32d6c]}, org.litote.kmongo.service.CustomCodecProvider@c6960ffb, org.litote.kmongo.serialization.SerializationClassMappingTypeService$coreCodecRegistry$1@5a6a862c]}, clusterSettings={hosts=[mongo:27017], srvServiceName=mongodb, mode=SINGLE, requiredClusterType=UNKNOWN, requiredReplicaSetName='null', serverSelector='null', clusterListeners='[]', serverSelectionTimeout='30000 ms', localThreshold='30000 ms'}, socketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=0, receiveBufferSize=0, sendBufferSize=0}, heartbeatSocketSettings=SocketSettings{connectTimeoutMS=10000, readTimeoutMS=10000, receiveBufferSize=0, sendBufferSize=0}, connectionPoolSettings=ConnectionPoolSettings{maxSize=100, minSize=0, maxWaitTimeMS=120000, maxConnectionLifeTimeMS=0, maxConnectionIdleTimeMS=0, maintenanceInitialDelayMS=0, maintenanceFrequencyMS=60000, connectionPoolListeners=[], maxConnecting=2}, serverSettings=ServerSettings{heartbeatFrequencyMS=10000, minHeartbeatFrequencyMS=500, serverListeners='[]', serverMonitorListeners='[]'}, sslSettings=SslSettings{enabled=false, invalidHostNameAllowed=false, context=null}, applicationName='null', compressorList=[], uuidRepresentation=UNSPECIFIED, serverApi=null, autoEncryptionSettings=null, contextProvider=null} music-bot-2-bot-1 | 2022-09-10 00:30:12.806 [cluster-ClusterId{value='631bda94ba7f74728e753c78', description='null'}-mongo:27017] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:1, serverValue:2}] to mongo:27017 music-bot-2-bot-1 | 2022-09-10 00:30:12.806 [cluster-rtt-ClusterId{value='631bda94ba7f74728e753c78', description='null'}-mongo:27017] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:2, serverValue:1}] to mongo:27017 music-bot-2-bot-1 | 2022-09-10 00:30:12.806 [cluster-ClusterId{value='631bda94ba7f74728e753c78', description='null'}-mongo:27017] INFO org.mongodb.driver.cluster - Monitor thread successfully connected to server with description ServerDescription{address=mongo:27017, type=STANDALONE, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=17, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=14144669} music-bot-2-bot-1 | 2022-09-10 00:30:12.822 [main] INFO o.pf4j.DefaultPluginStatusProvider - Enabled plugins: [] music-bot-2-bot-1 | 2022-09-10 00:30:12.823 [main] INFO o.pf4j.DefaultPluginStatusProvider - Disabled plugins: [] music-bot-2-bot-1 | 2022-09-10 00:30:12.825 [main] INFO org.pf4j.DefaultPluginManager - PF4J version 3.7.0 in 'deployment' mode music-bot-2-bot-1 | 2022-09-10 00:30:12.856 [main] DEBUG org.pf4j.AbstractPluginManager - Lookup plugins in '[/usr/app/plugins]' music-bot-2-bot-1 | 2022-09-10 00:30:12.861 [main] INFO org.pf4j.AbstractPluginManager - No plugins music-bot-2-bot-1 | 2022-09-10 00:30:12.861 [main] DEBUG d.s.m.core.plugin.PluginUpdater - No updates found music-bot-2-bot-1 | 2022-09-10 00:30:12.861 [main] DEBUG o.p.update.DefaultUpdateRepository - Read plugins of 'c4ea153ee891e283' repository from 'https://storage.googleapis.com/mikbot-plugins/plugins.json' music-bot-2-bot-1 | 2022-09-10 00:30:13.678 [main] DEBUG o.p.update.DefaultUpdateRepository - Found 25 plugins in repository 'c4ea153ee891e283' music-bot-2-bot-1 | 2022-09-10 00:30:13.681 [main] DEBUG d.s.m.core.plugin.PluginLoader - Built translation provider graph: {} music-bot-2-bot-1 | 2022-09-10 00:30:13.703 [main] DEBUG org.pf4j.AbstractExtensionFinder - Finding extensions of extension point 'dev.schlaubi.musicbot.core.sentry.SentryExtensionPoint' music-bot-2-bot-1 | 2022-09-10 00:30:13.703 [main] DEBUG org.pf4j.LegacyExtensionFinder - Reading extensions storages from classpath music-bot-2-bot-1 | 2022-09-10 00:30:13.703 [main] DEBUG org.pf4j.LegacyExtensionFinder - Read 'file:/usr/app/lib/pf4j-update-2.3.0.jar!/META-INF/extensions.idx' music-bot-2-bot-1 | 2022-09-10 00:30:13.704 [main] DEBUG org.pf4j.AbstractExtensionFinder - No extensions found music-bot-2-bot-1 | 2022-09-10 00:30:13.704 [main] DEBUG org.pf4j.LegacyExtensionFinder - Reading extensions storages from plugins music-bot-2-bot-1 | 2022-09-10 00:30:13.704 [main] DEBUG d.s.m.c.p.DependencyCheckingExtensionFinder - Finding extensions of extension point 'dev.schlaubi.musicbot.core.sentry.SentryExtensionPoint' for plugin 'null' music-bot-2-bot-1 | 2022-09-10 00:30:13.705 [main] DEBUG org.pf4j.AbstractExtensionFinder - No extensions found for extension point 'dev.schlaubi.musicbot.core.sentry.SentryExtensionPoint' music-bot-2-bot-1 | Exception in thread "main" dev.kord.core.exception.KordInitializationException: Something went wrong while initializing Kord, make sure the bot token you entered is valid.{"message": "401: Unauthorized", "code": 0} music-bot-2-bot-1 | music-bot-2-bot-1 | at dev.kord.core.builder.kord.KordBuilder.getGatewayInfo(KordBuilder.kt:223) music-bot-2-bot-1 | at dev.kord.core.builder.kord.KordBuilder.access$getGatewayInfo(KordBuilder.kt:61) music-bot-2-bot-1 | at dev.kord.core.builder.kord.KordBuilder$getGatewayInfo$1.invokeSuspend(KordBuilder.kt) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:138) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:112) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:14) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:62) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:138) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:112) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:14) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:62) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:138) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:112) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:14) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:62) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:138) music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:14.318+00:00"},"s":"I", "c":"-", "id":20883, "ctx":"conn2","msg":"Interrupted operation as its client disconnected","attr":{"opId":28}} music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:112) music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:14.319+00:00"},"s":"I", "c":"NETWORK", "id":22944, "ctx":"conn1","msg":"Connection ended","attr":{"remote":"172.22.0.3:46678","uuid":"04e2901a-f80a-4f53-8c58-65732906073d","connectionId":1,"connectionCount":1}} music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:14) music-bot-2-mongo-1 | {"t":{"$date":"2022-09-10T00:30:14.319+00:00"},"s":"I", "c":"NETWORK", "id":22944, "ctx":"conn2","msg":"Connection ended","attr":{"remote":"172.22.0.3:46676","uuid":"3338b9a5-eb82-49a3-9e0d-5f6a0545e29e","connectionId":2,"connectionCount":0}} music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:62) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:138) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.loop(SuspendFunctionGun.kt:112) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun.access$loop(SuspendFunctionGun.kt:14) music-bot-2-bot-1 | at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:62) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:178) music-bot-2-bot-1 | at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:166) music-bot-2-bot-1 | at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:397) music-bot-2-bot-1 | at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:431)music-bot-2-bot-1 | at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:420) music-bot-2-bot-1 | at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:328)music-bot-2-bot-1 | at kotlinx.coroutines.ResumeAwaitOnCompletion.invoke(JobSupport.kt:1413) music-bot-2-bot-1 | at kotlinx.coroutines.JobSupport.notifyCompletion(JobSupport.kt:1520) music-bot-2-bot-1 | at kotlinx.coroutines.JobSupport.completeStateFinalization(JobSupport.kt:323) music-bot-2-bot-1 | at kotlinx.coroutines.JobSupport.finalizeFinishingState(JobSupport.kt:240) music-bot-2-bot-1 | at kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath(JobSupport.kt:906) music-bot-2-bot-1 | at kotlinx.coroutines.JobSupport.tryMakeCompleting(JobSupport.kt:863) music-bot-2-bot-1 | at kotlinx.coroutines.JobSupport.makeCompletingOnce$kotlinx_coroutines_core(JobSupport.kt:828) music-bot-2-bot-1 | at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:100) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at kotlinx.coroutines.UndispatchedCoroutine.afterResume(CoroutineContext.kt:233) music-bot-2-bot-1 | at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:102) music-bot-2-bot-1 | at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46) music-bot-2-bot-1 | at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) music-bot-2-bot-1 | at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42) music-bot-2-bot-1 | at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95) music-bot-2-bot-1 | at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570) music-bot-2-bot-1 | at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) music-bot-2-bot-1 | at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677) music-bot-2-bot-1 | at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664) music-bot-2-bot-1 exited with code 1
    opened by QuantumRage100 10
  • Controlled games can't edit/resend controls

    Controlled games can't edit/resend controls

    Editing ephemerals follow-ups got removed yesterday (see https://github.com/discord/discord-api-docs/issues/4414). We're currently investigating new ways to achieve the same behavior. One way would be to not use followups for controls, which would require the auto-resend to use a button instead, since you can no longer follow up

    bug freezer 
    opened by DRSchlaubi 6
  • VoteBot: Cannot close a poll after message deletion

    VoteBot: Cannot close a poll after message deletion

    It seems that you cannot close a poll in the event that its containing message was deleted. Is there a fix for this? If not, maybe a fix could be implemented wherein attempting to close a poll with a message ID that doesn't exist will simply remove the poll from the list, or something similar?

    Votebot 
    opened by Z8MB1E 3
  • Voice channel leave behaviour

    Voice channel leave behaviour

    Currently the bot leaves immediately if there is no song remaining in the queue. In my opinion it would be nice if one could configure a timeout which has to exceed before he does so.

    He also does not stop playing music if no user is left in the voice channel which wastes some server resources. This would also be a nice thing to implement.

    enhancement good first issue 
    opened by lus 3
  • chore(deps): update dependency dev.schlaubi:gradle-plugin to v2

    chore(deps): update dependency dev.schlaubi:gradle-plugin to v2

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | dev.schlaubi:gradle-plugin | 1.0.0 -> 2.5.0 | age | adoption | passing | confidence |


    Configuration

    đź“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 2
  • chore(deps): update dependency org.jetbrains.kotlinx:kotlinx-datetime to v0.3.3

    chore(deps): update dependency org.jetbrains.kotlinx:kotlinx-datetime to v0.3.3

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | org.jetbrains.kotlinx:kotlinx-datetime | 0.3.2 -> 0.3.3 | age | adoption | passing | confidence |


    Release Notes

    Kotlin/kotlinx-datetime

    v0.3.3

    • Just updated Kotlin dependency to 1.7.0-Beta and kotlinx.serialization to 1.3.2

    Configuration

    đź“… Schedule: At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    freezer 
    opened by renovate[bot] 2
  • Queuing bug

    Queuing bug

    Sometimes when I try to queue a song the bot simply starts playing it while skipping the current playing one. I can't really say for sure why that happens as it does not seem like there are any error messages logged in that case.

    bug 
    opened by lus 2
  • chore(deps): update com.kotlindiscord.kord.extensions to v1.5.3-snapshot - autoclosed

    chore(deps): update com.kotlindiscord.kord.extensions to v1.5.3-snapshot - autoclosed

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | com.kotlindiscord.kord.extensions:annotation-processor | 1.5.3-MIKBOT-SNAPSHOT -> 1.5.3-SNAPSHOT | age | adoption | passing | confidence | | com.kotlindiscord.kord.extensions:unsafe | 1.5.3-MIKBOT-SNAPSHOT -> 1.5.3-SNAPSHOT | age | adoption | passing | confidence | | com.kotlindiscord.kord.extensions:kord-extensions | 1.5.3-MIKBOT-SNAPSHOT -> 1.5.3-SNAPSHOT | age | adoption | passing | confidence |


    Configuration

    đź“… Schedule: At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about these updates again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    freezer 
    opened by renovate[bot] 1
  • add role only when new joining members accept the rules of membership screening

    add role only when new joining members accept the rules of membership screening

    Previously when a new Member joined, the bot gave the Role to the user and the Membership screening got skipped because discord skips it when the user receives a role

    opened by StckOverflw 1
  • ClassCastException: java.lang.String incompatible with dev.kord.core.entity.Message

    ClassCastException: java.lang.String incompatible with dev.kord.core.entity.Message

    Sentry Issue: BOT-V2-T

    ClassCastException: java.lang.String incompatible with dev.kord.core.entity.Message
        at space.votebot.command.PollArguments$pollMessage$2$1.invoke(PollArgument.kt)
        at com.kotlindiscord.kord.extensions.commands.application.slash.SlashCommand.autoComplete$autoComplete(SlashCommand.kt:162)
        at com.kotlindiscord.kord.extensions.commands.application.slash.SlashCommand.autoComplete$suspendImpl(SlashCommand.kt:165)
        at com.kotlindiscord.kord.extensions.commands.application.slash.SlashCommand.autoComplete(SlashCommand.kt)
        at com.kotlindiscord.kord.extensions.commands.application.DefaultApplicationCommandRegistry.handle$suspendImpl(DefaultApplicationCommandRegistry.kt:410)
    ...
    (11 additional frame(s) were not displayed)
    
    opened by sentry-io[bot] 1
  • Sponsorblock exception

    Sponsorblock exception

    2022-01-07T21:12:51.563397345Z Exception in thread "DefaultDispatcher-worker-12" java.lang.NullPointerException: Cannot invoke "java.lang.Object.hashCode()" because "<parameter1>" is null
    2022-01-07T21:12:51.563699070Z at java.base/java.util.concurrent.ConcurrentHashMap.replaceNode(Unknown Source)
    2022-01-07T21:12:51.563788930Z at java.base/java.util.concurrent.ConcurrentHashMap.remove(Unknown Source)
    2022-01-07T21:12:51.563863192Z at dev.schlaubi.mikmusic.sponsorblock.SponsorBlockKt.deleteSponsorBlockCache(SponsorBlock.kt:53)
    2022-01-07T21:12:51.564095364Z at dev.schlaubi.mikmusic.player.MusicPlayer.onTrackEnd(MusicPlayer.kt:232)
    2022-01-07T21:12:51.564331975Z at dev.schlaubi.mikmusic.player.MusicPlayer.access$onTrackEnd(MusicPlayer.kt:34)
    2022-01-07T21:12:51.564556161Z at dev.schlaubi.mikmusic.player.MusicPlayer$2.invoke(MusicPlayer.kt:59)
    2022-01-07T21:12:51.564786440Z at dev.schlaubi.mikmusic.player.MusicPlayer$2.invoke(MusicPlayer.kt:59)
    2022-01-07T21:12:51.564963307Z at dev.schlaubi.mikmusic.player.MusicPlayer$special$$inlined$on$default$2$1.invokeSuspend(EventSource.kt:43)
    2022-01-07T21:12:51.565288025Z at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    2022-01-07T21:12:51.565613665Z at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    2022-01-07T21:12:51.565696052Z at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:39)
    2022-01-07T21:12:51.565701803Z at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
    2022-01-07T21:12:51.565704217Z at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    2022-01-07T21:12:51.565706553Z at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
    2022-01-07T21:12:51.565708937Z at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    2022-01-07T21:12:51.565711081Z at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
    
    bug 
    opened by DRSchlaubi 1
  • Update dependency se.michaelthelin.spotify:spotify-web-api-java to v7.3.0

    Update dependency se.michaelthelin.spotify:spotify-web-api-java to v7.3.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | se.michaelthelin.spotify:spotify-web-api-java | 7.2.2 -> 7.3.0 | age | adoption | passing | confidence |


    Release Notes

    spotify-web-api-java/spotify-web-api-java

    v7.3.0

    Compare Source


    Configuration

    đź“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update google-github-actions/setup-gcloud action to v1

    Update google-github-actions/setup-gcloud action to v1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | google-github-actions/setup-gcloud | action | major | v0 -> v1 |


    Release Notes

    google-github-actions/setup-gcloud

    v1

    Compare Source

    This is the floating v1 release.


    Configuration

    đź“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update google-github-actions/auth action to v1

    Update google-github-actions/auth action to v1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | google-github-actions/auth | action | major | v0 -> v1 |


    Release Notes

    google-github-actions/auth

    v1

    Compare Source

    Floating v1 alias


    Configuration

    đź“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update dependency org.pf4j:pf4j to v3.8.0

    Update dependency org.pf4j:pf4j to v3.8.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | org.pf4j:pf4j (source) | 3.7.0 -> 3.8.0 | age | adoption | passing | confidence |


    Release Notes

    pf4j/pf4j

    v3.8.0

    Compare Source

    Fixed
    • [#​492]: Loading extensions crashes kotlin application
    • [#​508]: Not create extensions.idx if no extensions exist
    Changed
    • Make ServiceProviderExtensionFinder optional in demo (commented code)
    Added
    • Add support for reading plugin descriptor from zip
    • Use logger instead of System.out.println for demo
    Removed

    Configuration

    đź“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update dependency org.ow2.asm:asm to v9.4

    Update dependency org.ow2.asm:asm to v9.4

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | org.ow2.asm:asm (source) | 9.3 -> 9.4 | age | adoption | passing | confidence |


    Configuration

    đź“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
Owner
Michael Rittmeister
I do Kotlin. Sometimes it even works
Michael Rittmeister
🌨️ Simple, intuitive, and opinionated command handling library for Kord

??️ Snow Simple, intuitive, and opinionated command handling library for Kord Why? Since I maintain two Discord bots, both in Kotlin, Nino and Noel (p

Noel ʕ •ᴥ•ʔ 1 Jan 16, 2022
đź“š Sample Android Components Architecture on a modular word focused on the scalability, testability and maintainability written in Kotlin, following best practices using Jetpack.

Android Components Architecture in a Modular Word Android Components Architecture in a Modular Word is a sample project that presents modern, 2020 app

Madalin Valceleanu 2.3k Dec 30, 2022
Jetpack Compose for Desktop and Web, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.

Jetpack Compose for Desktop and Web, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.

JetBrains 10k Jan 7, 2023
Modular Android architecture which showcase Kotlin, MVVM, Navigation, Hilt, Coroutines, Jetpack compose, Retrofit, Unit test and Kotlin Gradle DSL.

SampleCompose Modular Android architecture which showcase Kotlin, MVVM, Navigation, Hilt, Coroutines, Jetpack compose, Retrofit, Unit test and Kotlin

Mohammadali Rezaei 7 Nov 28, 2022
FunFacts is an example of Modular architecture

FunFacts FunFacts is an example of Modular architecture This Project is built using Kotlin,we will use in this App : Modular architecture Dependency I

Sachin Rajput 48 Jan 1, 2023
ProgramaciĂłn - 02 ProgramaciĂłn Estructurada y Modular. 1DAM. Curso 2022-2023

ProgramaciĂłn - 02 ProgramaciĂłn Estructurada y Modular Tema 02 ProgramaciĂłn Estructurada y Modular. 1DAM. Curso 2022/2023. ProgramaciĂłn - 02 Programaci

José Luis González Sánchez 31 Dec 29, 2022
FirestoreCleanArchitectureApp is an app built with Kotlin and Firestore that displays data in real-time using the MVVM Architecture Pattern. For the UI it uses Jetpack Compose, Android's modern toolkit for building native UI.

FirestoreCleanArchitectureApp FirestoreCleanArchitectureApp is an app built with Kotlin and Cloud Firestore that displays data in real-time using Andr

Alex 66 Dec 15, 2022
intera.kt is a Kotlin library for interacting with the Discord Interactions API through a gateway service or a REST API.

?? Overview ⚠️ WARNING: intera.kt is a work in progress. It is not yet ready for use. You may encounter bugs and other issues, but please report if yo

Pedro Henrique 1 Nov 30, 2021
intera.kt is a Kotlin library for interacting with the Discord Interactions API through a gateway service or a REST API.

?? Overview ⚠️ WARNING: intera.kt is a work in progress. It is not yet ready for use. You may encounter bugs and other issues, but please report if yo

Pedro Henrique 1 Nov 30, 2021
A webapp which generates a simple Discord profile banner image in real-time which shows user's status and activity.

DiscordProfileBanner This tool generates a Discord profile banner image in realtime. I wrote it for use in my AniList profile. An example in action: H

Quanta 11 Oct 17, 2022
Discode - Discord-like app that executes code in messages

Like Discord, but you can paste and run code in the chat About This is a Discord

Iulian Rusu 1 Jan 24, 2022
Discord bot interface for Spring Initializr

Spring Initializr interface over Discord. Initialize your new Spring Boot project right in the app.

Mikhail Titov 1 Mar 7, 2022
This is a template to help you get started building amazing Kotlin applications and libraries.

Welcome to the Starter This is a template to help you get started building amazing Kotlin applications and libraries. Over time, examples will be comp

Backbone 8 Nov 4, 2022
Template for building CLI tool in Kotlin and producing native binary

Kotlin command-line native tool template This template allows you to quickly build command-line tool using Kotlin , Clikt and build a native binary fo

Ryszard Grodzicki 10 Dec 31, 2022
A lightweight tool for managing and building Kotlin projects.

kpm kpm (Kotlin Project Manager) is a lightweight tool for managing and building Kotlin projects. What is kpm? Essentially, kpm is going to be a light

Conor Byrne 5 Apr 23, 2022
Building Web Applications with React and Kotlin JS Hands-On Lab

Building Web Applications with React and Kotlin JS Hands-On Lab This repository is the code corresponding to the hands-on lab Building Web Application

Brian Donnoe 0 Nov 13, 2021
Provides Ktor Server libs for building awesome Kotlin plugins which needs to provide builtin HTTP servers

Ktor Plugin Provides Ktor Server libs for building awesome Kotlin plugins which needs to provide builtin HTTP servers. Requires: https://github.com/Po

null 0 Nov 13, 2021
A forkable starter for building your own recipes and deploying them on the Moderne SaaS

Rewrite recipe starter This repository serves as a template for building your own recipe JARs and publishing them to a repository where they can be ap

Moderne, Inc. 6 Oct 7, 2022
Meetups microservice, applying tactical DDD building blocks and in a real example.

Meetups microservice: Applying tactical DDD Description This project is a practical example to understand the tactical patterns/building-blocks that d

Albert Llousas Ortiz 6 Aug 2, 2022