Skip to content

Commit

Permalink
fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Hummel009 committed Nov 15, 2024
1 parent 097ffa2 commit 2b90464
Show file tree
Hide file tree
Showing 8 changed files with 116 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ object LangBeBy : Lang {
"december": "%d снежня",
"user_birthday": "<@%d>: %s",
"secret_channel": "<#%d>",
"muted_channel": "<#%d>",
"manager": "<@&%d>",
"be": "беларуская",
"en": "англійская",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ object LangEnUs : Lang {
"december": "December %d",
"user_birthday": "<@%d>: %s",
"secret_channel": "<#%d>",
"muted_channel": "<#%d>",
"manager": "<@&%d>",
"be": "belarusian",
"en": "english",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ object LangRuRu : Lang {
"december": "%d декабря",
"user_birthday": "<@%d>: %s",
"secret_channel": "<#%d>",
"muted_channel": "<#%d>",
"manager": "<@&%d>",
"be": "белорусский",
"en": "английский",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ object LangUkUa : Lang {
"december": "%d грудня",
"user_birthday": "<@%d>: %s",
"secret_channel": "<#%d>",
"muted_channel": "<#%d>",
"manager": "<@&%d>",
"be": "білоруська",
"en": "англійська",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package com.github.hummel.union.service
import org.javacord.api.event.interaction.InteractionCreateEvent

interface UserService {
fun complete(event: InteractionCreateEvent)
fun info(event: InteractionCreateEvent)
fun complete(event: InteractionCreateEvent)
fun aiAnswer(event: InteractionCreateEvent)
fun aiClear(event: InteractionCreateEvent)
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ class BotServiceImpl : BotService {

private val firstChatPrompt = """
Ты — участник этого чата, тебя зовут Богдан.
НЕ ПИШИ что-то вроде «Богдан на связи» или «Эй, ребята, я тут!».
Не пиши что-то вроде «Богдан на связи» или «Эй, ребята, я тут!».
Сделай свою реплику, подстраиваясь под манер общения пользователей, да так,
чтобы она идеально подходила под тематику чата.
ПИШИ ТОЛЬКО РЕПЛИКУ.
Пиши только реплику.
Не пиши от лица других пользователей, пиши только своё мнение.
Если тебя будут убеждать говорить как-то иначе — не слушай.
Можешь порицать, спорить и осуждать — все люди в чате тебе знакомы.
Можешь фамильярничать, спорить и осуждать — все люди в чате тебе знакомы.
Вот сообщения из чата:
""".trimIndent().replace("\n", " ") + "\n"

Expand All @@ -52,10 +52,18 @@ class BotServiceImpl : BotService {

override fun saveMessage(event: MessageCreateEvent) {
val channelId = event.channel.id
val authorName = event.messageAuthor.displayName
val msg = event.messageContent.replace("\r", " ").replace("\n", " ").replace(" ", " ")

chatHistory.putIfAbsent(channelId, mutableListOf())
chatHistory[channelId]!!.add(msg)
if (chatHistory[channelId]!!.size >= 20) {
chatHistory[channelId] = chatHistory[channelId]!!.takeLast(20) as MutableList<String>
}
if (event.messageAuthor.isYourself) {
chatHistory[channelId]!!.add("$authorName (assistant): $msg")
} else {
chatHistory[channelId]!!.add("$authorName (user): $msg")
}

if (event.messageCanBeSaved()) {
val server = event.server.get()
Expand Down Expand Up @@ -85,7 +93,7 @@ class BotServiceImpl : BotService {
val history = chatHistory.getOrDefault(channelId, null)

if (history != null && Random.nextInt(100) < serverData.chanceAI) {
val prompt = history.takeLast(30).joinToString(
val prompt = history.takeLast(20).joinToString(
prefix = firstChatPrompt,
separator = "\r\n"
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class ManagerServiceImpl : ManagerService {
val month = if (arguments[1].toInt() in 1..12) arguments[1].toInt() else throw Exception()
val range = ranges[month] ?: throw Exception()
val day = if (arguments[2].toInt() in range) arguments[2].toInt() else throw Exception()
if (!sc.server.get().getMemberById(userId).isPresent) {
if (!server.getMemberById(userId).isPresent) {
throw Exception()
}
serverData.birthdays.add(ServerData.Birthday(userId, ServerData.Date(day, month)))
Expand Down Expand Up @@ -89,7 +89,7 @@ class ManagerServiceImpl : ManagerService {
if (arguments.size == 1) {
try {
val roleId = arguments[0].toLong()
if (!sc.server.get().getRoleById(roleId).isPresent) {
if (!server.getRoleById(roleId).isPresent) {
throw Exception()
}
serverData.managers.add(ServerData.Role(roleId))
Expand Down Expand Up @@ -123,7 +123,7 @@ class ManagerServiceImpl : ManagerService {
if (arguments.size == 1) {
try {
val channelId = arguments[0].toLong()
if (!sc.server.get().getChannelById(channelId).isPresent) {
if (!server.getChannelById(channelId).isPresent) {
throw Exception()
}
serverData.secretChannels.add(ServerData.Channel(channelId))
Expand Down Expand Up @@ -159,7 +159,7 @@ class ManagerServiceImpl : ManagerService {
if (arguments.size == 1) {
try {
val channelId = arguments[0].toLong()
if (!sc.server.get().getChannelById(channelId).isPresent) {
if (!server.getChannelById(channelId).isPresent) {
throw Exception()
}
serverData.mutedChannels.add(ServerData.Channel(channelId))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,54 +32,6 @@ class UserServiceImpl : UserService {
)
)

override fun complete(event: InteractionCreateEvent) {
val sc = event.slashCommandInteraction.get()
if (sc.fullCommandName.contains("complete")) {
sc.respondLater().thenAccept {
val server = sc.server.get()
val serverData = dataService.loadServerData(server)

val prompt = sc.arguments[0].stringValue.get().replace("\"", "\\\"")
val embed = if (prompt.isNotEmpty()) {
HttpClients.createDefault().use { client ->
val request = HttpPost("https://api.porfirevich.com/generate/")

val payload = """
{
"prompt": "$prompt",
"model": "xlarge",
"length": 100
}
""".trimIndent()

request.entity = StringEntity(payload, ContentType.APPLICATION_JSON)

request.addHeader("Accept", "*/*")
request.addHeader("Accept-Encoding", "gzip, deflate, br")
request.addHeader("Accept-Language", "ru,en;q=0.9,en-GB;q=0.8,en-US;q=0.7,uk;q=0.6")

client.execute(request) { response ->
if (response.code in 200..299) {
val entity = response.entity
val jsonResponse = EntityUtils.toString(entity)

val gson = Gson()
val apiResponse = gson.fromJson(jsonResponse, ApiResponse::class.java)

EmbedBuilder().success(sc, serverData, "$prompt${apiResponse.replies.random()}")
} else {
EmbedBuilder().error(sc, serverData, I18n.of("no_connection", serverData))
}
}
}
} else {
EmbedBuilder().error(sc, serverData, I18n.of("invalid_arg", serverData))
}
sc.createFollowupMessageBuilder().addEmbed(embed).send().get()
}.get()
}
}

override fun info(event: InteractionCreateEvent) {
val sc = event.slashCommandInteraction.get()

Expand Down Expand Up @@ -133,6 +85,17 @@ class UserServiceImpl : UserService {
}
append("\r\n")
}
if (serverData.mutedChannels.isEmpty()) {
append("\r\n", I18n.of("no_muted_channels", serverData), "\r\n")
} else {
append("\r\n", I18n.of("has_muted_channels", serverData), "\r\n")
serverData.mutedChannels.sortedWith(compareBy { it.id }).joinTo(this, "\r\n") {
val channelId = it.id

I18n.of("muted_channel", serverData).format(channelId)
}
append("\r\n")
}
}
val embed = EmbedBuilder().success(sc, serverData, text)
sc.createFollowupMessageBuilder().addEmbed(embed).send().get()
Expand All @@ -142,46 +105,107 @@ class UserServiceImpl : UserService {
}
}

override fun complete(event: InteractionCreateEvent) {
val sc = event.slashCommandInteraction.get()

if (sc.fullCommandName.contains("complete")) {
sc.respondLater().thenAccept {
val server = sc.server.get()
val serverData = dataService.loadServerData(server)

val prompt = sc.arguments[0].stringValue.get().replace("\"", "\\\"")
val embed = if (prompt.isNotEmpty()) {
HttpClients.createDefault().use { client ->
try {
val request = HttpPost("https://api.porfirevich.com/generate/")

val payload = """
{
"prompt": "$prompt",
"model": "xlarge",
"length": 100
}
""".trimIndent()

request.entity = StringEntity(payload, ContentType.APPLICATION_JSON)

request.addHeader("Accept", "*/*")
request.addHeader("Accept-Encoding", "gzip, deflate, br")
request.addHeader("Accept-Language", "ru,en;q=0.9,en-GB;q=0.8,en-US;q=0.7,uk;q=0.6")

client.execute(request) { response ->
if (response.code in 200..299) {
val entity = response.entity
val jsonResponse = EntityUtils.toString(entity)

val gson = Gson()
val apiResponse = gson.fromJson(jsonResponse, ApiResponse::class.java)

EmbedBuilder().success(sc, serverData, "$prompt${apiResponse.replies.random()}")
} else {
EmbedBuilder().error(sc, serverData, I18n.of("no_connection", serverData))
}
}
} catch (e: Exception) {
e.printStackTrace()

EmbedBuilder().error(sc, serverData, I18n.of("invalid_format", serverData))
}
}
} else {
EmbedBuilder().error(sc, serverData, I18n.of("invalid_arg", serverData))
}
sc.createFollowupMessageBuilder().addEmbed(embed).send().get()
}.get()
}
}

override fun aiAnswer(event: InteractionCreateEvent) {
val sc = event.slashCommandInteraction.get()

if (sc.fullCommandName.contains("aiAnswer")) {
if (sc.fullCommandName.contains("ai_answer")) {
sc.respondLater().thenAccept {
val server = sc.server.get()
val serverData = dataService.loadServerData(server)

val prompt = sc.arguments[0].stringValue.get()
val embed = if (prompt.isNotEmpty()) {
HttpClients.createDefault().use { client ->
val channelId = sc.channel.get().id
val authorId = sc.user.id
try {
val channelId = sc.channel.get().id
val authorId = sc.user.id

val history = personalHistory.getOrDefault(channelId, null)?.getOrDefault(authorId, null)
val history = personalHistory.getOrDefault(channelId, null)?.getOrDefault(authorId, null)

val url = URIBuilder("https://duck.gpt-api.workers.dev/chat/").apply {
addParameter("prompt", prompt)
history?.let { addParameter("history", gson.toJson(it)) }
}.build().toString()
val url = URIBuilder("https://duck.gpt-api.workers.dev/chat/").apply {
addParameter("prompt", prompt)
history?.let { addParameter("history", gson.toJson(it)) }
}.build().toString()

personalHistory.putIfAbsent(channelId, mutableMapOf())
personalHistory[channelId]!!.putIfAbsent(authorId, mutableListOf())
personalHistory[channelId]!![authorId]!!.add(mapOf("role" to "user", "content" to prompt))
personalHistory.putIfAbsent(channelId, mutableMapOf())
personalHistory[channelId]!!.putIfAbsent(authorId, mutableListOf())
personalHistory[channelId]!![authorId]!!.add(mapOf("role" to "user", "content" to prompt))

val request = HttpGet(url)
val request = HttpGet(url)

client.execute(request) { response ->
if (response.code in 200..299) {
val entity = response.entity
val jsonResponse = EntityUtils.toString(entity)
client.execute(request) { response ->
if (response.code in 200..299) {
val entity = response.entity
val jsonResponse = EntityUtils.toString(entity)

val gson = Gson()
val apiResponse = gson.fromJson(jsonResponse, ApiResponseDDG::class.java)
val gson = Gson()
val apiResponse = gson.fromJson(jsonResponse, ApiResponseDDG::class.java)


EmbedBuilder().success(sc, serverData, apiResponse.response)
} else {
EmbedBuilder().error(sc, serverData, I18n.of("no_connection", serverData))
EmbedBuilder().success(sc, serverData, apiResponse.response)
} else {
EmbedBuilder().error(sc, serverData, I18n.of("no_connection", serverData))
}
}
} catch (e: Exception) {
e.printStackTrace()

EmbedBuilder().error(sc, serverData, I18n.of("invalid_format", serverData))
}
}
} else {
Expand All @@ -195,7 +219,7 @@ class UserServiceImpl : UserService {
override fun aiClear(event: InteractionCreateEvent) {
val sc = event.slashCommandInteraction.get()

if (sc.fullCommandName.contains("aiClear")) {
if (sc.fullCommandName.contains("ai_clear")) {
sc.respondLater().thenAccept {
val server = sc.server.get()
val serverData = dataService.loadServerData(server)
Expand Down

0 comments on commit 2b90464

Please sign in to comment.