Compare commits

..

3 commits

Author SHA1 Message Date
Wizou e9543a690b Examples for download abort, and uploading streamable video (fix #325, thx @patelriki13)
Some checks failed
Dev build / build (push) Has been cancelled
2025-07-25 01:03:30 +02:00
Wizou a8fa32dfd5 Support single-quote arguments in HTML 2025-07-18 02:28:43 +02:00
Wizou 56ba15bc13 API Layer 209: Reply-to specific ToDo item
(that might not be the most recent layer. check https://patreon.com/wizou for the latest layers)
2025-07-14 22:38:51 +02:00
8 changed files with 196 additions and 74 deletions

View file

@ -12,7 +12,7 @@ jobs:
if: contains(github.event.issue.labels.*.name, 'telegram api')
runs-on: ubuntu-latest
steps:
- uses: dessant/support-requests@v3.0.0
- uses: dessant/support-requests@v4
with:
support-label: 'telegram api'
issue-comment: >
@ -26,3 +26,4 @@ jobs:
If the above links didn't answer your problem, [click here to ask your question on **StackOverflow**](https://stackoverflow.com/questions/ask?tags=c%23+wtelegramclient+telegram-api) so the whole community can help and benefit.
close-issue: true
issue-close-reason: 'not planned'

View file

@ -210,7 +210,7 @@ that simplifies the download of a photo/document/file once you get a reference t
See [Examples/Program_DownloadSavedMedia.cs](https://github.com/wiz0u/WTelegramClient/blob/master/Examples/Program_DownloadSavedMedia.cs?ts=4#L28) that download all media files you forward to yourself (Saved Messages)
_Note: To abort an ongoing download, you can throw an exception via the `progress` callback argument._
_Note: To abort an ongoing download, you can throw an exception via the `progress` callback argument. Example: `(t,s) => ct.ThrowIfCancellationRequested()`_
<a name="upload"></a>
## Upload a media file and post it with caption to a chat
@ -224,6 +224,41 @@ var inputFile = await client.UploadFileAsync(Filepath);
await client.SendMediaAsync(peer, "Here is the photo", inputFile);
```
<a name="upload-video"></a>
## Upload a streamable video with optional custom thumbnail
```csharp
var chats = await client.Messages_GetAllChats();
InputPeer peer = chats.chats[1234567890]; // the chat we want
const string videoPath = @"C:\...\video.mp4";
const string thumbnailPath = @"C:\...\thumbnail.jpg";
// Extract video information using FFMpegCore or similar library
var mediaInfo = await FFmpeg.GetMediaInfo(videoPath);
var videoStream = mediaInfo.VideoStreams.FirstOrDefault();
int width = videoStream?.Width ?? 0;
int height = videoStream?.Height ?? 0;
int duration = (int)mediaInfo.Duration.TotalSeconds;
// Upload video file
var inputFile = await Client.UploadFileAsync(videoPath);
// Prepare InputMedia structure with video attributes
var media = new InputMediaUploadedDocument(inputFile, "video/mp4",
new DocumentAttributeVideo { w = width, h = height, duration = duration,
flags = DocumentAttributeVideo.Flags.supports_streaming });
if (thumbnailPath != null)
{
// upload custom thumbnail and complete InputMedia structure
var inputThumb = await client.UploadFileAsync(thumbnailPath);
media.thumb = inputThumb;
media.flags |= InputMediaUploadedDocument.Flags.has_thumb;
}
// Send the media message
await client.SendMessageAsync(peer, "caption", media);
```
*Note: This example requires FFMpegCore NuGet package for video metadata extraction. You can also manually set width, height, and duration if you know the video properties.*
<a name="album"></a>
## Send a grouped media album using photos from various sources
```csharp

View file

@ -1,4 +1,4 @@
[![API Layer](https://img.shields.io/badge/API_Layer-207-blueviolet)](https://corefork.telegram.org/methods)
[![API Layer](https://img.shields.io/badge/API_Layer-209-blueviolet)](https://corefork.telegram.org/methods)
[![NuGet version](https://img.shields.io/nuget/v/WTelegramClient?color=00508F)](https://www.nuget.org/packages/WTelegramClient/)
[![NuGet prerelease](https://img.shields.io/nuget/vpre/WTelegramClient?color=C09030&label=dev+nuget)](https://www.nuget.org/packages/WTelegramClient/absoluteLatest)
[![Donate](https://img.shields.io/badge/Help_this_project:-Donate-ff4444)](https://buymeacoffee.com/wizou)

View file

@ -401,6 +401,7 @@ namespace TL
case "u": case "ins": ProcessEntity<MessageEntityUnderline>(); break;
case "s": case "strike": case "del": ProcessEntity<MessageEntityStrike>(); break;
case "span class=\"tg-spoiler\"":
case "span class='tg-spoiler'":
case "span" when closing:
case "tg-spoiler": ProcessEntity<MessageEntitySpoiler>(); break;
case "code": ProcessEntity<MessageEntityCode>(); break;
@ -420,7 +421,8 @@ namespace TL
prevEntity.length = offset - prevEntity.offset;
}
}
else if (tag.StartsWith("a href=\"") && tag[^1] == '"')
else if ((tag[^1] == '"' && tag.StartsWith("a href=\""))
|| (tag[^1] == '\'' && tag.StartsWith("a href='")))
{
tag = HttpUtility.HtmlDecode(tag[8..^1]);
if (tag.StartsWith("tg://user?id=") && long.TryParse(tag[13..], out var user_id) && users?.GetValueOrDefault(user_id)?.access_hash is long hash)
@ -428,12 +430,13 @@ namespace TL
else
entities.Add(new MessageEntityTextUrl { offset = offset, length = -1, url = tag });
}
else if (tag.StartsWith("code class=\"language-") && tag[^1] == '"')
else if ((tag[^1] == '"' && tag.StartsWith("code class=\"language-"))
|| (tag[^1] == '\'' && tag.StartsWith("code class='language-")))
{
if (entities.LastOrDefault(e => e.length == -1) is MessageEntityPre prevEntity)
prevEntity.language = tag[21..^1];
}
else if (premium && (tag.StartsWith("tg-emoji emoji-id=\"") || tag.StartsWith("tg-emoji id=\"")))
else if (premium && (tag.StartsWith("tg-emoji emoji-id=\"") || tag.StartsWith("tg-emoji emoji-id='")))
entities.Add(new MessageEntityCustomEmoji { offset = offset, length = -1, document_id = long.Parse(tag[(tag.IndexOf('=') + 2)..^1]) });
break;
}

File diff suppressed because one or more lines are too long

View file

@ -1425,7 +1425,7 @@ namespace TL
settings = settings,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/account.getCollectibleEmojiStatuses"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/account.getCollectibleEmojiStatuses"/> [bots: ✓]</para></summary>
/// <returns>a <c>null</c> value means <a href="https://corefork.telegram.org/constructor/account.emojiStatusesNotModified">account.emojiStatusesNotModified</a></returns>
public static Task<Account_EmojiStatuses> Account_GetCollectibleEmojiStatuses(this Client client, long hash = default)
=> client.Invoke(new Account_GetCollectibleEmojiStatuses
@ -1433,7 +1433,7 @@ namespace TL
hash = hash,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/account.getPaidMessagesRevenue"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/account.getPaidMessagesRevenue"/> [bots: ✓]</para></summary>
public static Task<Account_PaidMessagesRevenue> Account_GetPaidMessagesRevenue(this Client client, InputUserBase user_id, InputPeer parent_peer = null)
=> client.Invoke(new Account_GetPaidMessagesRevenue
{
@ -1442,7 +1442,7 @@ namespace TL
user_id = user_id,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/account.toggleNoPaidMessagesException"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/account.toggleNoPaidMessagesException"/> [bots: ✓]</para></summary>
public static Task<bool> Account_ToggleNoPaidMessagesException(this Client client, InputUserBase user_id, InputPeer parent_peer = null, bool refund_charged = false, bool require_payment = false)
=> client.Invoke(new Account_ToggleNoPaidMessagesException
{
@ -1477,7 +1477,7 @@ namespace TL
errors = errors,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/users.getRequirementsToContact"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/users.getRequirementsToContact"/> [bots: ✓]</para></summary>
public static Task<RequirementToContact[]> Users_GetRequirementsToContact(this Client client, params InputUserBase[] id)
=> client.Invoke(new Users_GetRequirementsToContact
{
@ -1733,7 +1733,7 @@ namespace TL
{
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/contacts.getSponsoredPeers"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/contacts.getSponsoredPeers"/> [bots: ✓]</para></summary>
/// <returns>a <c>null</c> value means <a href="https://corefork.telegram.org/constructor/contacts.sponsoredPeersEmpty">contacts.sponsoredPeersEmpty</a></returns>
public static Task<Contacts_SponsoredPeers> Contacts_GetSponsoredPeers(this Client client, string q)
=> client.Invoke(new Contacts_GetSponsoredPeers
@ -4389,7 +4389,7 @@ namespace TL
platform = platform,
});
/// <summary>Sends one or more <a href="https://corefork.telegram.org/api/reactions#paid-reactions">paid Telegram Star reactions »</a>, transferring <a href="https://corefork.telegram.org/api/stars">Telegram Stars »</a> to a channel&#39;s balance. <para>See <a href="https://corefork.telegram.org/method/messages.sendPaidReaction"/></para> <para>Possible <see cref="RpcException"/> codes: 400 (<a href="https://corefork.telegram.org/method/messages.sendPaidReaction#possible-errors">details</a>)</para></summary>
/// <summary>Sends one or more <a href="https://corefork.telegram.org/api/reactions#paid-reactions">paid Telegram Star reactions »</a>, transferring <a href="https://corefork.telegram.org/api/stars">Telegram Stars »</a> to a channel's balance. <para>See <a href="https://corefork.telegram.org/method/messages.sendPaidReaction"/></para> <para>Possible <see cref="RpcException"/> codes: 400 (<a href="https://corefork.telegram.org/method/messages.sendPaidReaction#possible-errors">details</a>)</para></summary>
/// <param name="peer">The channel</param>
/// <param name="msg_id">The message to react to</param>
/// <param name="count">The number of <a href="https://corefork.telegram.org/api/stars">stars</a> to send (each will increment the reaction counter by one).</param>
@ -4507,7 +4507,7 @@ namespace TL
hash = hash,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/messages.reportMessagesDelivery"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/messages.reportMessagesDelivery"/></para> <para>Possible <see cref="RpcException"/> codes: 400 (<a href="https://corefork.telegram.org/method/messages.reportMessagesDelivery#possible-errors">details</a>)</para></summary>
public static Task<bool> Messages_ReportMessagesDelivery(this Client client, InputPeer peer, int[] id, bool push = false)
=> client.Invoke(new Messages_ReportMessagesDelivery
{
@ -4516,7 +4516,7 @@ namespace TL
id = id,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/messages.getSavedDialogsByID"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/messages.getSavedDialogsByID"/> [bots: ✓]</para></summary>
public static Task<Messages_SavedDialogsBase> Messages_GetSavedDialogsByID(this Client client, InputPeer[] ids, InputPeer parent_peer = null)
=> client.Invoke(new Messages_GetSavedDialogsByID
{
@ -4525,7 +4525,7 @@ namespace TL
ids = ids,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/messages.readSavedHistory"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/messages.readSavedHistory"/> [bots: ✓]</para></summary>
public static Task<bool> Messages_ReadSavedHistory(this Client client, InputPeer parent_peer, InputPeer peer, int max_id = default)
=> client.Invoke(new Messages_ReadSavedHistory
{
@ -4534,7 +4534,7 @@ namespace TL
max_id = max_id,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/messages.toggleTodoCompleted"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/messages.toggleTodoCompleted"/> [bots: ✓]</para></summary>
public static Task<UpdatesBase> Messages_ToggleTodoCompleted(this Client client, InputPeer peer, int msg_id, int[] completed, params int[] incompleted)
=> client.Invoke(new Messages_ToggleTodoCompleted
{
@ -4544,7 +4544,7 @@ namespace TL
incompleted = incompleted,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/messages.appendTodoList"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/messages.appendTodoList"/> [bots: ✓]</para></summary>
public static Task<UpdatesBase> Messages_AppendTodoList(this Client client, InputPeer peer, int msg_id, params TodoItem[] list)
=> client.Invoke(new Messages_AppendTodoList
{
@ -4553,7 +4553,7 @@ namespace TL
list = list,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/messages.toggleSuggestedPostApproval"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/messages.toggleSuggestedPostApproval"/> [bots: ✓]</para></summary>
public static Task<UpdatesBase> Messages_ToggleSuggestedPostApproval(this Client client, InputPeer peer, int msg_id, DateTime? schedule_date = null, string reject_comment = null, bool reject = false)
=> client.Invoke(new Messages_ToggleSuggestedPostApproval
{
@ -5648,7 +5648,7 @@ namespace TL
limit = limit,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/channels.updatePaidMessagesPrice"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/channels.updatePaidMessagesPrice"/> [bots: ✓]</para></summary>
public static Task<UpdatesBase> Channels_UpdatePaidMessagesPrice(this Client client, InputChannelBase channel, long send_paid_messages_stars, bool broadcast_messages_allowed = false)
=> client.Invoke(new Channels_UpdatePaidMessagesPrice
{
@ -5657,7 +5657,7 @@ namespace TL
send_paid_messages_stars = send_paid_messages_stars,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/channels.toggleAutotranslation"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/channels.toggleAutotranslation"/> [bots: ✓]</para></summary>
public static Task<UpdatesBase> Channels_ToggleAutotranslation(this Client client, InputChannelBase channel, bool enabled)
=> client.Invoke(new Channels_ToggleAutotranslation
{
@ -5665,7 +5665,7 @@ namespace TL
enabled = enabled,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/channels.getMessageAuthor"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/channels.getMessageAuthor"/> [bots: ✓]</para></summary>
public static Task<UserBase> Channels_GetMessageAuthor(this Client client, InputChannelBase channel, int id)
=> client.Invoke(new Channels_GetMessageAuthor
{
@ -5967,7 +5967,7 @@ namespace TL
duration_months = duration_months ?? default,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/bots.setCustomVerification"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/bots.setCustomVerification"/> [bots: ✓]</para> <para>Possible <see cref="RpcException"/> codes: 400 (<a href="https://corefork.telegram.org/method/bots.setCustomVerification#possible-errors">details</a>)</para></summary>
public static Task<bool> Bots_SetCustomVerification(this Client client, InputPeer peer, InputUserBase bot = null, string custom_description = null, bool enabled = false)
=> client.Invoke(new Bots_SetCustomVerification
{
@ -5977,7 +5977,7 @@ namespace TL
custom_description = custom_description,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/bots.getBotRecommendations"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/bots.getBotRecommendations"/></para> <para>Possible <see cref="RpcException"/> codes: 400 (<a href="https://corefork.telegram.org/method/bots.getBotRecommendations#possible-errors">details</a>)</para></summary>
public static Task<Users_Users> Bots_GetBotRecommendations(this Client client, InputUserBase bot)
=> client.Invoke(new Bots_GetBotRecommendations
{
@ -6384,7 +6384,7 @@ namespace TL
gift_id = gift_id,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.upgradeStarGift"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.upgradeStarGift"/></para> <para>Possible <see cref="RpcException"/> codes: 400 (<a href="https://corefork.telegram.org/method/payments.upgradeStarGift#possible-errors">details</a>)</para></summary>
public static Task<UpdatesBase> Payments_UpgradeStarGift(this Client client, InputSavedStarGift stargift, bool keep_original_details = false)
=> client.Invoke(new Payments_UpgradeStarGift
{
@ -6392,7 +6392,7 @@ namespace TL
stargift = stargift,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.transferStarGift"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.transferStarGift"/></para> <para>Possible <see cref="RpcException"/> codes: 400 (<a href="https://corefork.telegram.org/method/payments.transferStarGift#possible-errors">details</a>)</para></summary>
public static Task<UpdatesBase> Payments_TransferStarGift(this Client client, InputSavedStarGift stargift, InputPeer to_id)
=> client.Invoke(new Payments_TransferStarGift
{
@ -6400,14 +6400,15 @@ namespace TL
to_id = to_id,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.getUniqueStarGift"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.getUniqueStarGift"/> [bots: ✓]</para></summary>
public static Task<Payments_UniqueStarGift> Payments_GetUniqueStarGift(this Client client, string slug)
=> client.Invoke(new Payments_GetUniqueStarGift
{
slug = slug,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.getSavedStarGifts"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.getSavedStarGifts"/> [bots: ✓]</para></summary>
/// <param name="limit">Maximum number of results to return, <a href="https://corefork.telegram.org/api/offsets">see pagination</a></param>
public static Task<Payments_SavedStarGifts> Payments_GetSavedStarGifts(this Client client, InputPeer peer, string offset, int limit = int.MaxValue, bool exclude_unsaved = false, bool exclude_saved = false, bool exclude_unlimited = false, bool exclude_limited = false, bool exclude_unique = false, bool sort_by_value = false)
=> client.Invoke(new Payments_GetSavedStarGifts
{
@ -6417,14 +6418,14 @@ namespace TL
limit = limit,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.getSavedStarGift"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.getSavedStarGift"/> [bots: ✓]</para></summary>
public static Task<Payments_SavedStarGifts> Payments_GetSavedStarGift(this Client client, params InputSavedStarGift[] stargift)
=> client.Invoke(new Payments_GetSavedStarGift
{
stargift = stargift,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.getStarGiftWithdrawalUrl"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.getStarGiftWithdrawalUrl"/> [bots: ✓]</para></summary>
public static Task<Payments_StarGiftWithdrawalUrl> Payments_GetStarGiftWithdrawalUrl(this Client client, InputSavedStarGift stargift, InputCheckPasswordSRP password)
=> client.Invoke(new Payments_GetStarGiftWithdrawalUrl
{
@ -6432,7 +6433,7 @@ namespace TL
password = password,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.toggleChatStarGiftNotifications"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.toggleChatStarGiftNotifications"/> [bots: ✓]</para></summary>
public static Task<bool> Payments_ToggleChatStarGiftNotifications(this Client client, InputPeer peer, bool enabled = false)
=> client.Invoke(new Payments_ToggleChatStarGiftNotifications
{
@ -6440,7 +6441,7 @@ namespace TL
peer = peer,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.toggleStarGiftsPinnedToTop"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.toggleStarGiftsPinnedToTop"/> [bots: ✓]</para></summary>
public static Task<bool> Payments_ToggleStarGiftsPinnedToTop(this Client client, InputPeer peer, params InputSavedStarGift[] stargift)
=> client.Invoke(new Payments_ToggleStarGiftsPinnedToTop
{
@ -6448,14 +6449,15 @@ namespace TL
stargift = stargift,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.canPurchaseStore"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.canPurchaseStore"/> [bots: ✓]</para></summary>
public static Task<bool> Payments_CanPurchaseStore(this Client client, InputStorePaymentPurpose purpose)
=> client.Invoke(new Payments_CanPurchaseStore
{
purpose = purpose,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.getResaleStarGifts"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.getResaleStarGifts"/> [bots: ✓]</para></summary>
/// <param name="limit">Maximum number of results to return, <a href="https://corefork.telegram.org/api/offsets">see pagination</a></param>
public static Task<Payments_ResaleStarGifts> Payments_GetResaleStarGifts(this Client client, long gift_id, string offset, int limit = int.MaxValue, long? attributes_hash = null, StarGiftAttributeId[] attributes = null, bool sort_by_price = false, bool sort_by_num = false)
=> client.Invoke(new Payments_GetResaleStarGifts
{
@ -6467,7 +6469,7 @@ namespace TL
limit = limit,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.updateStarGiftPrice"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/payments.updateStarGiftPrice"/> [bots: ✓]</para></summary>
public static Task<UpdatesBase> Payments_UpdateStarGiftPrice(this Client client, InputSavedStarGift stargift, long resell_stars)
=> client.Invoke(new Payments_UpdateStarGiftPrice
{
@ -6962,7 +6964,7 @@ namespace TL
file = file,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/phone.createConferenceCall"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/phone.createConferenceCall"/> [bots: ✓]</para></summary>
public static Task<UpdatesBase> Phone_CreateConferenceCall(this Client client, int random_id, Int256? public_key = null, byte[] block = null, DataJSON params_ = null, bool muted = false, bool video_stopped = false, bool join = false)
=> client.Invoke(new Phone_CreateConferenceCall
{
@ -6973,7 +6975,7 @@ namespace TL
params_ = params_,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/phone.deleteConferenceCallParticipants"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/phone.deleteConferenceCallParticipants"/> [bots: ✓]</para></summary>
public static Task<UpdatesBase> Phone_DeleteConferenceCallParticipants(this Client client, InputGroupCallBase call, long[] ids, byte[] block, bool only_left = false, bool kick = false)
=> client.Invoke(new Phone_DeleteConferenceCallParticipants
{
@ -6983,7 +6985,7 @@ namespace TL
block = block,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/phone.sendConferenceCallBroadcast"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/phone.sendConferenceCallBroadcast"/> [bots: ✓]</para></summary>
public static Task<UpdatesBase> Phone_SendConferenceCallBroadcast(this Client client, InputGroupCallBase call, byte[] block)
=> client.Invoke(new Phone_SendConferenceCallBroadcast
{
@ -6991,7 +6993,7 @@ namespace TL
block = block,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/phone.inviteConferenceCallParticipant"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/phone.inviteConferenceCallParticipant"/> [bots: ✓]</para></summary>
public static Task<UpdatesBase> Phone_InviteConferenceCallParticipant(this Client client, InputGroupCallBase call, InputUserBase user_id, bool video = false)
=> client.Invoke(new Phone_InviteConferenceCallParticipant
{
@ -7000,14 +7002,15 @@ namespace TL
user_id = user_id,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/phone.declineConferenceCallInvite"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/phone.declineConferenceCallInvite"/> [bots: ✓]</para></summary>
public static Task<UpdatesBase> Phone_DeclineConferenceCallInvite(this Client client, int msg_id)
=> client.Invoke(new Phone_DeclineConferenceCallInvite
{
msg_id = msg_id,
});
/// <summary><para>See <a href="https://corefork.telegram.org/method/phone.getGroupCallChainBlocks"/></para></summary>
/// <summary><para>See <a href="https://corefork.telegram.org/method/phone.getGroupCallChainBlocks"/> [bots: ✓]</para></summary>
/// <param name="limit">Maximum number of results to return, <a href="https://corefork.telegram.org/api/offsets">see pagination</a></param>
public static Task<UpdatesBase> Phone_GetGroupCallChainBlocks(this Client client, InputGroupCallBase call, int sub_chain_id, int offset = default, int limit = int.MaxValue)
=> client.Invoke(new Phone_GetGroupCallChainBlocks
{

View file

@ -6,7 +6,7 @@ namespace TL
{
public static partial class Layer
{
public const int Version = 207; // fetched 08/07/2025 17:40:58
public const int Version = 209; // fetched 14/07/2025 20:10:02
internal const int SecretChats = 144;
internal const int MTProto2 = 73;
internal const uint VectorCtor = 0x1CB5C415;
@ -1039,7 +1039,7 @@ namespace TL
[0x455B853D] = typeof(MessageViews),
[0xB6C4F543] = typeof(Messages_MessageViews),
[0xA6341782] = typeof(Messages_DiscussionMessage),
[0xAFBC09DB] = typeof(MessageReplyHeader),
[0x6917560B] = typeof(MessageReplyHeader),
[0x0E5AF939] = typeof(MessageReplyStoryHeader),
[0x83D60FC2] = typeof(MessageReplies),
[0xE8FD8014] = typeof(PeerBlocked),
@ -1222,7 +1222,7 @@ namespace TL
[0xBD74CF49] = typeof(StoryViewPublicRepost),
[0x59D78FC5] = typeof(Stories_StoryViewsList),
[0xDE9EED1D] = typeof(Stories_StoryViews),
[0xB07038B0] = typeof(InputReplyToMessage),
[0x869FBE10] = typeof(InputReplyToMessage),
[0x5881323A] = typeof(InputReplyToStory),
[0x69D66C45] = typeof(InputReplyToMonoForum),
[0x3FC9053B] = typeof(ExportedStoryLink),

View file

@ -13,8 +13,8 @@
<PackageId>WTelegramClient</PackageId>
<Authors>Wizou</Authors>
<VersionPrefix>0.0.0</VersionPrefix>
<VersionSuffix>layer.207</VersionSuffix>
<Description>Telegram Client API (MTProto) library written 100% in C# and .NET Standard | Latest API layer: 207
<VersionSuffix>layer.209</VersionSuffix>
<Description>Telegram Client API (MTProto) library written 100% in C# and .NET Standard | Latest API layer: 209
Release Notes:
$(ReleaseNotes.Replace("|", "%0D%0A").Replace(" - ","%0D%0A- ").Replace(" ", "%0D%0A%0D%0A"))</Description>