invoke method
Future<Map>
invoke(
- String method, {
- Map? parameters,
- required int clientId,
- bool isVoid = false,
- Duration? delayDuration,
- Duration? invokeTimeOut,
- bool? isUseCache,
- Duration? durationCacheExpire,
- String? extra,
- bool? isAutoGetChat,
- bool? isInvokeThrowOnError,
- FutureOr<
String> onGenerateExtraInvoke(- int client_id,
- TdlibNative libTdJson
- FutureOr<
Map> onGetInvokeData(- String extra,
- int client_id,
- TdlibNative libTdJson
call api latest Tdlib-Methods example:
tg.invoke(
"getChat",
parameters: {
"chat_id": 0,
},
clientId: tg.client_id,
);
Implementation
Future<Map> invoke(
String method, {
Map? parameters,
required int clientId,
bool isVoid = false,
Duration? delayDuration,
Duration? invokeTimeOut,
bool? isUseCache,
Duration? durationCacheExpire,
String? extra,
bool? isAutoGetChat,
bool? isInvokeThrowOnError,
FutureOr<String> Function(int client_id, TdlibNative libTdJson)?
onGenerateExtraInvoke,
FutureOr<Map> Function(String extra, int client_id, TdlibNative libTdJson)?
onGetInvokeData,
}) async {
isUseCache ??= false;
isInvokeThrowOnError ??= is_invoke_throw_on_error;
onGetInvokeData ??= on_get_invoke_data;
onGenerateExtraInvoke ??= on_generate_extra_invoke;
isAutoGetChat ??= is_auto_get_chat;
invokeTimeOut ??= invoke_time_out;
parameters ??= {};
String extra_id = "";
bool is_set_extra_from_function = false;
if (parameters["@extra"] is String == false) {
if (extra != null) {
extra_id = extra;
} else if (onGenerateExtraInvoke != null) {
extra_id = (await onGenerateExtraInvoke(clientId, this));
is_set_extra_from_function = true;
} else {
extra_id = generateUuid(15);
}
parameters["@extra"] = extra_id;
} else {
extra_id = parameters["@extra"];
}
if (extra_id.isEmpty) {
if (is_set_extra_from_function == false) {
if (onGenerateExtraInvoke != null) {
extra_id = (await onGenerateExtraInvoke(clientId, this));
}
}
}
if (extra_id.isEmpty) {
extra_id = generateUuid(15);
parameters["@extra"] = extra_id;
}
if (isAutoGetChat &&
RegExp(r"^(sendMessage|getChatMember)$", caseSensitive: false)
.hashData(method)) {
if (parameters["chat_id"] is int) {
td_send(
clientId,
{
"@type": "getChat",
"chat_id": parameters["chat_id"],
},
);
}
if (parameters["user_id"] is int) {
td_send(
clientId,
{
"@type": "getUser",
"user_id": parameters["user_id"],
},
);
}
}
Map requestMethod = {
"@type": method,
"client_id": clientId,
...parameters,
};
if (isVoid) {
td_send(
clientId,
requestMethod,
);
return {
"@type": "ok",
"@extra": extra,
};
}
Map result = {};
if (onGetInvokeData != null) {
td_send(
clientId,
requestMethod,
);
return await onGetInvokeData(extra_id, clientId, this);
}
on(event_invoke, (UpdateTd update) async {
try {
if (update.client_id == clientId) {
Map updateOrigin = update.raw;
if (updateOrigin["@extra"] == extra_id) {
updateOrigin.remove("@extra");
updateOrigin.remove("@client_id");
result = updateOrigin;
}
}
} catch (e) {
result["@type"] = "error";
}
});
td_send(
clientId,
requestMethod,
);
task_increase();
throw result;
}