feedback callback

This commit is contained in:
MrBesen 2021-01-02 17:48:26 +01:00
parent e2eb71a1a6
commit 7d1e478260
Signed by: MrBesen
GPG Key ID: 596B2350DCD67504
2 changed files with 26 additions and 7 deletions

View File

@ -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<TUser, String> 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"));

View File

@ -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<Long> admins;
protected final static String CANCELFEEDBACK = "cancelfeedback", REPLYFEEDBACK = "replyFeedback ";
@Setter
private Function<TUser, String> feedbackCallback = null;
public FeedbackCommand(TelegramAPI api, List<Long> 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) {