mirror of
https://github.com/jie65535/mirai-console-j24-plugin.git
synced 2025-06-01 17:29:15 +08:00
added >>, <<, &, | operators
ban mod(%)
This commit is contained in:
parent
13bc96b11b
commit
6b2023bede
@ -20,10 +20,9 @@ object PluginMain : KotlinPlugin(
|
|||||||
|
|
||||||
override fun onEnable() {
|
override fun onEnable() {
|
||||||
logger.info { "Plugin loaded" }
|
logger.info { "Plugin loaded" }
|
||||||
//配置文件目录 "${dataFolder.absolutePath}/"
|
|
||||||
val eventChannel = GlobalEventChannel.parentScope(this)
|
val eventChannel = GlobalEventChannel.parentScope(this)
|
||||||
eventChannel.subscribeMessages {
|
eventChannel.subscribeMessages {
|
||||||
contains("24点") quoteReply {
|
startsWith("24点") quoteReply {
|
||||||
val game = Point24()
|
val game = Point24()
|
||||||
games[this.sender.id] = game
|
games[this.sender.id] = game
|
||||||
"你抽到了 [${game.points[0]}] [${game.points[1]}] [${game.points[2]}] [${game.points[3]}]\n" +
|
"你抽到了 [${game.points[0]}] [${game.points[1]}] [${game.points[2]}] [${game.points[3]}]\n" +
|
||||||
|
@ -1,12 +1,45 @@
|
|||||||
package top.jie65535.j24
|
package top.jie65535.j24
|
||||||
|
|
||||||
import net.objecthunter.exp4j.ExpressionBuilder
|
import net.objecthunter.exp4j.ExpressionBuilder
|
||||||
|
import net.objecthunter.exp4j.operator.Operator
|
||||||
import net.objecthunter.exp4j.shuntingyard.ShuntingYard
|
import net.objecthunter.exp4j.shuntingyard.ShuntingYard
|
||||||
import net.objecthunter.exp4j.tokenizer.NumberToken
|
import net.objecthunter.exp4j.tokenizer.NumberToken
|
||||||
import net.objecthunter.exp4j.tokenizer.Token
|
import net.objecthunter.exp4j.tokenizer.Token
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
|
||||||
class Point24 {
|
class Point24 {
|
||||||
|
companion object {
|
||||||
|
val myOperators = listOf(
|
||||||
|
object : Operator(">>", 2, true, Operator.PRECEDENCE_ADDITION - 1) {
|
||||||
|
override fun apply(vararg args: Double): Double {
|
||||||
|
return (args[0].toInt() shr args[1].toInt()).toDouble()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
object : Operator("<<", 2, true, Operator.PRECEDENCE_ADDITION - 1) {
|
||||||
|
override fun apply(vararg args: Double): Double {
|
||||||
|
return (args[0].toInt() shl args[1].toInt()).toDouble()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
object : Operator("&", 2, true, Operator.PRECEDENCE_ADDITION - 2) {
|
||||||
|
override fun apply(vararg args: Double): Double {
|
||||||
|
return (args[0].toInt() and args[1].toInt()).toDouble()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
object : Operator("|", 2, true, Operator.PRECEDENCE_ADDITION - 3) {
|
||||||
|
override fun apply(vararg args: Double): Double {
|
||||||
|
return (args[0].toInt() or args[1].toInt()).toDouble()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
private val myOperatorMap: Map<String, Operator>
|
||||||
|
init {
|
||||||
|
val m = mutableMapOf<String, Operator>()
|
||||||
|
for (opt in myOperators)
|
||||||
|
m[opt.symbol] = opt
|
||||||
|
myOperatorMap = m
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var points = genPoints()
|
var points = genPoints()
|
||||||
|
|
||||||
fun regenPoints() {
|
fun regenPoints() {
|
||||||
@ -23,10 +56,13 @@ class Point24 {
|
|||||||
fun evaluate(expression: String): Double {
|
fun evaluate(expression: String): Double {
|
||||||
val expr = expression.replace('(', '(').replace(')', ')')
|
val expr = expression.replace('(', '(').replace(')', ')')
|
||||||
|
|
||||||
|
if (expr.contains('%'))
|
||||||
|
throw IllegalArgumentException("禁止使用%运算符")
|
||||||
|
|
||||||
val tokens = ShuntingYard.convertToRPN(
|
val tokens = ShuntingYard.convertToRPN(
|
||||||
expr,
|
expr,
|
||||||
null,
|
null,
|
||||||
mapOf(),
|
myOperatorMap,
|
||||||
null,
|
null,
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
@ -52,6 +88,7 @@ class Point24 {
|
|||||||
throw IllegalArgumentException("必须使用所有数值")
|
throw IllegalArgumentException("必须使用所有数值")
|
||||||
|
|
||||||
return ExpressionBuilder(expr)
|
return ExpressionBuilder(expr)
|
||||||
|
.operator(myOperators)
|
||||||
.implicitMultiplication(false)
|
.implicitMultiplication(false)
|
||||||
.build()
|
.build()
|
||||||
.evaluate()
|
.evaluate()
|
||||||
|
Loading…
Reference in New Issue
Block a user