Skip to content

Commit

Permalink
Finish
Browse files Browse the repository at this point in the history
  • Loading branch information
guimc233 committed Feb 18, 2023
1 parent 974571f commit 22c2d17
Show file tree
Hide file tree
Showing 11 changed files with 199 additions and 257 deletions.
10 changes: 0 additions & 10 deletions .run/RunMiraiKt.run.xml

This file was deleted.

10 changes: 9 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
val kotlinVersion = "1.6.10"
val kotlinVersion = "1.6.21"
kotlin("jvm") version kotlinVersion
kotlin("plugin.serialization") version kotlinVersion

Expand All @@ -9,9 +9,17 @@ plugins {
group = "ltd.guimc.mirai-group-verify"
version = "0.1.0"

dependencies {
implementation("org.json:json:20200518")
}

repositories {
if (System.getenv("CI")?.toBoolean() != true) {
maven("https://maven.aliyun.com/repository/public") // 阿里云国内代理仓库
}
mavenCentral()
}

mirai {
jvmTarget = JavaVersion.VERSION_11
}
91 changes: 0 additions & 91 deletions src/main/java/org/example/mirai/plugin/JavaPluginMain.java

This file was deleted.

118 changes: 0 additions & 118 deletions src/main/kotlin/PluginMain.kt

This file was deleted.

44 changes: 44 additions & 0 deletions src/main/kotlin/ltd/guimc/mirai/groupverify/PluginMain.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package ltd.guimc.mirai.groupverify

import ltd.guimc.mirai.groupverify.listener.MemberListener
import net.mamoe.mirai.console.permission.Permission
import net.mamoe.mirai.console.permission.PermissionId
import net.mamoe.mirai.console.permission.PermissionService
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescription
import net.mamoe.mirai.console.plugin.jvm.KotlinPlugin
import net.mamoe.mirai.event.events.MemberJoinEvent
import net.mamoe.mirai.event.globalEventChannel

object PluginMain : KotlinPlugin(
JvmPluginDescription(
id = "ltd.guimc.mirai.groupverify",
name = "Mirai Group Verify",
version = "0.1.0"
) {
author("BakaBotTeam")
}
) {
lateinit var rootPerm: Permission
lateinit var enablePerm: Permission

override fun onEnable() {
logger.info("Mirai Group Verify 正在加载的路上了喵~")
registerPerms()
registerEvents()
logger.info("Mirai Group Verify 加载好啦喵~")
}

override fun onDisable() {
logger.info("Mirai Group Verify 正在关闭呢...")
logger.info("Mirai Group Verify 已关闭了喵")
}

private fun registerPerms() = PermissionService.INSTANCE.run {
rootPerm = register(PermissionId("ltd.guimc.mirai.groupverify", "*"), "Root Permission")
enablePerm = register(PermissionId("ltd.guimc.mirai.groupverify", "enable"), "启用插件 (群)")
}

private fun registerEvents() = this.globalEventChannel().run {
subscribeAlways<MemberJoinEvent> { event -> MemberListener.onEvent(event) }
}
}
12 changes: 12 additions & 0 deletions src/main/kotlin/ltd/guimc/mirai/groupverify/config/Config.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ltd.guimc.mirai.groupverify.config

import net.mamoe.mirai.console.data.AutoSavePluginConfig
import net.mamoe.mirai.console.data.value

object Config : AutoSavePluginConfig("config") {
var backendUrl by value("http://example.com:5566/verify")

var secret by value("xxx")

var appid by value("xxx_xxx_xxxxxxxxxxxx")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package ltd.guimc.mirai.groupverify.listener

import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import ltd.guimc.mirai.groupverify.PluginMain
import ltd.guimc.mirai.groupverify.config.Config
import ltd.guimc.mirai.groupverify.utils.APIUtils
import net.mamoe.mirai.console.permission.PermissionService.Companion.hasPermission
import net.mamoe.mirai.console.permission.PermitteeId.Companion.permitteeId
import net.mamoe.mirai.contact.Member
import net.mamoe.mirai.contact.MemberPermission
import net.mamoe.mirai.contact.NormalMember
import net.mamoe.mirai.contact.checkBotPermission
import net.mamoe.mirai.event.events.MemberJoinEvent
import net.mamoe.mirai.message.data.At
import net.mamoe.mirai.message.data.PlainText
import java.util.*

object MemberListener {
suspend fun onEvent(event: MemberJoinEvent) {
if (event.group.permitteeId.hasPermission(PluginMain.enablePerm)) {
event.group.checkBotPermission(MemberPermission.ADMINISTRATOR) { "权限不足" }
event.member.mute(2592000) // 30 Days

val session = APIUtils.newSession(event.member)
event.group.sendMessage(
At(event.member)+
PlainText(" 你好呀! 进入本群,你需要先完成以下的人机验证!\n" +
"请点击下面的链接来开始验证\n\n" +
"${Config.backendUrl}?session=$session")
)
statusListenerRegister(event.member, session)
}
}

@OptIn(DelicateCoroutinesApi::class)
private fun statusListenerRegister(member: Member, session: String) {
Timer().schedule(
object : TimerTask() {
override fun run() {
GlobalScope.launch {
if (statusTimerTask(member, session)) cancel()
}
}
}, 2, 2
)
}

private suspend fun statusTimerTask(member: Member, session: String): Boolean {
val status = APIUtils.getStatus(session)
if (status == 1) {
member.group.sendMessage(
At(member)+
PlainText(" 你已经完成了验证 现在可以正常发言了!")
)
(member as NormalMember).unmute()
return true
} else if (status == 2) {
member.group.sendMessage(
At(member)+
PlainText(" 你的验证超时 请重新进群")
)
(member as NormalMember).kick("人机验证超时")
return true
}
return false
}
}
Loading

0 comments on commit 22c2d17

Please sign in to comment.