用java实现一个禁言功能,检测关键字匹配成功后,禁言10分钟,如何在解禁第一时间通知到用户,时效做到秒级别
时间: 2024-06-12 16:04:36 浏览: 48
实现禁言功能可以通过以下步骤:
1.定义一个禁言列表,记录每个用户禁言状态和禁言结束时间。可以使用map或者数据库等方式存储。
2.在消息处理过程中,检测是否包含禁言关键字,如果匹配成功,则将该用户加入禁言列表,并设置禁言结束时间为当前时间加上10分钟。
3.在用户发送消息前,先检测该用户是否被禁言,如果被禁言,则拒绝发送消息。
4.定时任务每秒检查禁言列表,如果有用户禁言结束时间小于当前时间,则解除禁言,并通知该用户。
以下是java代码实现的示例:
```java
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
public class ForbiddenWords {
// 禁言列表
private static Map<String, Long> forbiddenList = new HashMap<>();
// 添加禁言用户
public static void addForbiddenUser(String userName) {
forbiddenList.put(userName, System.currentTimeMillis() + 10 * 60 * 1000); // 设置禁言结束时间为10分钟后
}
// 检查用户是否被禁言
public static boolean isForbiddenUser(String userName) {
Long endTime = forbiddenList.get(userName);
return endTime != null && endTime > System.currentTimeMillis(); // 判断禁言结束时间是否在当前时间之后
}
// 解除禁言
public static void removeForbiddenUser(String userName) {
forbiddenList.remove(userName); // 从禁言列表中移除该用户
// 发送解禁消息给该用户
System.out.println("您已被解除禁言!");
}
public static void main(String[] args) {
// 定时任务,每秒检查禁言列表
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
for (String userName : forbiddenList.keySet()) {
if (forbiddenList.get(userName) <= System.currentTimeMillis()) {
removeForbiddenUser(userName); // 解除禁言
}
}
}
}, 0, 1000);
// 模拟用户发送消息
String userName = "user1";
String message = "这是一条包含禁言关键字的消息";
if (isForbiddenUser(userName)) {
System.out.println("您已被禁言,请稍后再发言!");
} else {
// 检测消息是否包含禁言关键字
if (message.contains("禁言关键字")) {
addForbiddenUser(userName); // 添加禁言用户
System.out.println("您已被禁言,请10分钟后再发言!");
} else {
System.out.println("您的消息已发送!");
}
}
}
}
```
阅读全文