2018-07-18 14:30:48 +02:00
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 ;
}
2019-02-07 02:50:53 +01:00
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 ( ) ;
}
2019-02-07 02:50:53 +01:00
}
}
2018-07-18 04:44:04 +02:00
}