From 7d1e4782606e45f8939d7ae44d7a61db764479d5 Mon Sep 17 00:00:00 2001 From: MrBesen Date: Sat, 2 Jan 2021 17:48:26 +0100 Subject: [PATCH] feedback callback --- .../java/de/mrbesen/telegram/TelegramAPI.java | 7 ++++- .../telegram/commands/FeedbackCommand.java | 26 ++++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/mrbesen/telegram/TelegramAPI.java b/src/main/java/de/mrbesen/telegram/TelegramAPI.java index 85a58da..7cc08c1 100644 --- a/src/main/java/de/mrbesen/telegram/TelegramAPI.java +++ b/src/main/java/de/mrbesen/telegram/TelegramAPI.java @@ -69,7 +69,7 @@ public class TelegramAPI implements Runnable { private CommandManager cmdmgr = new CommandManager(this); private EventManager evntmgr = new EventManager(); - private FeedbackCommand feedbackCmd; + private FeedbackCommand feedbackCmd = null; //async private AsyncHandler async = null; @@ -291,6 +291,11 @@ public class TelegramAPI implements Runnable { async.enque(t); } + public void setFeedbackCallback(Function clb) { + if(!disableFeedback && feedbackCmd != null) + feedbackCmd.setFeedbackCallback(clb); + } + public TFile getFile(final String fileid) throws IOException { JSONObject jfile = request("getFile", "file_id=" + fileid); return new TFile(jfile.getJSONObject("result")); diff --git a/src/main/java/de/mrbesen/telegram/commands/FeedbackCommand.java b/src/main/java/de/mrbesen/telegram/commands/FeedbackCommand.java index d16b95f..3553402 100644 --- a/src/main/java/de/mrbesen/telegram/commands/FeedbackCommand.java +++ b/src/main/java/de/mrbesen/telegram/commands/FeedbackCommand.java @@ -8,11 +8,13 @@ import de.mrbesen.telegram.event.events.UserSendMessageEvent; import de.mrbesen.telegram.objects.TInlineKeyboardMarkup; import de.mrbesen.telegram.objects.TMessage; import de.mrbesen.telegram.objects.TUser; +import lombok.Setter; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.TreeMap; +import java.util.function.Function; public class FeedbackCommand implements JSONCommandHandler { @@ -22,6 +24,8 @@ public class FeedbackCommand implements JSONCommandHandler { protected final TelegramAPI api; protected final List admins; protected final static String CANCELFEEDBACK = "cancelfeedback", REPLYFEEDBACK = "replyFeedback "; + @Setter + private Function feedbackCallback = null; public FeedbackCommand(TelegramAPI api, List admins) { @@ -54,19 +58,19 @@ public class FeedbackCommand implements JSONCommandHandler { public boolean onMsg(UserSendMessageEvent e) { TUser user = e.getUser(); TMessage msg = e.getMessage(); - if (awaitingFeedback.containsKey(user.getID())) { + if (awaitingFeedback.containsKey(user.getID())) { //user send a feedback removeMsg(user.getID(), e.getMessage()); if(isFeedback(msg.getText())) { //fwd to admins admins.forEach(a -> TMessage.forwardAsync(api, a, msg)); - MessageBuilder mb = createInfo(user, msg.getMessageID()); + MessageBuilder mb = createInfo(user, msg.getMessageID(), true); admins.forEach(a -> api.sendMessage(mb.setReciver(a).build())); } else { System.out.println("feedback omitted: " + msg.getText()); } return true; - } else { + } else { //reply to a message Long[] rplymsg = awnser.remove(user.getID()); if(rplymsg != null) { if(admins.contains(user.getID())) { @@ -86,7 +90,7 @@ public class FeedbackCommand implements JSONCommandHandler { TMessage.forwardAsync(api, rplymsg[0], msg); //send info - MessageBuilder mb = createInfo(user, msg.getMessageID()); + MessageBuilder mb = createInfo(user, msg.getMessageID(), false); api.sendMessage(mb.setReciver(rplymsg[0]).setReplyTo(Math.toIntExact(rplymsg[1])).build()); } System.out.println("Feedback reply from " + user.getID() + " to " + rplymsg[0] + ":" + rplymsg[1] + " send."); @@ -96,12 +100,22 @@ public class FeedbackCommand implements JSONCommandHandler { return false; } - protected MessageBuilder createInfo(TUser u, int msgid) { + protected MessageBuilder createInfo(TUser u, int msgid, boolean firstmsg) { String info = "Feedbackinfo:\n" + "userid: " + u.getID() + "\nusername: " + u.getName() + "\nfullname: " + u.getFirstName() + ' ' + u.getLastName(); + + if(firstmsg && feedbackCallback != null) { + try { + info += '\n' + feedbackCallback.apply(u); + } catch (Throwable t) { + info += "\nError getting information: " + t.getMessage(); + t.printStackTrace(); + } + } + TInlineKeyboardMarkup markup = new TInlineKeyboardMarkup(1); markup.addUrlButton("chat with user", "https://t.me/" + u.getName(), 1); markup.addCallbackButton("↩ reply", buildRplyCallback(u.getID(), msgid), 1); - return new MessageBuilder().setAsync().setText(info).setMarkup(markup); + return new MessageBuilder().setAsync().setText(info).setFormatting(MessageBuilder.Formatting.HTML).setMarkup(markup); } public boolean onCallback(UserCallbackEvent e) {