简单的事件分发系统,log时间戳和线程记录

This commit is contained in:
A.C.Sukazyo Eyre 2021-11-07 16:13:20 +08:00
parent aed6212ff1
commit 928359034a
Signed by: Eyre_S
GPG Key ID: EFB47D98FE082FAD
9 changed files with 251 additions and 36 deletions

View File

@ -3,7 +3,7 @@ plugins {
} }
group 'cc.sukazyo' group 'cc.sukazyo'
version '0.1' version '0.1.1'
repositories { repositories {
mavenCentral() mavenCentral()

View File

@ -5,10 +5,7 @@ public class Logger {
public static final Logger logger = new Logger(); public static final Logger logger = new Logger();
public void info(String message) { public void info(String message) {
System.out.println( System.out.println(formatMessage(message, "INFO"));
"[INFO]" +
message.replaceAll("\\n", "\n[INFO]")
);
} }
public void warn (String message) { public void warn (String message) {
@ -16,9 +13,17 @@ public class Logger {
} }
public void waring (String message) { public void waring (String message) {
System.out.println( System.out.println(formatMessage(message, "WARN"));
"[WARN]" + }
message.replaceAll("\\n", "\n[WARN]")
private String formatMessage (String message, String level) {
String levelStr = "\n["+level+"]";
return String.format(
"[%d][%s][%s]%s",
System.currentTimeMillis(),
Thread.currentThread().getName(),
level,
message.replaceAll("\\n", levelStr)
); );
} }

View File

@ -1,6 +1,7 @@
package cc.sukazyo.cono.morny; package cc.sukazyo.cono.morny;
import cc.sukazyo.cono.morny.bot.OnUpdate; import cc.sukazyo.cono.morny.bot.api.OnUpdate;
import cc.sukazyo.cono.morny.bot.event.EventListeners;
import com.pengrad.telegrambot.TelegramBot; import com.pengrad.telegrambot.TelegramBot;
import com.pengrad.telegrambot.request.GetMe; import com.pengrad.telegrambot.request.GetMe;
@ -20,6 +21,7 @@ public class MornyCoeur {
logger.info("Bot login succeed."); logger.info("Bot login succeed.");
EventListeners.registerAllListeners();
account.setUpdatesListener(OnUpdate::onNormalUpdate); account.setUpdatesListener(OnUpdate::onNormalUpdate);
logger.info("System start complete"); logger.info("System start complete");

View File

@ -1,21 +0,0 @@
package cc.sukazyo.cono.morny.bot;
import com.pengrad.telegrambot.UpdatesListener;
import com.pengrad.telegrambot.model.Update;
import java.util.List;
public class OnUpdate {
public static int onNormalUpdate (List<Update> updates) {
for (Update update : updates) {
if (update.message() != null) {
if (update.message().text() != null) {
new Thread(() -> OnCommandExecute.searchForCommands(update)).start();
}
}
}
return UpdatesListener.CONFIRMED_UPDATES_ALL;
}
}

View File

@ -0,0 +1,60 @@
package cc.sukazyo.cono.morny.bot.api;
import com.pengrad.telegrambot.model.Update;
@SuppressWarnings("unused")
public abstract class EventListener {
public boolean onMessage (Update update) {
return false;
}
public boolean onEditedMessage (Update update) {
return false;
}
public boolean onChannelPost (Update update) {
return false;
}
public boolean onEditedChannelPost (Update update) {
return false;
}
public boolean onInlineQuery (Update update) {
return false;
}
public boolean onChosenInlineResult (Update update) {
return false;
}
public boolean onCallbackQuery (Update update) {
return false;
}
public boolean onShippingQuery (Update update) {
return false;
}
public boolean onPreCheckoutQuery (Update update) {
return false;
}
public boolean onPoll (Update update) {
return false;
}
public boolean onPollAnswer (Update update) {
return false;
}
public boolean onMyChatMemberUpdated (Update update) {
return false;
}
public boolean onChatMemberUpdated (Update update) {
return false;
}
}

View File

@ -0,0 +1,91 @@
package cc.sukazyo.cono.morny.bot.api;
import com.pengrad.telegrambot.model.Update;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import static cc.sukazyo.cono.morny.Logger.logger;
public class EventListenerManager {
private static final List<EventListener> listeners = new ArrayList<>();
private static class EventPublisher extends Thread {
private final Function<EventListener, Boolean> exec;
public EventPublisher(Update update, Function<EventListener, Boolean> exec) {
this.setName("EVT"+update.updateId());
this.exec = exec;
}
@Override
public void run () {
for (EventListener x : listeners) {
if (exec.apply(x)) return;
}
logger.info("event exited undone");
}
}
public static void addListener (EventListener... listeners) {
EventListenerManager.listeners.addAll(Arrays.asList(listeners));
}
public static void publishMessageEvent (Update update) {
new EventPublisher(update, x -> x.onMessage(update)).start();
}
public static void publishEditedMessageEvent (Update update) {
new EventPublisher(update, x -> x.onEditedMessage(update)).start();
}
public static void publishChannelPostEvent (Update update) {
new EventPublisher(update, x -> x.onChannelPost(update)).start();
}
public static void publishEditedChannelPostEvent (Update update) {
new EventPublisher(update, x -> x.onEditedChannelPost(update)).start();
}
public static void publishInlineQueryEvent (Update update) {
new EventPublisher(update, x -> x.onInlineQuery(update)).start();
}
public static void publishChosenInlineResultEvent (Update update) {
new EventPublisher(update, x -> x.onChosenInlineResult(update)).start();
}
public static void publishCallbackQueryEvent (Update update) {
new EventPublisher(update, x -> x.onCallbackQuery(update)).start();
}
public static void publishShippingQueryEvent (Update update) {
new EventPublisher(update, x -> x.onShippingQuery(update)).start();
}
public static void publishPreCheckoutQueryEvent (Update update) {
new EventPublisher(update, x -> x.onPreCheckoutQuery(update)).start();
}
public static void publishPollEvent (Update update) {
new EventPublisher(update, x -> x.onPoll(update)).start();
}
public static void publishPollAnswerEvent (Update update) {
new EventPublisher(update, x -> x.onPollAnswer(update)).start();
}
public static void publishMyChatMemberUpdatedEvent (Update update) {
new EventPublisher(update, x -> x.onMyChatMemberUpdated(update)).start();
}
public static void publishChatMemberUpdatedEvent (Update update) {
new EventPublisher(update, x -> x.onChatMemberUpdated(update)).start();
}
}

View File

@ -0,0 +1,55 @@
package cc.sukazyo.cono.morny.bot.api;
import com.pengrad.telegrambot.UpdatesListener;
import com.pengrad.telegrambot.model.Update;
import java.util.List;
public class OnUpdate {
public static int onNormalUpdate (List<Update> updates) {
for (Update update : updates) {
if (update.message() != null) {
EventListenerManager.publishMessageEvent(update);
}
if (update.editedMessage() != null) {
EventListenerManager.publishEditedMessageEvent(update);
}
if (update.channelPost() != null) {
EventListenerManager.publishChannelPostEvent(update);
}
if (update.editedChannelPost() != null) {
EventListenerManager.publishEditedChannelPostEvent(update);
}
if (update.inlineQuery() != null) {
EventListenerManager.publishInlineQueryEvent(update);
}
if (update.chosenInlineResult() != null) {
EventListenerManager.publishChosenInlineResultEvent(update);
}
if (update.callbackQuery() != null) {
EventListenerManager.publishCallbackQueryEvent(update);
}
if (update.shippingQuery() != null) {
EventListenerManager.publishShippingQueryEvent(update);
}
if (update.preCheckoutQuery() != null) {
EventListenerManager.publishPreCheckoutQueryEvent(update);
}
if (update.poll() != null) {
EventListenerManager.publishPollEvent(update);
}
if (update.pollAnswer() != null) {
EventListenerManager.publishPollAnswerEvent(update);
}
if (update.myChatMember() != null) {
EventListenerManager.publishMyChatMemberUpdatedEvent(update);
}
if (update.chatMember() != null) {
EventListenerManager.publishChatMemberUpdatedEvent(update);
}
}
return UpdatesListener.CONFIRMED_UPDATES_ALL;
}
}

View File

@ -0,0 +1,15 @@
package cc.sukazyo.cono.morny.bot.event;
import cc.sukazyo.cono.morny.bot.api.EventListenerManager;
public class EventListeners {
public static final OnCommandExecute COMMANDS_LISTENER = new OnCommandExecute();
public static void registerAllListeners () {
EventListenerManager.addListener(
COMMANDS_LISTENER
);
}
}

View File

@ -1,20 +1,25 @@
package cc.sukazyo.cono.morny.bot; package cc.sukazyo.cono.morny.bot.event;
import cc.sukazyo.cono.morny.MornyCoeur; import cc.sukazyo.cono.morny.MornyCoeur;
import cc.sukazyo.cono.morny.MornyTrusted; import cc.sukazyo.cono.morny.MornyTrusted;
import cc.sukazyo.cono.morny.bot.api.EventListener;
import com.pengrad.telegrambot.model.Update; import com.pengrad.telegrambot.model.Update;
import com.pengrad.telegrambot.request.SendSticker; import com.pengrad.telegrambot.request.SendSticker;
import static cc.sukazyo.cono.morny.Logger.logger; import static cc.sukazyo.cono.morny.Logger.logger;
public class OnCommandExecute { public class OnCommandExecute extends EventListener {
private static final String ONLINE_STATUS_RETURN_STICKER_ID = "CAACAgEAAx0CW-CvvgAC5eBhhhODGRuu0pxKLwoQ3yMsowjviAACcycAAnj8xgVVU666si1utiIE"; private static final String ONLINE_STATUS_RETURN_STICKER_ID = "CAACAgEAAx0CW-CvvgAC5eBhhhODGRuu0pxKLwoQ3yMsowjviAACcycAAnj8xgVVU666si1utiIE";
private static final String HELLO_STICKER_ID = "CAACAgEAAxkBAAMnYYYWKNXO4ibo9dlsmDctHhhV6fIAAqooAAJ4_MYFJJhrHS74xUAiBA"; private static final String HELLO_STICKER_ID = "CAACAgEAAxkBAAMnYYYWKNXO4ibo9dlsmDctHhhV6fIAAqooAAJ4_MYFJJhrHS74xUAiBA";
private static final String EXIT_STICKER_ID = "CAACAgEAAxkBAAMoYYYWt8UjvP0N405SAyvg2SQZmokAAkMiAAJ4_MYFw6yZLu06b-MiBA"; private static final String EXIT_STICKER_ID = "CAACAgEAAxkBAAMoYYYWt8UjvP0N405SAyvg2SQZmokAAkMiAAJ4_MYFw6yZLu06b-MiBA";
private static final String EXIT_403_STICKER_ID = "CAACAgEAAxkBAAMqYYYa_7hpXH6hMOYMX4Nh8AVYd74AAnQnAAJ4_MYFRdmmsQKLDZgiBA"; private static final String EXIT_403_STICKER_ID = "CAACAgEAAxkBAAMqYYYa_7hpXH6hMOYMX4Nh8AVYd74AAnQnAAJ4_MYFRdmmsQKLDZgiBA";
public static void searchForCommands (Update event) { @Override
public boolean onMessage (Update event) {
if (event.message().text() == null) {
return false;
}
switch (event.message().text()) { switch (event.message().text()) {
case "/o": case "/o":
onCommandOnExec(event); onCommandOnExec(event);
@ -27,10 +32,12 @@ public class OnCommandExecute {
onCommandExitExec(event); onCommandExitExec(event);
break; break;
default: default:
return false;
} }
return true;
} }
private static void onCommandOnExec (Update event) { private void onCommandOnExec (Update event) {
MornyCoeur.getAccount().execute(new SendSticker( MornyCoeur.getAccount().execute(new SendSticker(
event.message().chat().id(), event.message().chat().id(),
ONLINE_STATUS_RETURN_STICKER_ID ONLINE_STATUS_RETURN_STICKER_ID
@ -38,7 +45,7 @@ public class OnCommandExecute {
); );
} }
private static void onCommandHelloExec (Update event) { private void onCommandHelloExec (Update event) {
MornyCoeur.getAccount().execute(new SendSticker( MornyCoeur.getAccount().execute(new SendSticker(
event.message().chat().id(), event.message().chat().id(),
HELLO_STICKER_ID HELLO_STICKER_ID
@ -46,7 +53,7 @@ public class OnCommandExecute {
); );
} }
private static void onCommandExitExec (Update event) { private void onCommandExitExec (Update event) {
if (MornyTrusted.isTrusted(event.message().from().id())) { if (MornyTrusted.isTrusted(event.message().from().id())) {
MornyCoeur.getAccount().execute(new SendSticker( MornyCoeur.getAccount().execute(new SendSticker(
event.message().chat().id(), event.message().chat().id(),
@ -61,6 +68,7 @@ public class OnCommandExecute {
EXIT_403_STICKER_ID EXIT_403_STICKER_ID
).replyToMessageId(event.message().messageId()) ).replyToMessageId(event.message().messageId())
); );
logger.info("403 exited tag from user @" + event.message().from().username());
} }
} }