From 3fdc7bc1ad097a44788cad713eb5e9c05ef29e86 Mon Sep 17 00:00:00 2001
From: Wizou <11647984+wiz0u@users.noreply.github.com>
Date: Sat, 8 Oct 2022 15:35:10 +0200
Subject: [PATCH] update documentation before release
---
EXAMPLES.md | 15 +++++++++++++++
Examples/ASPnet_webapp.zip | Bin 5037 -> 4820 bytes
Examples/WinForms_app.zip | Bin 10757 -> 10412 bytes
FAQ.md | 19 +++++++++++++++++++
README.md | 26 ++++++++++++++++++++++++++
5 files changed, 60 insertions(+)
diff --git a/EXAMPLES.md b/EXAMPLES.md
index 0c4a7a5..162ffa8 100644
--- a/EXAMPLES.md
+++ b/EXAMPLES.md
@@ -430,6 +430,12 @@ You can find an example for such custom session store in [Examples/Program_Herok
### Fun with custom emojies and reactions on pinned messages
```csharp
+// • Sending a message with custom emojies in Markdown to ourself:
+var text = "Vicksy says Hi! [👋](emoji?id=5190875290439525089)";
+var entities = client.MarkdownToEntities(ref text, premium: true);
+await client.SendMessageAsync(InputPeer.Self, text, entities: entities);
+// also available in HTML: "👋"
+
// • Fetch all available standard emoji reactions
var all_emoji = await client.Messages_GetAvailableReactions();
@@ -475,3 +481,12 @@ await client.Messages_ForwardMessages(from_chat, new[] { msg.ID }, new[] { WTele
// • Alternative solution to copy the message (the full message is needed)
await client.SendMessageAsync(to_chat, msg.message, msg.media?.ToInputMedia(), entities: msg.entities);
```
+
+
+### Send/receive end-to-end encrypted messages in Secret Chats
+
+This can be done easily using the helper class `WTelegram.SecretChats` offering methods to manage/encrypt/decrypt secret chats & encrypted messages.
+
+You can view a full working example at [Examples/Program_SecretChats.cs](Examples/Program_SecretChats.cs).
+
+Secret Chats have been tested successfully with Telegram Android & iOS official clients.
diff --git a/Examples/ASPnet_webapp.zip b/Examples/ASPnet_webapp.zip
index 238bda9efae3d4870b51a4d50d9e6b825fa76cf9..0e6d5a9958803389b17d8bd853410500acdc8891 100644
GIT binary patch
delta 2251
zcmZuy3pAAb7XN09M;>F0@tVjq9(g6NX^dAyDDS2*Vp7L*@)#jXXBd<Hx&$YD`3j
zBQ7GB(8DFK5Ft~c;fy0Hj}uo-j?wCNTlem@{%il&_x<*7{r6sb|MuNIBN}jbCm|RL
z5SUFNo>U93fWW{4JPB-pSjq@4gN@H|?oa@zfdK%X>5c}^ATW#=Vn1!d8ex^(VV>z}
zsaRpO_OTR+Zb(&6hmxc{Na1;gZ(^6c&HWuwO97Uv%nk9I4TqJX%!d=j1^-S6`ZQVG
zF89(;m^=z|v*MmTGK*X86LqfHA2j}MKV-$hkJA3KJi~(R+hfx_xLV{}t&m^05F^oQ
zuhU?&-e#TpJDV|P99%mkjCAAS|Ljvxeh{tr+gSX3jQP3Y=Z&cc-ge)uQIw4dp74Kh
z6(1P$p$ft^k)f+e@>m>-X>x3I^$ra+?Ae}E_(BzbMIU0G^}*%Is?nG_T?~U7wVXDXiMsi{hOj6^74>Kk
zc`VI|(wWA)mMueKcjQB*G8X5Z?IPvU<6|x++!D`YXE_g}Xv#<00s8HYeRk__b@ThDp>|V6{
z2L~Zb20^N+!#M+YXG%Xn4#pcSe65seq&mtzRI(527q5Fw%_mpRR@s5@hDyG5l&$-z
z057+r*QU>+KR}_q1#kI!%xbP8jiD#mk#A5qs$BTqm3^xKk-Bag@`ZeN)F)iYu0NRZ
zC%MsaKGAZ+m%mp(+m%$_QcaLOhRmEsqOIbIPrat3muAmcQYjw`KU@F4=peA&N>ui
zjZOwLm-e-9)`!5NA+T41-kTP-fD106_Vye$1OQ$Nfm3i5a7tzuqaml)^|3YT@|tFw
z(CJr)sTrP9)$T>(DJeh*1!qfmZa7Tn@2kjHWc8(7ozXRI1%$8Yx)i!D51gZI-l(}c
zu*Pro>@^#VglgAc*sHs{=Rza@wnwZENmgf$UC2qAHF7mUL=whsCe=;^LZAKBl;@IT
zRN-;5>Be-%dtPoLLw%R=TdjV+nk;$(*P-5XAGK1fSn;5w68bf?+`49&{OGvme4>vA
znlF)A;OI^qSY+K~c`cICM*YC4Z&UXIP|-5>xpXdIgUi^w|VQM5a$mPuKNw=Vu4=
zl7=M04&Qx8DnFs+5Bu#xn#Nrb^3rlvHqKHJ
zL5@gjZtqStu6a>@r&mfho3+whWK?qf5Pa3>`ndDjk(lx#)^9c`%V6qXb7zF6iRL%ed`N`YWD;@bQUP3?Ut
zWwPJCi>`K1CQ6=eTfd?ZIX&Qft`+iK5XFFn>v)oUwbH}p?G^+89YG3M1~D)y_OySX
zzJGN5QBDZg01;2aY+{yYtd~T?imdTIR7{IrN11dPio`O-E>65Sb6{XL*DMOwS6gqzaxI04SrgUcY9eJWspuip4F_+btedCUe
z?#)2k!HrWYGm&+;hr>ihw&`?iu=%;VlF22pIC$d}bo>NV+~~;zc
z(p;5RaW2YPixw_TNv=>gWYkVl7K}=roQurgp7(WH)u0|rW$jGW)1&K)jQdDvD%Zzx
zvs(!rUcq!}8x8}|z8%)7c~C9sBidE$1UIXyDY-3iHb3qk4jzo6OYch=p$2AH;b#P&
zjpK>`wCEfts8k`QD+QQ_F1s^b9&a>~xgy6Poo-|PSW-oF9w)3PDBR#fI@Zk7{bFHk
z8bW){?${+ho>|Jz10&wV{`z4t^&vex=6QCmno^8#=Tns8eNj~3KB<-j5f8JbW&BW5
zDNq)ojcgUVeVRO1f*A@89b6qczs_>%`bwR*@f#U6(r!dg%k+NP(RaJ1vbc+#(`&FE
zr%-krHk+kETg9|M$moCrazoXmv>|58tFL7|S$8K0^Z@W<^?@hhHY(vSShO<(;}G*o
z_O`c5TzHP4jBhms1d0M%;g=vN@St?!w-wnb?E?4umsxehRzSS0`IZNFBjlxi+M1vp
z!fThZ_BW8C(dah#CsqKY!4%=@f(^W7n5_fCm>x=CF-#m3k}<#tgi!G3yJ3OvSj5(+
zFTw)sl#B#gd^;8ZAb=vUuHys<(x9*e9%RbMZ`1tHQvksIhX%7nVEo;dU
zjbs^185CKXvQ1OjMd>r%(|ON(zVF_1&%MuGp1VEw_uL_Tg*?*w*dA^n5GSm9blcY;
zA8~OTJTI^Znz@Y7oC3K+$X^}|0{w>@1kwSD`Ne@-0y5MvJ9@zT!zg1|;>DcGh=aCX
zUwMiIh3ez?l|_}smzIfW#QEQH_4DB)B*?Rh(}x`99s_NYT?!`6vZ5js<3cOvbqdCpRYSg9xIG~wtZ%Ym
zY@S?Rq(jB{4J=9~cGgzS(+rRk&U`~`$!7)0TfrXA%yi$}%`7#WbtgYc%ba5ObuFwX
z1=FU}9>ji1zkbYDbtKPP{ZxFiY)*xDY{Ixfb6^eq;5iax?I<{ZvueM5mEeW(m}%nD
zNd+H^wE6Wrxye?q6J>{8Y`H&B7tudLI)ndyF5B_`$pd1<@kS*Bf-2`=(^EaB@*
zXy~g~&BeC$u8#&^G~M+~C=ptwj0t9gU7z$vQf#T3bDh1Jo1mn{=qJ}`VFOnPNCpPi-}8%Q)1z3QU&xFgQ_
zWvni(qT;pDpzA?WP4(8kvXIW>$_0ulq!(W_nHq5MO(@(1b=@Rtlj>i
zI#>R?{svBWyp3)WXXXhcE2!X~gvvyP~v;
z3LBbRf79^%nboUuSm__XVH^VkrUk@mtGFGwxScq*g@78O1G0(sOR9M#O)l1-Lll!zkEjUN
zQA+6z2^qn&eo#DfrJVanj@ju3i?Vye5q}Md2U2^RWROXw-Nd3N+x!4@lbtw@b{s*{Yaj7i}(4=Z4K&IqF@51FxkEe;Quc+(MoH#HZ!7Ha8bfwH>?o
z*~g(j%WoXc!zSGI9lTtACCTa4kiIw8@p7V(U3^5nZ)?3UI8=i?GPdI8cRU;
zP!Su}jgS0}oHQmcf28c`U#4cyR5G@DPmi*HM=yBYk*`&SyMWOgkO(wOTNLj=WoajA
z?p|#JVjng7_rYFRig1&ij?MJlj4T%`CfTwebC$TWo+@IhGC3WL)UoU`EIQCELZVsK
z%WCAjNm@3>AQL4oN?qO`*fF~DKIRLH=>3JsqnBe*c2Ypjz>r_7CXSz`zjEt}_QtUe
zOHA_D{@kOC*9g%YGQN?p|?{-n962J#D>RCD!yBZIQE>(}eRmbrkikc9cRoqaU>-%&`T60W4y*$QC-QD>U*8jN#ac10z
z+Uy#B)tqW>LU))$sGtgGN)I+((XtV&zf-b2QrllL-Q%mP&~Al?z&i?9Q5tpk@AaPF
zpmm%NAPqRxn(L`mky4b!DjHk^Y#pLE<=Gysx^=5eNXUw!5as6hUrkNn?7hsxqJ1aC
zXAx)LOQSS;N5xdCrsC)P$#3m)b0#FIqhVpq51sOJ)@sxuPf@P7!*g>_LbU4zl-lsV
zF15iCbwfrY(dFj%JRaal#i$nL{7H9eylrRHVX?Z4D95_=v*>+IzrE7>N&qB!0!N
zeMC_qWr&pdUgu_lUCQP>T76FLIe}c1icA%Ia5N0D{}$#4+e3{eX7sh%RBM8|cL7jh
z=Lb*f#*o=M*0#UkSgmVX<*Qj+Zp#76EskKn#<5?~Q^@Iiru#*0?Z*dhV+(Juzl2~T
z{m%`5MXu2`O{@f=pIOYe(7LMAOSJnw-yr*WLv50c9a|m-V!DIc9=-WtGu7z$`!d4E
z2UQx_YFczl`%+FH;Y(M)q^tr}s?O1Nd2u+nOVuZoME5%uGW+n&Yd)zO>#@kZo>AxY
z*{hv$Uhl%TCr&Kh!Tk*pR%ha3pQxKm1(dTKq#j5JwK2oSJusCJB{E4*r@yod
z_dubPahAav8uOooEhZILZshf>i6>pi)`td&vPoGD+~kSU16m*82b6Rv!L_x+Ho%vR
zl#JBEt7qsD7Z+f|ZwQZq@fAt_(WO<==facRH-GK`mkWFd^p8&m;`j-CD!>3w?Uhk3
zbNC<+Fo+ZZ=J~0>3p5-ELSFjY;j@t>z!C|ETvLwOt_Et*qWu4I|A3!>Bd2{2(>N3$
zphSVs0y5yU+?h65KnA7%H`m=z;^4OsP8EO>HO>8;xPo#S<=R!aGxZ<&pY_2(|KkNf
za-6ToPLSD27$`><46TGipHcL{;6}NKj^Vrc`=E(2l&T3pkF(gQeh{zG-NE_#gZL
z185O&5Q0@;$&vmGuH-8W
diff --git a/Examples/WinForms_app.zip b/Examples/WinForms_app.zip
index 35c9bc3b686c1063f9263f638706cb9553148eda..b92e8323ffc1454655a318c82c93514a1e9511a1 100644
GIT binary patch
delta 5753
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
MkcS-DvHtb;UoqvCq5uE@
delta 6012
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
NB#jvxx$UoP{uiS0F+BhP
diff --git a/FAQ.md b/FAQ.md
index 6b01e6b..918c4a8 100644
--- a/FAQ.md
+++ b/FAQ.md
@@ -42,6 +42,9 @@ This might require adding a reference *(and `using`)* to the Microsoft.VisualBas
A more complex solution requires the use of a `ManualResetEventSlim` that you will wait for in Config callback,
and when the user has provided the verification_code through your app, you "set" the event to release your Config callback so it can return the code.
+
+Another solution is to use the [alternative login method](README.md#alternative-simplified-configuration-login),
+calling `client.Login(...)` as the user provides the requested configuration elements.
You can download such full example apps [for WinForms](https://github.com/wiz0u/WTelegramClient/raw/master/Examples/WinForms_app.zip) and [for ASP.NET](https://github.com/wiz0u/WTelegramClient/raw/master/Examples/ASPnet_webapp.zip)
@@ -237,6 +240,22 @@ Pure WebApp hosts might not be adequate as they will recycle (stop) your app if
There are many cheap VPS Hosting offers available, for example Heroku:
See [Examples/Program_Heroku.cs](Examples/Program_Heroku.cs) for such an implementation and the steps to host/deploy it.
+
+#### 14. Secret Chats implementation details
+
+The following choices were made while implementing Secret Chats in WTelegramClient:
+- It may not support remote antique Telegram clients *(prior to 2018, still using insecure MTProto 1.0)*
+- It doesn't store outgoing messages *(so if remote client was offline for a week and ask us to resend old messages, we will send void data)*
+- It doesn't store incoming messages on disk *(it's up to you if you want to store them)*
+- If you pass `DecryptMessage` parameter `fillGaps: true` *(the default)*, incoming messages are ensured to be delivered to you in correct order.
+If for some (weird) reason, we received them in incorrect order, messages are kept in memory until the requested missing messages are obtained.
+If those missing messages are never obtained during the session, incoming messages might get stuck and lost.
+- SecretChats file data is only valid for the current user, so make sure to select the right file *(or a new file name)* if you change logged-in user.
+- If you want to accept Secret Chats request only from specific user, you must check it in OnUpdate before:
+`await Secrets.HandleUpdate(ue, ue.chat is EncryptedChatRequested ecr && ecr.admin_id == EXPECTED_USER_ID);`
+- As recommended, new encryption keys are negotiated every 100 sent/received messages or after one week.
+If remote client doesn't complete this negotiation before reaching 200 messages, the Secret Chat is aborted.
+
## Troubleshooting guide
diff --git a/README.md b/README.md
index 2debc6f..1447856 100644
--- a/README.md
+++ b/README.md
@@ -87,6 +87,31 @@ Another simple approach is to pass `Environment.GetEnvironmentVariable` as the c
Finally, if you want to redirect the library logs to your logger instead of the Console, you can install a delegate in the `WTelegram.Helpers.Log` static property.
Its `int` argument is the log severity, compatible with the [LogLevel enum](https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.logging.loglevel)
+# Alternative simplified configuration & login
+Since version 3.0.0, a new approach to login/configuration has been added. Some people might find it easier to deal with:
+
+```csharp
+WTelegram.Client client = new WTelegram.Client(YOUR_API_ID, "YOUR_API_HASH");
+await DoLogin("+12025550156");
+
+async Task DoLogin(string loginInfo) // add this method to your code
+{
+ while (client.User == null)
+ switch (await client.Login(loginInfo)) // returns which configuration info is requested for the login to continue
+ {
+ case "verification_code": Console.Write("Code: "); loginInfo = Console.ReadLine(); break;
+ case "name": loginInfo = "John Doe"; break; // if sign-up is required (first_name + last_name)
+ case "password": loginInfo = "secret!"; break; // if user has enabled 2FA
+ default: loginInfo = null; break;
+ }
+ Console.WriteLine($"We are logged-in as {client.User} (id {client.User.id})");
+}
+```
+
+With this method, you can choose in some cases to interrupt the login loop via a `return` instead of `break`, and resume it later
+by calling `DoLogin(requestedCode)` again once you've obtained the requested code/password/etc...
+See [WinForms example](https://github.com/wiz0u/WTelegramClient/raw/master/Examples/WinForms_app.zip) and [ASP.NET example](https://github.com/wiz0u/WTelegramClient/raw/master/Examples/ASPnet_webapp.zip)
+
# Example of API call
>ℹ️ The Telegram API makes extensive usage of base and derived classes, so be ready to use the various C# syntaxes
@@ -168,6 +193,7 @@ This library can be used for any Telegram scenarios including:
- Sequential or parallel automated steps based on API requests/responses
- Real-time [monitoring](https://github.com/wiz0u/WTelegramClient/blob/master/EXAMPLES.md#updates) of incoming Updates/Messages
- Download/upload of files/media
+- Exchange end-to-end encrypted messages in [Secret Chats](https://github.com/wiz0u/WTelegramClient/blob/master/EXAMPLES.md#e2e)
- Building a full-featured interactive client
It has been tested in a Console app, [in Windows Forms](https://github.com/wiz0u/WTelegramClient/raw/master/Examples/WinForms_app.zip),