TelegramAPI/src/main/java/de/mrbesen/telegram/objects/TMessage.java

163 lines
5.2 KiB
Java
Raw Normal View History

package de.mrbesen.telegram.objects;
2018-07-18 04:44:04 +02:00
2019-02-07 18:55:07 +01:00
import de.mrbesen.telegram.AsyncHandler.Task;
2018-07-18 04:44:04 +02:00
import de.mrbesen.telegram.TelegramAPI;
2021-01-18 22:33:31 +01:00
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
2018-07-18 04:44:04 +02:00
public class TMessage extends JSONBased {
private int message_id;
private TUser from = null;//optional
private long date = -1;
private TUser forward_from = null; //optional
private String text = null;//optional
2019-04-13 01:58:28 +02:00
private long chatid = 0;
2018-07-18 04:44:04 +02:00
protected TelegramAPI api;
public void sendTo(TUser u) {
//if this message already exists forward, if not send directly.
2018-07-18 22:31:05 +02:00
throw new RuntimeException("not implemented");
}
2019-02-07 03:44:59 +01:00
public boolean reply(String msg, TReplyMarkup rm) {
2018-07-18 22:31:05 +02:00
if(from == null) {
throw new RuntimeException("no from defined!");
} else {
2019-02-07 06:30:28 +01:00
return TUser.sendMessage(api, chatid != 0 ? chatid : from.getID(), msg, rm, message_id, false, null);
2018-07-18 22:31:05 +02:00
}
// try {
// return api.request("sendMessage", "chat_id=" + from.getID() + "&text=" + msg + "&reply_to_message_id=" + message_id ).getBoolean("ok") ;
// } catch (IOException | NullPointerException e) {
// e.printStackTrace();
// return false;
// }
}
2019-02-07 03:44:59 +01:00
public boolean reply(String msg) {
return reply(msg, null);
}
2018-07-18 22:31:05 +02:00
public TMessage forward(TUser us) {
2019-02-06 20:37:26 +01:00
return forward(api, us.getID(), this);
}
2019-04-13 01:58:28 +02:00
public static TMessage forward(TelegramAPI api, long userid, TMessage tmsg) {
2018-07-18 22:31:05 +02:00
try {
2019-02-06 20:37:26 +01:00
String fro = String.valueOf(tmsg.forward_from == null ? tmsg.from.getID() : tmsg.forward_from.getID());
2021-01-19 21:19:53 +01:00
return new TMessage(api.request("forwardMessage", "chat_id=" + userid + "&from_chat_id=" + fro + "&message_id=" + tmsg.message_id, userid).getJSONObject("result"), api);
2018-07-18 22:31:05 +02:00
} catch (IOException | NullPointerException e) {
e.printStackTrace();
}
return null;
2018-07-18 04:44:04 +02:00
}
2019-02-07 18:55:07 +01:00
2019-04-13 01:58:28 +02:00
public static void forwardAsync(TelegramAPI api, long userid, TMessage tmsg) {
2019-02-07 18:55:07 +01:00
String fro = String.valueOf(tmsg.forward_from == null ? tmsg.from.getID() : tmsg.forward_from.getID());
2021-01-19 21:19:53 +01:00
api.request(new Task("forwardMessage", "chat_id=" + userid + "&from_chat_id=" + fro + "&message_id=" + tmsg.message_id, userid));
2019-02-07 18:55:07 +01:00
}
2019-02-06 20:37:26 +01:00
2018-07-18 04:44:04 +02:00
public TMessage(JSONObject json, TelegramAPI api) {
super(json);
this.api = api;
message_id = json.getInt("message_id");
date = json.getLong("date");
2019-04-13 01:58:28 +02:00
chatid = ((JSONObject) get(Member.chat)).getLong("id");
2018-07-18 04:44:04 +02:00
if(json.has("from"))
from = api.getUser(json.getJSONObject("from"));
if(json.has("forward_from"))
forward_from = api.getUser(json.getJSONObject("forward_from"));
if(json.has("text") )
text = json.getString("text");
2019-02-08 06:14:11 +01:00
2018-10-11 14:49:11 +02:00
allowedmembers = new Member[] {Member.forward_from_message_id, Member.forward_signature, Member.forward_date, Member.reply_to_message, Member.edit_date, Member.media_group_id, Member.author_signature, Member.author_signature, Member.audio, Member.document, Member.game, Member.photo, Member.sticker, Member.video, Member.voice, Member.video_note, Member.caption, Member.contact, Member.location, Member.venue, Member.new_chat_members, Member.left_chat_members, Member.new_chat_title, Member.new_chat_photo, Member.delete_chat_photo, Member.group_chat_created, Member.supergroup_chat_created, Member.channel_chat_created, Member.migrate_from_chat_id, Member.migrate_to_chat_id, Member.pinned_message, Member.invoice, Member.successful_payment, Member.connected_website, Member.chat};
}
2019-04-13 01:58:28 +02:00
public long getChatID() {
2018-10-11 14:49:11 +02:00
return chatid;
2018-07-18 04:44:04 +02:00
}
public TUser getFrom() {
return from;
}
public String getText() {
return text;
}
public long getDate() {
return date;
}
public TUser getForward_from() {
return forward_from;
}
public int getMessageID() {
return message_id;
}
2020-12-04 16:14:27 +01:00
/**
* Get the FileID if a file is attached to this message. If More than one File is attached to this message only one file id is returned
* @return
*/
public String getFileID() {
2021-01-18 22:33:31 +01:00
TSendable t = getFile();
return t == null ? null : t.getFile_id();
}
/**
* Get the FileName if a file is attached to this message. If More than one File is attached to this message only one filename is returned
* @return
*/
public String getFileName() {
2020-12-04 16:14:27 +01:00
try {
2021-01-18 22:33:31 +01:00
TSendable t = getFile();
return t == null ? null : t.get(Member.file_name); //TSendable does not garuantee a filename
} catch (JSONException e) {
return ""; //file exists but has no name?
}
}
2020-12-04 16:14:27 +01:00
2021-01-18 22:33:31 +01:00
/**
* get a file if one is connected to this message
* @return
*/
private TSendable getFile() {
try {
if(has(Member.document))
return new TDocument(get(Member.document));
else if(has(Member.video))
return new TVideo(get(Member.video));
else if(has(Member.audio))
return new TAudio(get(Member.audio));
else if(has(Member.voice))
return new TAudio(get(Member.voice)); //TODO: suboptimal, eine Voice als audio zu verstehen, sollte aber funktionieren, da alle nicht optinalen felder gleich sind
else return null;
2020-12-04 16:14:27 +01:00
} catch (Throwable t) {
t.printStackTrace();
}
return null;
}
2019-04-13 01:58:28 +02:00
public static void delete(TelegramAPI api, long chatid, int msgid) {
2019-02-25 01:49:24 +01:00
delete(api, chatid, msgid, false);
}
2019-04-13 01:58:28 +02:00
public static void delete(TelegramAPI api, long chatid, int msgid, boolean async) {
2019-02-25 01:49:24 +01:00
String q = "chat_id=" + chatid + "&message_id=" + msgid;
if(async) {
2021-01-19 21:19:53 +01:00
api.requestAsync("deleteMessage", q, chatid);
2019-02-25 01:49:24 +01:00
} else {
try {
2021-01-19 21:19:53 +01:00
api.request("deleteMessage", q, chatid);
2019-02-25 01:49:24 +01:00
} catch (IOException e) {
e.printStackTrace();
}
}
}
2018-07-18 04:44:04 +02:00
}