Guest User

Untitled

a guest
Nov 18th, 2016
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.81 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15. using System.Configuration;
  16. using System.Diagnostics;
  17. using System.IO;
  18. using System.Threading;
  19. using TeleSharp.TL;
  20. using TeleSharp.TL.Messages;
  21. using TLSharp.Core;
  22. using TLSharp.Core.Requests;
  23. using TLSharp.Core.Utils;
  24.  
  25. namespace Socket_WPF
  26. {
  27. public class TLSharpTests
  28. {
  29. private string NumberToSendMessage = "<Мой номер>";
  30.  
  31. private string NumberToAuthenticate { get; set; }
  32.  
  33. private string CodeToAuthenticate = "";
  34.  
  35. private string PasswordToAuthenticate { get; set; }
  36.  
  37. private string NotRegisteredNumberToSignUp { get; set; }
  38.  
  39. private string UserNameToSendMessage { get; set; }
  40.  
  41. private string NumberToGetUserFull { get; set; }
  42.  
  43. private string NumberToAddToChat { get; set; }
  44.  
  45. public string ApiHash = "<appHash>";
  46.  
  47. public int ApiId = <appID>;
  48.  
  49. class Assert
  50. {
  51. static internal void IsNotNull(object obj)
  52. {
  53. IsNotNullHanlder(obj);
  54. }
  55.  
  56. static internal void IsTrue(bool cond)
  57. {
  58. IsTrueHandler(cond);
  59. }
  60. }
  61.  
  62. internal static Action<object> IsNotNullHanlder;
  63. internal static Action<bool> IsTrueHandler;
  64.  
  65. protected void Init(Action<object> notNullHandler, Action<bool> trueHandler)
  66. {
  67. IsNotNullHanlder = notNullHandler;
  68. IsTrueHandler = trueHandler;
  69.  
  70. // Setup your API settings and phone numbers in app.config
  71. //GatherTestConfiguration();
  72. }
  73.  
  74. public TelegramClient NewClient()
  75. {
  76. try
  77. {
  78. return new TelegramClient(ApiId, ApiHash);
  79. }
  80. catch (MissingApiConfigurationException ex)
  81. {
  82. throw new Exception($"Please add your API settings to the `app.config` file. (More info: {MissingApiConfigurationException.InfoUrl})",
  83. ex);
  84. }
  85. }
  86.  
  87.  
  88. /* public void GatherTestConfiguration()
  89. {
  90. string appConfigMsgWarning = "{0} not configured in app.config! Some tests may fail.";
  91.  
  92. TLSharpTests ApiHash = ConfigurationManager.AppSettings[nameof(ApiHash)];
  93. if (string.IsNullOrEmpty(ApiHash))
  94. Debug.WriteLine(appConfigMsgWarning, nameof(ApiHash));
  95.  
  96. var apiId = ConfigurationManager.AppSettings[nameof(ApiId)];
  97. if (string.IsNullOrEmpty(apiId))
  98. Debug.WriteLine(appConfigMsgWarning, nameof(ApiId));
  99. else
  100. ApiId = int.Parse(apiId);
  101.  
  102. NumberToAuthenticate = ConfigurationManager.AppSettings[nameof(NumberToAuthenticate)];
  103. if (string.IsNullOrEmpty(NumberToAuthenticate))
  104. Debug.WriteLine(appConfigMsgWarning, nameof(NumberToAuthenticate));
  105.  
  106. CodeToAuthenticate = ConfigurationManager.AppSettings[nameof(CodeToAuthenticate)];
  107. if (string.IsNullOrEmpty(CodeToAuthenticate))
  108. Debug.WriteLine(appConfigMsgWarning, nameof(CodeToAuthenticate));
  109.  
  110. PasswordToAuthenticate = ConfigurationManager.AppSettings[nameof(PasswordToAuthenticate)];
  111. if (string.IsNullOrEmpty(PasswordToAuthenticate))
  112. Debug.WriteLine(appConfigMsgWarning, nameof(PasswordToAuthenticate));
  113.  
  114. NotRegisteredNumberToSignUp = ConfigurationManager.AppSettings[nameof(NotRegisteredNumberToSignUp)];
  115. if (string.IsNullOrEmpty(NotRegisteredNumberToSignUp))
  116. Debug.WriteLine(appConfigMsgWarning, nameof(NotRegisteredNumberToSignUp));
  117.  
  118. UserNameToSendMessage = ConfigurationManager.AppSettings[nameof(UserNameToSendMessage)];
  119. if (string.IsNullOrEmpty(UserNameToSendMessage))
  120. Debug.WriteLine(appConfigMsgWarning, nameof(UserNameToSendMessage));
  121.  
  122. NumberToGetUserFull = ConfigurationManager.AppSettings[nameof(NumberToGetUserFull)];
  123. if (string.IsNullOrEmpty(NumberToGetUserFull))
  124. Debug.WriteLine(appConfigMsgWarning, nameof(NumberToGetUserFull));
  125.  
  126. NumberToAddToChat = ConfigurationManager.AppSettings[nameof(NumberToAddToChat)];
  127. if (string.IsNullOrEmpty(NumberToAddToChat))
  128. Debug.WriteLine(appConfigMsgWarning, nameof(NumberToAddToChat));
  129. }
  130. */
  131. public virtual async Task AuthUser()
  132. {
  133. var client = NewClient();
  134.  
  135. await client.ConnectAsync();
  136.  
  137. var hash = await client.SendCodeRequestAsync(NumberToAuthenticate);
  138. var code = CodeToAuthenticate; // you can change code in debugger too
  139.  
  140. if (String.IsNullOrWhiteSpace(code))
  141. {
  142. throw new Exception("CodeToAuthenticate is empty in the app.config file, fill it with the code you just got now by SMS/Telegram");
  143. }
  144.  
  145. TLUser user = null;
  146. try
  147. {
  148. user = await client.MakeAuthAsync(NumberToAuthenticate, hash, code);
  149. }
  150. catch (CloudPasswordNeededException ex)
  151. {
  152. var password = await client.GetPasswordSetting();
  153. var password_str = PasswordToAuthenticate;
  154.  
  155. user = await client.MakeAuthWithPasswordAsync(password, password_str);
  156. }
  157. catch (InvalidPhoneCodeException ex)
  158. {
  159. throw new Exception("CodeToAuthenticate is wrong in the app.config file, fill it with the code you just got now by SMS/Telegram",
  160. ex);
  161. }
  162. Assert.IsNotNull(user);
  163. Assert.IsTrue(client.IsUserAuthorized());
  164. }
  165.  
  166. public virtual async Task SendMessageTest()
  167. {
  168. NumberToSendMessage = "<Мой номер>";
  169. if (string.IsNullOrWhiteSpace(NumberToSendMessage))
  170. throw new Exception($"Please fill the '{nameof(NumberToSendMessage)}' setting in app.config file first");
  171.  
  172. // this is because the contacts in the address come without the "+" prefix
  173. var normalizedNumber = NumberToSendMessage.StartsWith("+") ?
  174. NumberToSendMessage.Substring(1, NumberToSendMessage.Length - 1) :
  175. NumberToSendMessage;
  176.  
  177. var client = NewClient();
  178.  
  179. await client.ConnectAsync();
  180.  
  181. var result = await client.GetContactsAsync();
  182.  
  183. var user = result.users.lists
  184. .Where(x => x.GetType() == typeof(TLUser))
  185. .Cast<TLUser>()
  186. .FirstOrDefault(x => x.phone == normalizedNumber);
  187.  
  188. if (user == null)
  189. {
  190. throw new System.Exception("Number was not found in Contacts List of user: " + NumberToSendMessage);
  191. }
  192.  
  193. await client.SendTypingAsync(new TLInputPeerUser() { user_id = user.id });
  194. Thread.Sleep(3000);
  195. await client.SendMessageAsync(new TLInputPeerUser() { user_id = user.id }, "TEST");
  196. }
  197.  
  198. public virtual async Task SendMessageToChannelTest()
  199. {
  200. var client = NewClient();
  201.  
  202. await client.ConnectAsync();
  203.  
  204. var dialogs = (TLDialogs)await client.GetUserDialogsAsync();
  205. var chat = dialogs.chats.lists
  206. .Where(c => c.GetType() == typeof(TLChannel))
  207. .Cast<TLChannel>()
  208. .FirstOrDefault(c => c.title == "TestGroup");
  209.  
  210. await client.SendMessageAsync(new TLInputPeerChannel() { channel_id = chat.id, access_hash = chat.access_hash.Value }, "TEST MSG");
  211. }
  212.  
  213. public virtual async Task SendPhotoToContactTest()
  214. {
  215. var client = NewClient();
  216.  
  217. await client.ConnectAsync();
  218.  
  219. var result = await client.GetContactsAsync();
  220.  
  221. var user = result.users.lists
  222. .Where(x => x.GetType() == typeof(TLUser))
  223. .Cast<TLUser>()
  224. .FirstOrDefault(x => x.phone == NumberToSendMessage);
  225.  
  226. var fileResult = (TLInputFile)await client.UploadFile("cat.jpg", new StreamReader("data/cat.jpg"));
  227. await client.SendUploadedPhoto(new TLInputPeerUser() { user_id = user.id }, fileResult, "kitty");
  228. }
  229.  
  230. public virtual async Task SendBigFileToContactTest()
  231. {
  232. var client = NewClient();
  233.  
  234. await client.ConnectAsync();
  235.  
  236. var result = await client.GetContactsAsync();
  237.  
  238. var user = result.users.lists
  239. .Where(x => x.GetType() == typeof(TLUser))
  240. .Cast<TLUser>()
  241. .FirstOrDefault(x => x.phone == NumberToSendMessage);
  242.  
  243. var fileResult = (TLInputFileBig)await client.UploadFile("some.zip", new StreamReader("<some big file path>"));
  244.  
  245. await client.SendUploadedDocument(
  246. new TLInputPeerUser() { user_id = user.id },
  247. fileResult,
  248. "some zips",
  249. "application/zip",
  250. new TLVector<TLAbsDocumentAttribute>());
  251. }
  252.  
  253. public virtual async Task DownloadFileFromContactTest()
  254. {
  255. var client = NewClient();
  256.  
  257. await client.ConnectAsync();
  258.  
  259. var result = await client.GetContactsAsync();
  260.  
  261. var user = result.users.lists
  262. .Where(x => x.GetType() == typeof(TLUser))
  263. .Cast<TLUser>()
  264. .FirstOrDefault(x => x.phone == NumberToSendMessage);
  265.  
  266. var inputPeer = new TLInputPeerUser() { user_id = user.id };
  267. var res = await client.SendRequestAsync<TLMessagesSlice>(new TLRequestGetHistory() { peer = inputPeer });
  268. var document = res.messages.lists
  269. .Where(m => m.GetType() == typeof(TLMessage))
  270. .Cast<TLMessage>()
  271. .Where(m => m.media != null && m.media.GetType() == typeof(TLMessageMediaDocument))
  272. .Select(m => m.media)
  273. .Cast<TLMessageMediaDocument>()
  274. .Where(md => md.document.GetType() == typeof(TLDocument))
  275. .Select(md => md.document)
  276. .Cast<TLDocument>()
  277. .First();
  278.  
  279. var resFile = await client.GetFile(
  280. new TLInputDocumentFileLocation()
  281. {
  282. access_hash = document.access_hash,
  283. id = document.id,
  284. version = document.version
  285. },
  286. document.size);
  287.  
  288. Assert.IsTrue(resFile.bytes.Length > 0);
  289. }
  290.  
  291. public virtual async Task DownloadFileFromWrongLocationTest()
  292. {
  293. var client = NewClient();
  294.  
  295. await client.ConnectAsync();
  296.  
  297. var result = await client.GetContactsAsync();
  298.  
  299. var user = result.users.lists
  300. .Where(x => x.GetType() == typeof(TLUser))
  301. .Cast<TLUser>()
  302. .FirstOrDefault(x => x.id == 5880094);
  303.  
  304. var photo = ((TLUserProfilePhoto)user.photo);
  305. var photoLocation = (TLFileLocation)photo.photo_big;
  306.  
  307. var resFile = await client.GetFile(new TLInputFileLocation()
  308. {
  309. local_id = photoLocation.local_id,
  310. secret = photoLocation.secret,
  311. volume_id = photoLocation.volume_id
  312. }, 1024);
  313.  
  314. var res = await client.GetUserDialogsAsync();
  315.  
  316. Assert.IsTrue(resFile.bytes.Length > 0);
  317. }
  318.  
  319. public virtual async Task SignUpNewUser()
  320. {
  321. var client = NewClient();
  322. await client.ConnectAsync();
  323.  
  324. var hash = await client.SendCodeRequestAsync(NotRegisteredNumberToSignUp);
  325. var code = "";
  326.  
  327. var registeredUser = await client.SignUpAsync(NotRegisteredNumberToSignUp, hash, code, "TLSharp", "User");
  328. Assert.IsNotNull(registeredUser);
  329. Assert.IsTrue(client.IsUserAuthorized());
  330.  
  331. var loggedInUser = await client.MakeAuthAsync(NotRegisteredNumberToSignUp, hash, code);
  332. Assert.IsNotNull(loggedInUser);
  333. }
  334.  
  335. public virtual async Task CheckPhones()
  336. {
  337. var client = NewClient();
  338. await client.ConnectAsync();
  339.  
  340. var result = await client.IsPhoneRegisteredAsync(NumberToAuthenticate);
  341. Assert.IsTrue(result);
  342. }
  343. }
  344.  
  345. /// <summary>
  346. /// Логика взаимодействия для MainWindow.xaml
  347. /// </summary>
  348. public partial class MainWindow : Window
  349. {
  350. public MainWindow()
  351. {
  352. InitializeComponent();
  353. }
  354.  
  355. private void authFunc(object sender, RoutedEventArgs e)
  356. {
  357. }
  358.  
  359. private void textBox_Copy_TextChanged(object sender, TextChangedEventArgs e)
  360. {
  361.  
  362. }
  363.  
  364. private void Button_Click_1(object sender, RoutedEventArgs e)
  365. {
  366. test();
  367. }
  368. async void test()
  369. {
  370. var client = new TelegramClient(<appID>, "<appHash>");
  371. await client.ConnectAsync();
  372.  
  373. var hash = await client.SendCodeRequestAsync("<Мой номер>");
  374. var code = "<code_from_telegram>";
  375. var user = await client.MakeAuthAsync("<Мой номер>", hash, code);
  376. //get available contacts
  377. var result = await client.GetContactsAsync();
  378. MessageBox.Show("Authirzed");
  379.  
  380. }
  381.  
  382.  
  383. private void textBox_TextChanged(object sender, TextChangedEventArgs e)
  384. {
  385.  
  386. }
  387.  
  388. private void checkBox_Checked(object sender, RoutedEventArgs e)
  389. {
  390. }
  391. }
  392. }
Add Comment
Please, Sign In to add comment