aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/cc/woverflow/chattils/chat/ChatShortcuts.kt
blob: 50cb73cfd561825746efc27d33599f914e9fd81c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package cc.woverflow.chattils.chat

import cc.woverflow.chattils.Chattils
import cc.woverflow.chattils.utils.ListenableArrayList
import com.google.gson.JsonObject
import com.google.gson.JsonParser
import java.io.File

object ChatShortcuts {
    private val shortcutsFile = File(Chattils.modDir, "chatshortcuts.json")
    private val PARSER = JsonParser()

    private var initialized = false

    val shortcuts = ListenableArrayList<Pair<String, String>>({
        it.sortWith(comparator)
    })
    private val comparator = Comparator<Pair<String, String>> { o1, o2 ->
        return@Comparator o2.first.length.compareTo(o1.first.length)
    }


    fun initialize() {
        if (initialized) {
            return
        } else {
            initialized = true
        }
        if (!shortcutsFile.exists()) {
            shortcutsFile.createNewFile()
            shortcutsFile.writeText(
                JsonObject().toString()
            )
        } else {
            val jsonObj = PARSER.parse(shortcutsFile.readText()).asJsonObject
            for (shortcut in jsonObj.entrySet()) {
                shortcuts.add(shortcut.key to shortcut.value.asString)
            }
        }
    }

    fun removeShortcut(key: String) {
        shortcuts.removeIf { it.first == key }
        val jsonObj = PARSER.parse(shortcutsFile.readText()).asJsonObject
        jsonObj.remove(key)
        shortcutsFile.writeText(jsonObj.toString())
    }

    fun writeShortcut(key: String, value: String) {
        shortcuts.add(key to value)
        val jsonObj = PARSER.parse(shortcutsFile.readText()).asJsonObject
        jsonObj.addProperty(key, value)
        shortcutsFile.writeText(jsonObj.toString())
    }

    fun handleSentCommand(command: String): String {
        shortcuts.forEach {
            if (command == it.first || (command.startsWith(it.first) && command.substringAfter(it.first)
                    .startsWith(" "))
            ) {
                return command.replaceFirst(it.first, it.second)
            }
        }
        return command
    }
}