rewitten input parse
This commit is contained in:
parent
1789aa3cbf
commit
ff97f2a424
@ -1,3 +1,6 @@
|
|||||||
|
1.0.4
|
||||||
|
* changed create_group_chat format
|
||||||
|
* rewritten interface code. Support for escaped characters in quotes
|
||||||
1.0.3
|
1.0.3
|
||||||
* options to help to run telegram-cli as daemon
|
* options to help to run telegram-cli as daemon
|
||||||
1.0.2
|
1.0.2
|
||||||
|
1739
interface.c
1739
interface.c
File diff suppressed because it is too large
Load Diff
@ -659,7 +659,7 @@ static long long msg_id_override;
|
|||||||
static void mpc_on_get_config (void *extra, int success);
|
static void mpc_on_get_config (void *extra, int success);
|
||||||
static int process_auth_complete (struct connection *c UU, char *packet, int len, int temp_key) {
|
static int process_auth_complete (struct connection *c UU, char *packet, int len, int temp_key) {
|
||||||
struct tgl_dc *D = tgl_state.net_methods->get_dc (c);
|
struct tgl_dc *D = tgl_state.net_methods->get_dc (c);
|
||||||
vlogprintf (E_DEBUG, "process_dh_answer(), len=%d\n", len);
|
vlogprintf (E_DEBUG - 1, "process_dh_answer(), len=%d\n", len);
|
||||||
assert (len == 72);
|
assert (len == 72);
|
||||||
assert (!*(long long *) packet);
|
assert (!*(long long *) packet);
|
||||||
assert (*(int *) (packet + 16) == len - 20);
|
assert (*(int *) (packet + 16) == len - 20);
|
||||||
|
118
queries.c
118
queries.c
@ -1160,7 +1160,7 @@ void tgl_do_messages_mark_read_encr (tgl_peer_id_t id, long long access_hash, in
|
|||||||
|
|
||||||
void tgl_do_mark_read (tgl_peer_id_t id, void (*callback)(void *callback_extra, int success), void *callback_extra) {
|
void tgl_do_mark_read (tgl_peer_id_t id, void (*callback)(void *callback_extra, int success), void *callback_extra) {
|
||||||
if (tgl_get_peer_type (id) == TGL_PEER_USER || tgl_get_peer_type (id) == TGL_PEER_CHAT) {
|
if (tgl_get_peer_type (id) == TGL_PEER_USER || tgl_get_peer_type (id) == TGL_PEER_CHAT) {
|
||||||
tgl_do_messages_mark_read (id, tgl_state.max_msg_id, 0, callback, callback_extra);
|
tgl_do_messages_mark_read (id, 0, 0, callback, callback_extra);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
tgl_peer_t *P = tgl_peer_get (id);
|
tgl_peer_t *P = tgl_peer_get (id);
|
||||||
@ -1260,7 +1260,9 @@ static struct query_methods get_history_methods = {
|
|||||||
void tgl_do_get_local_history (tgl_peer_id_t id, int limit, void (*callback)(void *callback_extra, int success, int size, struct tgl_message *list[]), void *callback_extra) {
|
void tgl_do_get_local_history (tgl_peer_id_t id, int limit, void (*callback)(void *callback_extra, int success, int size, struct tgl_message *list[]), void *callback_extra) {
|
||||||
tgl_peer_t *P = tgl_peer_get (id);
|
tgl_peer_t *P = tgl_peer_get (id);
|
||||||
if (!P || !P->last) {
|
if (!P || !P->last) {
|
||||||
callback (callback_extra, 0, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
struct tgl_message *M = P->last;
|
struct tgl_message *M = P->last;
|
||||||
@ -1279,14 +1281,18 @@ void tgl_do_get_local_history (tgl_peer_id_t id, int limit, void (*callback)(voi
|
|||||||
ML[count ++] = M;
|
ML[count ++] = M;
|
||||||
}
|
}
|
||||||
|
|
||||||
callback (callback_extra, 1, count, ML);
|
if (callback) {
|
||||||
|
callback (callback_extra, 1, count, ML);
|
||||||
|
}
|
||||||
tfree (ML, sizeof (void *) * count);
|
tfree (ML, sizeof (void *) * count);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tgl_do_get_local_history_ext (tgl_peer_id_t id, int offset, int limit, void (*callback)(void *callback_extra, int success, int size, struct tgl_message *list[]), void *callback_extra) {
|
void tgl_do_get_local_history_ext (tgl_peer_id_t id, int offset, int limit, void (*callback)(void *callback_extra, int success, int size, struct tgl_message *list[]), void *callback_extra) {
|
||||||
tgl_peer_t *P = tgl_peer_get (id);
|
tgl_peer_t *P = tgl_peer_get (id);
|
||||||
if (!P || !P->last) {
|
if (!P || !P->last) {
|
||||||
callback (callback_extra, 0, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
struct tgl_message *M = P->last;
|
struct tgl_message *M = P->last;
|
||||||
@ -1297,7 +1303,9 @@ void tgl_do_get_local_history_ext (tgl_peer_id_t id, int offset, int limit, void
|
|||||||
count ++;
|
count ++;
|
||||||
}
|
}
|
||||||
if (count <= offset) {
|
if (count <= offset) {
|
||||||
callback (callback_extra, 1, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 1, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
struct tgl_message **ML = talloc (sizeof (void *) * (count - offset));
|
struct tgl_message **ML = talloc (sizeof (void *) * (count - offset));
|
||||||
@ -1312,7 +1320,9 @@ void tgl_do_get_local_history_ext (tgl_peer_id_t id, int offset, int limit, void
|
|||||||
count ++;
|
count ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
callback (callback_extra, 1, count - offset, ML);
|
if (callback) {
|
||||||
|
callback (callback_extra, 1, count - offset, ML);
|
||||||
|
}
|
||||||
tfree (ML, sizeof (void *) * (count) - offset);
|
tfree (ML, sizeof (void *) * (count) - offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1835,7 +1845,9 @@ void _tgl_do_send_photo (enum tgl_message_media_type type, tgl_peer_id_t to_id,
|
|||||||
int fd = open (file_name, O_RDONLY);
|
int fd = open (file_name, O_RDONLY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
vlogprintf (E_WARNING, "No such file '%s'\n", file_name);
|
vlogprintf (E_WARNING, "No such file '%s'\n", file_name);
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
struct stat buf;
|
struct stat buf;
|
||||||
@ -1844,7 +1856,9 @@ void _tgl_do_send_photo (enum tgl_message_media_type type, tgl_peer_id_t to_id,
|
|||||||
if (size <= 0) {
|
if (size <= 0) {
|
||||||
vlogprintf (E_WARNING, "File has zero length\n");
|
vlogprintf (E_WARNING, "File has zero length\n");
|
||||||
close (fd);
|
close (fd);
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
struct send_file *f = talloc0 (sizeof (*f));
|
struct send_file *f = talloc0 (sizeof (*f));
|
||||||
@ -1863,7 +1877,9 @@ void _tgl_do_send_photo (enum tgl_message_media_type type, tgl_peer_id_t to_id,
|
|||||||
close (fd);
|
close (fd);
|
||||||
vlogprintf (E_WARNING, "Too big file. Maximal supported size is %d.\n", (512 << 10) * 1000);
|
vlogprintf (E_WARNING, "Too big file. Maximal supported size is %d.\n", (512 << 10) * 1000);
|
||||||
tfree (f, sizeof (*f));
|
tfree (f, sizeof (*f));
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1886,7 +1902,9 @@ void _tgl_do_send_photo (enum tgl_message_media_type type, tgl_peer_id_t to_id,
|
|||||||
close (fd);
|
close (fd);
|
||||||
vlogprintf (E_WARNING, "Unknown type %d.\n", type);
|
vlogprintf (E_WARNING, "Unknown type %d.\n", type);
|
||||||
tfree (f, sizeof (*f));
|
tfree (f, sizeof (*f));
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
f->file_name = tstrdup (file_name);
|
f->file_name = tstrdup (file_name);
|
||||||
@ -1968,7 +1986,9 @@ static struct query_methods fwd_msg_methods = {
|
|||||||
void tgl_do_forward_message (tgl_peer_id_t id, int n, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra) {
|
void tgl_do_forward_message (tgl_peer_id_t id, int n, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra) {
|
||||||
if (tgl_get_peer_type (id) == TGL_PEER_ENCR_CHAT) {
|
if (tgl_get_peer_type (id) == TGL_PEER_ENCR_CHAT) {
|
||||||
vlogprintf (E_WARNING, "Can not forward messages from secret chat\n");
|
vlogprintf (E_WARNING, "Can not forward messages from secret chat\n");
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
clear_packet ();
|
clear_packet ();
|
||||||
@ -2007,23 +2027,31 @@ void tgl_do_send_contact (tgl_peer_id_t id, const char *phone, int phone_len, co
|
|||||||
void tgl_do_forward_media (tgl_peer_id_t id, int n, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra) {
|
void tgl_do_forward_media (tgl_peer_id_t id, int n, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra) {
|
||||||
if (tgl_get_peer_type (id) == TGL_PEER_ENCR_CHAT) {
|
if (tgl_get_peer_type (id) == TGL_PEER_ENCR_CHAT) {
|
||||||
vlogprintf (E_WARNING, "Can not forward messages from secret chat\n");
|
vlogprintf (E_WARNING, "Can not forward messages from secret chat\n");
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
struct tgl_message *M = tgl_message_get (n);
|
struct tgl_message *M = tgl_message_get (n);
|
||||||
if (!M) {
|
if (!M) {
|
||||||
vlogprintf (E_WARNING, "No such message\n");
|
vlogprintf (E_WARNING, "No such message\n");
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (M->flags & FLAG_ENCRYPTED) {
|
if (M->flags & FLAG_ENCRYPTED) {
|
||||||
vlogprintf (E_WARNING, "Can not forward media from encrypted message\n");
|
vlogprintf (E_WARNING, "Can not forward media from encrypted message\n");
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (M->media.type != tgl_message_media_photo && M->media.type != tgl_message_media_video && M->media.type != tgl_message_media_audio && M->media.type != tgl_message_media_document) {
|
if (M->media.type != tgl_message_media_photo && M->media.type != tgl_message_media_video && M->media.type != tgl_message_media_audio && M->media.type != tgl_message_media_document) {
|
||||||
vlogprintf (E_WARNING, "Can only forward photo/audio/video/document\n");
|
vlogprintf (E_WARNING, "Can only forward photo/audio/video/document\n");
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
clear_packet ();
|
clear_packet ();
|
||||||
@ -2159,10 +2187,14 @@ void tgl_do_get_chat_info (tgl_peer_id_t id, int offline_mode, void (*callback)(
|
|||||||
tgl_peer_t *C = tgl_peer_get (id);
|
tgl_peer_t *C = tgl_peer_get (id);
|
||||||
if (!C) {
|
if (!C) {
|
||||||
vlogprintf (E_WARNING, "No such chat\n");
|
vlogprintf (E_WARNING, "No such chat\n");
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
//print_chat_info (&C->chat);
|
//print_chat_info (&C->chat);
|
||||||
callback (callback_extra, 1, &C->chat);
|
if (callback) {
|
||||||
|
callback (callback_extra, 1, &C->chat);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2214,9 +2246,13 @@ void tgl_do_get_user_info (tgl_peer_id_t id, int offline_mode, void (*callback)(
|
|||||||
tgl_peer_t *C = tgl_peer_get (id);
|
tgl_peer_t *C = tgl_peer_get (id);
|
||||||
if (!C) {
|
if (!C) {
|
||||||
vlogprintf (E_WARNING, "No such user\n");
|
vlogprintf (E_WARNING, "No such user\n");
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
callback (callback_extra, 1, &C->user);
|
if (callback) {
|
||||||
|
callback (callback_extra, 1, &C->user);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2415,7 +2451,9 @@ static void load_next_part (struct download *D, void *callback, void *callback_e
|
|||||||
void tgl_do_load_photo_size (struct tgl_photo_size *P, void (*callback)(void *callback_extra, int success, char *filename), void *callback_extra) {
|
void tgl_do_load_photo_size (struct tgl_photo_size *P, void (*callback)(void *callback_extra, int success, char *filename), void *callback_extra) {
|
||||||
if (!P->loc.dc) {
|
if (!P->loc.dc) {
|
||||||
vlogprintf (E_WARNING, "Bad video thumb\n");
|
vlogprintf (E_WARNING, "Bad video thumb\n");
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2436,7 +2474,9 @@ void tgl_do_load_photo_size (struct tgl_photo_size *P, void (*callback)(void *ca
|
|||||||
void tgl_do_load_photo (struct tgl_photo *photo, void (*callback)(void *callback_extra, int success, char *filename), void *callback_extra) {
|
void tgl_do_load_photo (struct tgl_photo *photo, void (*callback)(void *callback_extra, int success, char *filename), void *callback_extra) {
|
||||||
if (!photo->sizes_num) {
|
if (!photo->sizes_num) {
|
||||||
vlogprintf (E_WARNING, "No sizes\n");
|
vlogprintf (E_WARNING, "No sizes\n");
|
||||||
callback (callback_extra, 0, 0);
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int max = -1;
|
int max = -1;
|
||||||
@ -2841,7 +2881,9 @@ void tgl_do_send_accept_encr_chat (struct tgl_secret_chat *E, unsigned char *ran
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ok) {
|
if (ok) {
|
||||||
callback (callback_extra, 1, E);
|
if (callback) {
|
||||||
|
callback (callback_extra, 1, E);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
} // Already generated key for this chat
|
} // Already generated key for this chat
|
||||||
unsigned char random_here[256];
|
unsigned char random_here[256];
|
||||||
@ -3378,6 +3420,9 @@ void tgl_do_create_group_chat (tgl_peer_id_t id, char *chat_topic, void (*callba
|
|||||||
tgl_peer_t *U = tgl_peer_get (id);
|
tgl_peer_t *U = tgl_peer_get (id);
|
||||||
if (!U) {
|
if (!U) {
|
||||||
vlogprintf (E_WARNING, "Can not create chat with unknown user\n");
|
vlogprintf (E_WARNING, "Can not create chat with unknown user\n");
|
||||||
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
clear_packet ();
|
clear_packet ();
|
||||||
@ -3395,6 +3440,35 @@ void tgl_do_create_group_chat (tgl_peer_id_t id, char *chat_topic, void (*callba
|
|||||||
out_string (chat_topic);
|
out_string (chat_topic);
|
||||||
tglq_send_query (tgl_state.DC_working, packet_ptr - packet_buffer, packet_buffer, &create_group_chat_methods, 0, callback, callback_extra);
|
tglq_send_query (tgl_state.DC_working, packet_ptr - packet_buffer, packet_buffer, &create_group_chat_methods, 0, callback, callback_extra);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tgl_do_create_group_chat_ex (int users_num, tgl_peer_id_t ids[], char *chat_topic, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra) {
|
||||||
|
clear_packet ();
|
||||||
|
out_int (CODE_messages_create_chat);
|
||||||
|
out_int (CODE_vector);
|
||||||
|
out_int (users_num); // Number of users, currently we support only 1 user.
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < users_num; i++) {
|
||||||
|
tgl_peer_id_t id = ids[i];
|
||||||
|
tgl_peer_t *U = tgl_peer_get (id);
|
||||||
|
if (!U || tgl_get_peer_type (id) != TGL_PEER_USER) {
|
||||||
|
vlogprintf (E_WARNING, "Can not create chat with unknown user\n");
|
||||||
|
if (callback) {
|
||||||
|
callback (callback_extra, 0, 0);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (U && U->user.access_hash) {
|
||||||
|
out_int (CODE_input_user_foreign);
|
||||||
|
out_int (tgl_get_peer_id (id));
|
||||||
|
out_long (U->user.access_hash);
|
||||||
|
} else {
|
||||||
|
out_int (CODE_input_user_contact);
|
||||||
|
out_int (tgl_get_peer_id (id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out_string (chat_topic);
|
||||||
|
tglq_send_query (tgl_state.DC_working, packet_ptr - packet_buffer, packet_buffer, &create_group_chat_methods, 0, callback, callback_extra);
|
||||||
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
/* {{{ Delete msg */
|
/* {{{ Delete msg */
|
||||||
|
@ -87,7 +87,7 @@ char *tgls_default_create_print_name (tgl_peer_id_t id, const char *a1, const ch
|
|||||||
}
|
}
|
||||||
char *s = buf;
|
char *s = buf;
|
||||||
while (*s) {
|
while (*s) {
|
||||||
if (*s == ' ') { *s = '_'; }
|
if (((unsigned char)*s) <= ' ') { *s = '_'; }
|
||||||
if (*s == '#') { *s = '@'; }
|
if (*s == '#') { *s = '@'; }
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
|
2
tgl.h
2
tgl.h
@ -249,6 +249,7 @@ void tgl_do_send_msg (struct tgl_message *M, void (*callback)(void *callback_ext
|
|||||||
void tgl_do_send_text (tgl_peer_id_t id, char *file, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
void tgl_do_send_text (tgl_peer_id_t id, char *file, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
||||||
void tgl_do_mark_read (tgl_peer_id_t id, void (*callback)(void *callback_extra, int success), void *callback_extra);
|
void tgl_do_mark_read (tgl_peer_id_t id, void (*callback)(void *callback_extra, int success), void *callback_extra);
|
||||||
void tgl_do_get_history (tgl_peer_id_t id, int limit, int offline_mode, void (*callback)(void *callback_extra, int success, int size, struct tgl_message *list[]), void *callback_extra);
|
void tgl_do_get_history (tgl_peer_id_t id, int limit, int offline_mode, void (*callback)(void *callback_extra, int success, int size, struct tgl_message *list[]), void *callback_extra);
|
||||||
|
void tgl_do_get_history_ext (tgl_peer_id_t id, int offset, int limit, int offline_mode, void (*callback)(void *callback_extra, int success, int size, struct tgl_message *list[]), void *callback_extra);
|
||||||
void tgl_do_get_dialog_list (void (*callback)(void *callback_extra, int success, int size, tgl_peer_id_t peers[], int last_msg_id[], int unread_count[]), void *callback_extra);
|
void tgl_do_get_dialog_list (void (*callback)(void *callback_extra, int success, int size, tgl_peer_id_t peers[], int last_msg_id[], int unread_count[]), void *callback_extra);
|
||||||
void tgl_do_send_photo (enum tgl_message_media_type type, tgl_peer_id_t to_id, char *file_name, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
void tgl_do_send_photo (enum tgl_message_media_type type, tgl_peer_id_t to_id, char *file_name, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
||||||
void tgl_do_set_chat_photo (tgl_peer_id_t chat_id, char *file_name, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
void tgl_do_set_chat_photo (tgl_peer_id_t chat_id, char *file_name, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
||||||
@ -275,6 +276,7 @@ void tgl_do_get_difference (int sync_from_start, void (*callback)(void *callback
|
|||||||
void tgl_do_add_user_to_chat (tgl_peer_id_t chat_id, tgl_peer_id_t id, int limit, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
void tgl_do_add_user_to_chat (tgl_peer_id_t chat_id, tgl_peer_id_t id, int limit, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
||||||
void tgl_do_del_user_from_chat (tgl_peer_id_t chat_id, tgl_peer_id_t id, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
void tgl_do_del_user_from_chat (tgl_peer_id_t chat_id, tgl_peer_id_t id, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
||||||
void tgl_do_create_group_chat (tgl_peer_id_t id, char *chat_topic, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
void tgl_do_create_group_chat (tgl_peer_id_t id, char *chat_topic, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
||||||
|
void tgl_do_create_group_chat_ex (int users_num, tgl_peer_id_t ids[], char *chat_topic, void (*callback)(void *callback_extra, int success, struct tgl_message *M), void *callback_extra);
|
||||||
void tgl_do_delete_msg (long long id, void (*callback)(void *callback_extra, int success), void *callback_extra);
|
void tgl_do_delete_msg (long long id, void (*callback)(void *callback_extra, int success), void *callback_extra);
|
||||||
void tgl_do_restore_msg (long long id, void (*callback)(void *callback_extra, int success), void *callback_extra);
|
void tgl_do_restore_msg (long long id, void (*callback)(void *callback_extra, int success), void *callback_extra);
|
||||||
void tgl_do_update_status (int online, void (*callback)(void *callback_extra, int success), void *callback_extra);
|
void tgl_do_update_status (int online, void (*callback)(void *callback_extra, int success), void *callback_extra);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user