added TUser.sendMessage and advanced error reporting

This commit is contained in:
mrbesen 2019-02-06 18:32:42 +01:00
parent 5147b40fdc
commit df285ac33c
Signed by: MrBesen
GPG Key ID: 596B2350DCD67504
2 changed files with 65 additions and 43 deletions

View File

@ -38,11 +38,11 @@ public class TelegramAPI implements Runnable {
private Thread thread; private Thread thread;
private boolean run = true; private boolean run = true;
private String helpmessage = "generic helppage\nuse TelegramAPI.setHelpText(java.lang.String) to change this."; private String helpmessage = "generic helppage\nuse TelegramAPI.setHelpText(java.lang.String) to change this.";
private LinkedList<TUser> users = new LinkedList<>(); private LinkedList<TUser> users = new LinkedList<>();
private CommandManager cmdmgr = new CommandManager(); private CommandManager cmdmgr = new CommandManager();
private EventManager evntmgr = new EventManager(); private EventManager evntmgr = new EventManager();
//Log log = new SimpleLog();
Log log = new Log4JLog(); Log log = new Log4JLog();
public TelegramAPI(String apikey) { public TelegramAPI(String apikey) {
@ -71,18 +71,24 @@ public class TelegramAPI implements Runnable {
OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream()); OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
wr.write(parameter); wr.write(parameter);
wr.flush(); wr.flush();
log.log( "request: " + request + " content " + parameter + " -> " + con.getResponseCode() + ", " + con.getResponseMessage()); log.log( "request: " + request + " content " + parameter + " -> " + con.getResponseCode() + ", " + con.getResponseMessage());
Scanner s = new Scanner(con.getInputStream());
StringBuilder sb_apianswer = new StringBuilder();
while(s.hasNextLine()) {
sb_apianswer.append(s.nextLine()).append('\n');
}
s.close();
if(con.getResponseCode() == 200) { if(con.getResponseCode() == 200) {
Scanner s = new Scanner(con.getInputStream());
StringBuilder sb_apianswer = new StringBuilder();
while(s.hasNextLine()) {
sb_apianswer.append(s.nextLine()).append('\n');
}
s.close();
return new JSONObject(sb_apianswer.toString()); return new JSONObject(sb_apianswer.toString());
} else { } else {
throw new IOException("API request returned HTTP " + con.getResponseCode() + " (" + con.getResponseMessage() + ") for action " + request ); String errdesc = "";
try {
JSONObject returned = new JSONObject(sb_apianswer.toString());
errdesc = returned.getString("description");
} catch(Throwable ignore) { }
throw new IOException("API request returned HTTP " + con.getResponseCode() + " (" + con.getResponseMessage() + ") for action " + request + "\nurl: " + url.toString() + "\nparams: " + parameter + "\nerror description: " + errdesc);
} }
} }
@ -92,7 +98,7 @@ public class TelegramAPI implements Runnable {
builder.setText(text); builder.setText(text);
return sendMessage(builder.build()); return sendMessage(builder.build());
} }
public TMessage sendMessage(SendableMessage msg) { public TMessage sendMessage(SendableMessage msg) {
try { try {
JSONObject o = request("sendMessage", msg.getQ()); JSONObject o = request("sendMessage", msg.getQ());
@ -103,20 +109,20 @@ public class TelegramAPI implements Runnable {
return null; return null;
} }
public void sendTypedMessage(final String msg, final TUser user, final int seconds) { public void sendTypedMessage(final String msg, final TUser user, final int seconds) {
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
user.sendStatus(Status.Typing); user.sendStatus(Status.Typing);
try { try {
Thread.sleep(seconds*1000); Thread.sleep(seconds*1000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
}
sendMessage(new MessageBuilder().setText(msg).setReciver(user.getID()).build());
} }
sendMessage(new MessageBuilder().setText(msg).setReciver(user.getID()).build()); }).start();
}
}).start();
} }
public void stop() { public void stop() {
run = false; run = false;
thread.interrupt(); thread.interrupt();
@ -166,7 +172,7 @@ public class TelegramAPI implements Runnable {
msg_offset = (upd.update_id+1 > msg_offset ? upd.update_id+1 : msg_offset); msg_offset = (upd.update_id+1 > msg_offset ? upd.update_id+1 : msg_offset);
} }
} }
public TUser getUser(String name) { public TUser getUser(String name) {
for(TUser us : users) { for(TUser us : users) {
if(us.getName().equals(name)) if(us.getName().equals(name))
@ -217,7 +223,7 @@ public class TelegramAPI implements Runnable {
else else
log = l; log = l;
} }
public CommandManager getCommandManager() { public CommandManager getCommandManager() {
return cmdmgr; return cmdmgr;
} }
@ -231,7 +237,7 @@ public class TelegramAPI implements Runnable {
throw new IllegalArgumentException("UpdateInterval is not allowed to be negative."); throw new IllegalArgumentException("UpdateInterval is not allowed to be negative.");
updateInterval = d; updateInterval = d;
} }
public String getHelpMessage() { public String getHelpMessage() {
return helpmessage; return helpmessage;
} }
@ -250,7 +256,7 @@ public class TelegramAPI implements Runnable {
if(json.has("message")) { if(json.has("message")) {
msg = new TMessage(json.getJSONObject("message"), api); msg = new TMessage(json.getJSONObject("message"), api);
String text = msg.getText(); String text = msg.getText();
if(text != null) { if(text != null) {
if(text.startsWith("/" )) { if(text.startsWith("/" )) {
@ -262,21 +268,21 @@ public class TelegramAPI implements Runnable {
if(getMsg().has(Member.audio)) { if(getMsg().has(Member.audio)) {
e = new UserSendAudioEvent(getUser(), new TAudio((JSONObject) getMsg().get(Member.audio))); e = new UserSendAudioEvent(getUser(), new TAudio((JSONObject) getMsg().get(Member.audio)));
} else if(getMsg().has(Member.video)) { } else if(getMsg().has(Member.video)) {
} else if(getMsg().has(Member.document)) { } else if(getMsg().has(Member.document)) {
} else if(getMsg().has(Member.invoice)) { } else if(getMsg().has(Member.invoice)) {
} else if(getMsg().has(Member.location)) { } else if(getMsg().has(Member.location)) {
} else if(getMsg().has(Member.video_note)) { } else if(getMsg().has(Member.video_note)) {
} else if(getMsg().has(Member.game)) { } else if(getMsg().has(Member.game)) {
} else if(getMsg().has(Member.contact)) { } else if(getMsg().has(Member.contact)) {
} else if(getMsg().has(Member.sticker)) { } else if(getMsg().has(Member.sticker)) {
} else { } else {
e = new UserSendMessageEvent(getMsg()); e = new UserSendMessageEvent(getMsg());
} }

View File

@ -80,6 +80,19 @@ public class TUser {
} }
public boolean sendMessage(String text, TReplyMarkup rm, int reply_to_msg) { public boolean sendMessage(String text, TReplyMarkup rm, int reply_to_msg) {
return sendMessage(api, id, text, rm, reply_to_msg);
}
/**
*
* @param api
* @param userid
* @param text
* @param rm null = no markup
* @param reply_to_msg 0 = no reply
* @return
*/
public static boolean sendMessage(TelegramAPI api, int userid, String text, TReplyMarkup rm, int reply_to_msg) {
if(api == null) { if(api == null) {
System.err.println("api == null!"); System.err.println("api == null!");
return false; return false;
@ -87,7 +100,7 @@ public class TUser {
String replyto = (reply_to_msg > 0 ? "&reply_to_message_id=" +reply_to_msg : ""); String replyto = (reply_to_msg > 0 ? "&reply_to_message_id=" +reply_to_msg : "");
try { try {
String replymarkup = (rm == null ? "" : "&reply_markup=" + URLEncoder.encode(rm.toJSONString(), "UTF-8")); String replymarkup = (rm == null ? "" : "&reply_markup=" + URLEncoder.encode(rm.toJSONString(), "UTF-8"));
return api.request("sendMessage", "chat_id=" + id return api.request("sendMessage", "chat_id=" + userid
+ "&text=" + URLEncoder.encode(text, "UTF-8") + "&text=" + URLEncoder.encode(text, "UTF-8")
+ replymarkup + replyto).getBoolean("ok"); + replymarkup + replyto).getBoolean("ok");
} catch (IOException e) { } catch (IOException e) {
@ -104,11 +117,11 @@ public class TUser {
} }
} }
public void sendImage(String caption, String url) { public boolean sendImage(String caption, String url) {
sendImage(api, id, caption, url); return sendImage(api, id, caption, url);
} }
public static void sendImage(TelegramAPI api, int userid, String caption, String url) { public static boolean sendImage(TelegramAPI api, int userid, String caption, String url) {
try { try {
String cap = ""; String cap = "";
if(caption != null) { if(caption != null) {
@ -118,15 +131,16 @@ public class TUser {
api.request("sendPhoto", "chat_id=" + userid + cap + "&photo=" + url); api.request("sendPhoto", "chat_id=" + userid + cap + "&photo=" + url);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
return false;
} }
return true;
} }
public boolean sendAnimation(String caption, String url) {
public void sendAnimation(String caption, String url) { return sendAnimation(api, id, caption, url);
sendAnimation(api, id, caption, url);
} }
public static void sendAnimation(TelegramAPI api, int userid, String caption, String url) { public static boolean sendAnimation(TelegramAPI api, int userid, String caption, String url) {
try { try {
String cap = ""; String cap = "";
if(caption != null) { if(caption != null) {
@ -136,7 +150,9 @@ public class TUser {
api.request("sendAnimation", "chat_id=" + userid + cap + "&animation=" + url); api.request("sendAnimation", "chat_id=" + userid + cap + "&animation=" + url);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
return false;
} }
return true;
} }
@Override @Override