public Form1() { InitializeComponent(); var secret = GenerateRandomSecret(); var mtprotoProxy = new MTProtoProxyServer(secret, 443); mtprotoProxy.StartAsync(); }
public void st_Click(object sender, EventArgs e) { if (st.Text == "Start") { if (ip.Text == "") { MetroFramework.MetroMessageBox.Show(Form.ActiveForm, "\nPlease enter IP to ip field\nFor Example:\n127.0.0.1\n51.254.164.54", "Error On Start"); return; } if (backlog.Text == "" || backlog.Text == "0") { MetroFramework.MetroMessageBox.Show(Form.ActiveForm, "\nPlease enter Backlog to Backlog field\nFor Example:\n100\n255", "Error On Start"); return; } if (port.Text == "" || port.Text == "0") { MetroFramework.MetroMessageBox.Show(Form.ActiveForm, "\nPlease enter Port Number to port field\nFor Example:\n4000\n8888", "Error On Start"); return; } if (secret.Text == "") { MetroFramework.MetroMessageBox.Show(Form.ActiveForm, "\nPlease enter secret to secret field\nFor Example:\ndbd9a4f78fb145b7b513aaae49864b31\nor for generate new secret enter 0", "Error On Start"); return; } st.Text = "Stop"; pport = int.Parse(port.Text); back_log = int.Parse(backlog.Text); if (secret.Text == "0") { string n = GenerateRandomSecret(); this.secret.Text = n; sesret = n; } else { sesret = secret.Text; } iip = ip.Text; var mtp = new MTProtoProxyServer(ref sesret, ref pport, ref iip); mtp.Start(ref back_log); // var mtprotoProxy = new MTProtoProxyServer("secret", port, "ip"); // mtprotoProxy.Start(backlog); Console.WriteLine("Created By Soheil1234"); Console.WriteLine("open source => https://github.com/Metal-Ghost/MTPProxy"); st.Enabled = false; } else if (st.Text == "Stop") { MetroFramework.MetroMessageBox.Show(Form.ActiveForm, "\nOn MTPROTOPROXY stop code not released Can not stop you must restart the Application", "Error On Stop"); st.Text = "Start"; Application.Restart(); } }
private async Task ReadGroupsFileAsync(/*CancellationToken ct*/ CancellationToken cancellationToken) { // CancellationToken ct = tokenSource2.Token; // Were we already canceled? //ct.ThrowIfCancellationRequested(); //if (ct.IsCancellationRequested) //{ // Console.WriteLine("Операция прервана токеном"); // return; //} //Task task = null; //if (cancellationToken.IsCancellationRequested) //{ // throw new TaskCanceledException(task); // // cancellationToken.ThrowIfCancellationRequested(); //} f_start = true; var _api = new VkApi(); //Авторизация _api.Authorize(new ApiAuthParams { Login = vkLogin, Password = vkPassword, AccessToken = Token }); int y = 0; //порядковый номер группы string[] lines = File.ReadAllLines(groupsfilepath); var last = File.ReadAllLines(groupsfilepath).Last(); //последняя строка - группа var linescount = File.ReadAllLines(groupsfilepath).Length; //число строк foreach (var K in lines) //для каждой группы получаем список записей { long? id2 = Convert.ToInt64(K); WallGetObject wallposts = _api.Wall.Get(new WallGetParams { OwnerId = id2, //Идентификатор пользователя или сообщества, со стены которого необходимо получить записи //(по умолчанию — текущий пользователь). Обратите внимание, идентификатор сообщества в параметре owner_id //необходимо указывать со знаком “-“ — например, owner_id=-1 соответствует идентификатору сообщества ВКонтакте API (club1) целое число // Domain = id, //- Короткий адрес пользователя или сообщества. строка //Filter=, //all // Offset=, // Смещение, необходимое для выборки определенного подмножества записей. положительное число Count = PostCount, //- Количество записей, которое необходимо получить (но не более 100). Extended = true //Fields=Photo }); var count = wallposts.TotalCount; Invoke(new Action(() => { textBox1.Text = "Количество постов в группе " + K + " = " + count; //LB_Messages.Items.Add("Количество постов в группе " + K + " = " + count); })); Console.WriteLine("Количество постов в группе " + K + " = " + count); Console.ReadLine(); var postelem = wallposts.WallPosts; //Получили посты int j = 0; //число постов int numphot = 0; //номер фото for (j = 0; j < (int)PostCount; j++) //пока не дошли до макс значения постов одной группы { string groupidWOmin2 = K.Replace("-", ""); var groups2 = _api.Groups.GetById(null, groupidWOmin2, null).FirstOrDefault(); string sourceLink2 = groups2.Name; // + " @" + groups.Id; //Отправка источника записи string sourcelb = sourceLink2; Invoke(new Action(() => { LB_Source.Text = "Parsing: " + sourcelb; })); if (CHB_AddWOPhoto.Checked == true) { var atts = postelem[j].Attachments; if ((postelem[j].MarkedAsAds != true) && (postelem[j].Text != null) && (atts == null)) { //Удаление \n string deleteenters = postelem[j].Text.Replace("\n", ""); //string deletespace = postelem[j].Text.Replace("\n", ""); MessageToAttach = deleteenters; //Проверка на повторы string s = File.ReadAllText(text_archive); //Открываем файл с историей if (s.IndexOf(MessageToAttach) != -1) //пока не дошли до конца ищем первое совпадение { //Нашли текст уже был опубликован, значит пропускаем Console.WriteLine("Нашли повтор текста: " + s); Console.ReadLine(); Invoke(new Action(() => { textBox1.Text = "Нашли повтор текста: " + s; })); continue; } else { //Запомнили что опубликовали такое сообщение AddedFile(MessageToAttach, text_archive); //Отправка сообщения поста if (string.IsNullOrEmpty(MessageToAttach) == false) //Если не пустое сообщение { Invoke(new Action(() => { LB_Messages.Items.Add(MessageToAttach); })); await sendMessage(chatId, MessageToAttach); } } } } //текст if (ChB_AddMessage.Checked == true) //если хотим сообщения добавлять к картинкам { // var atts = postelem[j].Attachments; //Проверить если есть фотки или только текст, постить var att = postelem[j].Attachment; //Получили первое вложение if ((postelem[j].MarkedAsAds != true) && (postelem[j].Text != null) && (att != null) && (att.Type == typeof(Photo)) /*&&(postelem[j].PostType==post)*/) { //Удаление \n string deleteenters = postelem[j].Text.Replace("\n", ""); //string deletespace = postelem[j].Text.Replace("\n", ""); MessageToAttach = deleteenters; //Проверка на повторы string s = File.ReadAllText(text_archive); //Открываем файл с историей if (s.IndexOf(MessageToAttach) != -1) //пока не дошли до конца ищем первое совпадение { //Нашли текст уже был опубликован, значит пропускаем Console.WriteLine("Нашли повтор текста: " + s); Console.ReadLine(); Invoke(new Action(() => { textBox1.Text = "Нашли повтор текста: " + s; })); continue; } else { //Запомнили что опубликовали такое сообщение AddedFile(MessageToAttach, text_archive); //Отправка сообщения поста if (string.IsNullOrEmpty(MessageToAttach) == false) //Если не пустое сообщение { Invoke(new Action(() => { LB_Messages.Items.Add(MessageToAttach); })); var secret = GenerateRandomSecret(); var mtprotoProxy = new MTProtoProxyServer(secret, 2256); mtprotoProxy.StartAsync(); await sendMessage(chatId, MessageToAttach); } } } } List <MediaAttachment> vk_attachments = new List <MediaAttachment>(); foreach (var i in postelem) //Для каждого поста { if (numphot == (int)PostCount - 1) //если дошли числа постов, то обнуляем №фото, чтобы перезаписывать { numphot = 0; } //await SendMessageToChannelTest(MessageToAttach); //Получить информацию о записи, первого вложения и текст var atts = postelem[j].Attachments; int currphoto = 0; foreach (var att in postelem[j].Attachments) //для каждого вложения одного поста { //att.Type==typeof(Link) if (att.Type == typeof(Photo) && att.Type != typeof(Link)) //если вложения = фото но не ссылка { Console.WriteLine("Ссылка на фото: " + GetUrlOfBigPhoto(att.Instance as Photo)); //получили ссылку на фотку var url = GetUrlOfBigPhoto(att.Instance as Photo); //Если ссылка уже есть в файле истории, continue, если нет, то идем дальше string s = File.ReadAllText(filepath_archive); //Открываем файл с историей if (s.IndexOf(url) != -1) //пока не дошли до конца ищем первое совпадение { //Нашли фото уже был опубликован, значит пропускаем Console.WriteLine("Нашли повтор фото: " + s); Console.ReadLine(); Invoke(new Action(() => { textBox1.Text = "Нашли повтор фото: " + s; })); continue; } else { //Запомнили что опубликовали такую фотку AddedFile(url, filepath_archive); //скачали на ПК numphot = DownloadTempPhoto(url, j); currphoto++; Console.WriteLine("Скачали и сохранили фото под № " + numphot); Console.ReadLine(); Invoke(new Action(() => { textBox1.Text = "Скачали и сохранили фото под № " + numphot; })); fullphotoname = photofilename + numphot + ".jpg"; //Залили на стену //IReadOnlyCollection<Photo> photolist = SendOnServer(fullphotoname); //vk_attachments.AddRange(photolist); var secret = GenerateRandomSecret(); var mtprotoProxy = new MTProtoProxyServer(secret, 2256); mtprotoProxy.StartAsync(); await SendPhoto(chatId, fullphotoname, apiToken); // continue; Console.WriteLine("Отправили в телегу"); Invoke(new Action(() => { textBox1.Text = "Отправили в телегу"; })); ////Отправили ВК //var post = _api.Wall.Post(new WallPostParams //{ // OwnerId = groupid, // FromGroup = true, // Message = MessageToAttach, // Attachments = vk_attachments //}); //Delay Random rnd = new Random(); int number = rnd.Next(mindelay, maxdelay); if (chb_addsource.Checked == true) { int photocount = postelem[j].Attachments.Count; //число вложений фото if (photocount == 1) //если вложение одно { string groupidWOmin = K.Replace("-", ""); var groups = _api.Groups.GetById(null, groupidWOmin, null).FirstOrDefault(); if (groups != null) { string sourceLink = groups.Name; // + " @" + groups.Id; //Отправка источника записи string source = "Источник: " + sourceLink; await sendMessage(chatId, source); } } //если вложений несколько - один раз пишем источник в конце после последнего вложения if ((currphoto == photocount) && (photocount != 1)) { //Получение ссылки на сообщество string groupidWOmin = K.Replace("-", ""); var groups = _api.Groups.GetById(null, groupidWOmin, null).FirstOrDefault(); if (groups != null) { string sourceLink = groups.Name; // + " @" + groups.Id; //Отправка источника записи string source = "Источник: " + sourceLink; await sendMessage(chatId, source); } } } numphot++; Invoke(new Action(() => { textBox1.Text = "Ждем " + number / 1000 + " секунд"; })); Console.WriteLine("Ждем " + number / 1000 + " секунд"); Console.ReadLine(); await Task.Delay(number); } } //если вложения не фотки другая функция отправки типа вложения } //j++; Console.WriteLine("Обработали пост № " + j); Console.ReadLine(); Invoke(new Action(() => { textBox1.Text = "Обработали пост № " + j; })); } } y++; Console.WriteLine("Обработали строку № " + y + " Группа: " + id2); Console.ReadLine(); Invoke(new Action(() => { textBox1.Text = "Обработали строку № " + y + " Группа: " + id2; })); //это если постоянно //if ((j == (int)PostCount - 1) && (y == linescount)) //последний пост последней группы в списке // j = 0; //запускаем обратно цикл } MessageBox.Show("Обработаны все группы и посты!"); f_postedall = true; return; }