private async void SetEnterNewTextState(MessageEventArgs e) { var userId = e.Message.From.Id; var block = GetBlockChoice(userId); var text = $"{Texts.PersonalAccount.YouWantToChange} *{e.Message.Text}* {Environment.NewLine}"; var currentText = Texts.GetText(block, e.Message.Text); if (string.IsNullOrEmpty(currentText)) { text = $"{Emoji.Error} Такого текста не существует."; await TBot.SendTextMessageAsync(userId, text); SetChooseTextState(e); } else { await TBot.SendTextMessageAsync(userId, text, Telegram.Bot.Types.Enums.ParseMode.Markdown); text = Texts.PersonalAccount.EnterNewText; var keyboard = Keyboards.PersonalAccount.EnterNewTextKeyboard; await TBot.SendTextMessageAsync(userId, text, replyMarkup : keyboard); SetState(userId, State.EnterNewText); } }
List <ICommand> MoveToPosition(TBot bot, int x, int y, int z) { var res = new List <ICommand>(); while (bot.Coord.X != x && bot.Coord.Y != y && bot.Coord.Z != z) { if (bot.Coord.X != x) { var dx = x - bot.Coord.X; bot.Coord.X += dx % Constants.StraightMoveCorrection; StraightMove smove = new StraightMove(); smove.Diff = new CoordDiff(dx, 0, 0); res.Add(smove); } if (bot.Coord.Y != y) { var dy = y - bot.Coord.Y; bot.Coord.Y += dy % Constants.StraightMoveCorrection; StraightMove smove = new StraightMove(); smove.Diff = new CoordDiff(0, dy, 0); res.Add(smove); } if (bot.Coord.Z != z) { var dz = z - bot.Coord.Z; bot.Coord.Z += dz % Constants.StraightMoveCorrection; StraightMove smove = new StraightMove(); smove.Diff = new CoordDiff(0, 0, dz); res.Add(smove); } } return(res); }
public TState(TModel model, bool enableValidation = false) { Model = model; EnableValidation = enableValidation; Matrix = new int[Model.R, Model.R, Model.R]; var bot = new TBot { Bid = 1, Coord = { X = 0, Y = 0, Z = 0 } }; for (var i = 2; i <= 40; ++i) { bot.Seeds.Add(i); } Bots.Add(bot); Energy = 0; Harmonics = EHarmonics.Low; }
private async void SetGreetingState(int userId) { var text = Texts.Lamagna.Greeting; var keyboard = BotController.IsOwner(userId, TBot) ? Keyboards.Lamagna.ExtendedGreetingKeyboard : Keyboards.Lamagna.GreetingKeyboard; await TBot.SendTextMessageAsync(userId, text, replyMarkup : keyboard); SetState(userId, State.Greeting); }
private async void SetGetEmailState(MessageEventArgs e) { int userId = e.Message.From.Id; var text = Texts.GetEmailAddress; await TBot.SendTextMessageAsync(userId, text); SetState(userId, State.GetEmailAddress); }
private async void SetGetTokenState(MessageEventArgs e) { int userId = e.Message.From.Id; var text = Texts.GetBotToken; await TBot.SendTextMessageAsync(userId, text); SetState(userId, State.GetBotToken); }
private async void SetChooseBlockState(MessageEventArgs e) { var userId = e.Message.From.Id; var text = Texts.PersonalAccount.ChooseBlock; var keyboard = Keyboards.PersonalAccount.ChooseBlockKeyboard; await TBot.SendTextMessageAsync(userId, text, replyMarkup : keyboard); SetState(userId, State.ChooseBlockToEdit); }
private async void SetChooseSettingsState(MessageEventArgs e) { var userId = e.Message.From.Id; var text = Texts.PersonalAccount.PersnonalAccountGreeting(e.Message.From.FirstName); var keyboard = Keyboards.PersonalAccount.ChooseSettingKeyboard; await TBot.SendTextMessageAsync(userId, text, replyMarkup : keyboard); SetState(userId, State.ChooseSettings); }
private async void SetGetPhoneNumberState(MessageEventArgs e) { int userId = e.Message.From.Id; var text = Texts.GetPhoneNumber; var keyboard = Keyboards.GetPhoneNumberKeyboard; await TBot.SendTextMessageAsync(userId, text, replyMarkup : keyboard); SetState(userId, State.GetPhoneNumber); }
private async void SetChooseTextState(MessageEventArgs e) { var userId = e.Message.From.Id; var text = Texts.PersonalAccount.ChooseText; var blockChoice = GetBlockChoice(userId).ToString(); var keyboard = Keyboards.PersonalAccount.ChooseTextKeyboard(blockChoice); await TBot.SendTextMessageAsync(userId, text, replyMarkup : keyboard); SetState(userId, State.ChooseTextToEdit); }
private async void SetLamagna4State(CallbackQueryEventArgs e) { var userId = e.CallbackQuery.From.Id; var text = Texts.Lamagna.Text4; var keyboard = Keyboards.Lamagna.Text4Keyboard; await TBot.AnswerCallbackQueryAsync(e.CallbackQuery.Id, ""); await TBot.SendTextMessageAsync(userId, text, replyMarkup : keyboard); SetState(userId, State.Lamagna4); }
private async void SetContactsState(CallbackQueryEventArgs e) { var userId = e.CallbackQuery.From.Id; var text = Texts.Other.Contacts; var keyboard = Keyboards.MainProduct.ContactsKeyboard; await TBot.AnswerCallbackQueryAsync(e.CallbackQuery.Id, ""); await TBot.SendTextMessageAsync(userId, text, replyMarkup : keyboard); SetState(userId, State.Contacts); }
private async void SetTrippier3State(CallbackQueryEventArgs e) { var userId = e.CallbackQuery.From.Id; var text = Texts.Trippier.Text3; var keyboard = Keyboards.Trippier.Text3Keyboard; await TBot.AnswerCallbackQueryAsync(e.CallbackQuery.Id, ""); await TBot.SendTextMessageAsync(userId, text, replyMarkup : keyboard); SetState(userId, State.Trippier3); }
List <ICommand> FillLayer(TBot bot, int[][] layer, int[][] previousLayer) { // int[] histogram = GetLayerHistogram(layer); List <int>[] layerSegmentsMap = GetLayerSegmentsMap(layer); List <ICommand> res = new List <ICommand>(); for (int i = 0; i < layerSegmentsMap.Length; ++i) { res.AddRange(GenerateCommandsForSegment(bot, i, layerSegmentsMap[i], (i % 2 == 0) ? 1 : -1)); } return(res); }
private async void UpdateText(MessageEventArgs e) { int userId = e.Message.From.Id; var block = GetBlockChoice(userId); var fieldName = GetTextChoice(userId); Texts.Update(block, fieldName, e.Message.Text); string text = Texts.PersonalAccount.NewTextSaved; await TBot.SendTextMessageAsync(userId, text); SetChooseTextState(e); }
public void Update(TCoord coord, TBot bot) { if (Coords == null) { return; } if (Coords.Contains(coord)) { throw new InvalidStateException($"bot {bot.Bid} interferes with other bots at {coord}"); } Coords.Add(coord); }
private void ShowMainProductPassedUsers(MessageEventArgs e) { var newMessage = $"Пользователи бота {BotUsername}, прошедшие блок Главный продукт:{Environment.NewLine}"; using (var db = DBHelper.GetConnection(BotUsername)) { var users = db.Table <BotUser>().Where(u => u.MainProductPassed); foreach (var user in users) { newMessage += $"{Environment.NewLine}{user.ToString()}"; } } TBot.SendTextMessageAsync(e.Message.From.Id, newMessage); SetChooseStatisticsState(e); }
private void ShowAllUsers(MessageEventArgs e) { var newMessage = $"Пользователи бота {BotUsername}:{Environment.NewLine}"; using (var db = DBHelper.GetConnection(BotUsername)) { var users = db.Table <BotUser>().ToList(); foreach (var user in users) { newMessage += $"{Environment.NewLine}{user.ToString()}"; } } TBot.SendTextMessageAsync(e.Message.From.Id, newMessage); SetChooseStatisticsState(e); }
private async void SetCheckContactDataState(MessageEventArgs e) { int userId = e.Message.From.Id; Client client = null; using (var db = DBHelper.GetConnection()) { client = db.Find <Client>(userId); } var text = Texts.GetCheckContactDataText(client); var keyboard = Keyboards.CheckContactDataKeyboard; await TBot.SendTextMessageAsync(userId, text, replyMarkup : keyboard); SetState(userId, State.CheckContactData); }
public MainWindow() { using(BotStartForm bsf = new BotStartForm()) { if(bsf.ShowDialog() != System.Windows.Forms.DialogResult.OK) { Environment.Exit(0); return; } _bot = bsf.Bot; } InitializeComponent(); _bot.OnMessageRead += _bot_OnMessageRead; _bot.OnDisconnect += _bot_OnDisconnect; _bot.OnConnect += _bot_OnConnect; _bot.Start(); }
static void Main(string[] args) { var logger = new ConsoleLogger(); var options = new Options(); Parser.Default.ParseArguments <Options>(args).WithParsed <Options>(opt => { options = opt; }); if (string.IsNullOrEmpty(options.Token)) { options.Token = Path.Combine(Environment.CurrentDirectory, "token.txt"); } if (string.IsNullOrEmpty(options.WhiteListPath)) { options.WhiteListPath = Path.Combine(Environment.CurrentDirectory, "white.txt"); } var token = string.Empty; if (File.Exists(options.Token)) { token = File.ReadAllText(options.Token, Encoding.UTF8); } else { token = options.Token; } string[] userWhiteList = new string[0]; if (File.Exists(options.WhiteListPath)) { userWhiteList = File.ReadAllLines(options.WhiteListPath); } var tBot = new TBot(token, logger, userWhiteList); tBot.BotStop += TBot_BotStop; tBot.StartAsync(); Console.ReadKey(); }
private async void SetStartState(MessageEventArgs e) { int userId = e.Message.From.Id; if (DBHelper.IsClient(e.Message.From)) { await TBot.SendTextMessageAsync(userId, Texts.KnownClientGreeting); SetCheckContactDataState(e); } else { var text = Texts.UnknownClientGreeting(e.Message.From); var keyboard = Keyboards.UnknownClientGreetingKeyboard; await TBot.SendTextMessageAsync(userId, text, replyMarkup : keyboard); SetState(userId, State.UnknownClientGreeting); } }
private bool disposedValue = false; // To detect redundant calls protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { // TODO: dispose managed state (managed objects). } // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below. // TODO: set large fields to null. BacktestResultConfig = null; Config = null; tBot = null; TBotJObject = null; disposedValue = true; } }
List <ICommand> GenerateCommandsForSegment(TBot bot, int lineIndex, List <int> segmentsMapRaw, int direction) { List <int> segmentsMap = new List <int>(segmentsMapRaw); if (direction < 0) { segmentsMap.Reverse(); } List <Tuple <TCoord, CoordDiff> > cuts = GenerateCuts(lineIndex, segmentsMapRaw, direction); var botOffset = new CoordDiff(0, 1, 0); var res = new List <ICommand>(); foreach (var cut in cuts) { res.AddRange(MoveToPosition(bot, cut.Item1)); res.AddRange(FillLine(bot, cut.Item2, botOffset)); } return(res); }
private void MoveBot(TBot bot, CoordDiff diff, Volatiles volatiles) { if (EnableValidation) { var miniDiff = new CoordDiff(Math.Sign(diff.Dx), Math.Sign(diff.Dy), Math.Sign(diff.Dz)); var current = bot.Coord; var end = bot.Coord; end.Apply(diff); while (!current.Equals(end)) { volatiles.Update(current, bot); current.Apply(miniDiff); if (this[current]) { throw new InvalidStateException($"Coord {current} is occupied when moving bot {bot.Bid}"); } } volatiles.Update(end, bot); } bot.Coord.Apply(diff); }
private void button1_Click(object sender, EventArgs e) { _bot = new TBot(textBox1.Text, textBox2.Text, textBox3.Text); this.DialogResult = System.Windows.Forms.DialogResult.OK; }
private void BotStartForm_Load(object sender, EventArgs e) { _bot = new TBot("BahNahNahBot", "oauth:68g2aewlvaon4i99ze354odf99keti", "BahNahNah"); this.DialogResult = System.Windows.Forms.DialogResult.OK; }
private IBot _AddBot(BotMode mode, BacktestResultHandle backtestResultHandle = null, IAccount account = null, BacktestResult backtestResult = null, PBot pBot = null, TBot tBot = null, IBot bot = null) { if (account == null) { throw new ArgumentNullException(nameof(account)); } if (backtestResult == null) { backtestResult = backtestResultHandle?.Object; } if (bot == null) { if (pBot != null) { bot = (IBot)pBot.Instantiate(); } else { if (tBot == null) { tBot = backtestResult.TBot; //if (backtestResult == null) { backtestResult = backtestResultHandle?.Object; } //var templateType = ResolveType(backtestResult.BotConfigType); ////var templateType = Type.GetType(result.BotConfigType); //if (templateType == null) //{ // throw new NotSupportedException($"Bot type not supported: {backtestResult.BotConfigType}"); //} //tBot = (TBot)((JObject)backtestResult.Config).ToObject(templateType); } if (tBot == null) { throw new ArgumentNullException(nameof(tBot)); } bot = (IBot)tBot.Create(); } } //bot.Modes = mode | BotMode.Paper; //var botVM = new BotVM() { Bot = bot }; //botVM.State = SupervisorBotState.Scanner; if (bot.Modes.HasFlag(BotMode.Live)) { throw new Exception("Not ready for live yet"); } bot.Account = account; //botVM.AddBacktestResult(backtestResult); //bool hasPaper = mode.HasFlag(BotMode.Paper); //if (mode != BotMode.Paper) //{ // mode = mode & ~BotMode.Paper; //} //if (mode.HasFlag(BotMode.Live)) { LiveBots.Add(bot); Template.LiveBots.Add(tBot.Id); } //if (mode.HasFlag(BotMode.Demo)) { DemoBots.Add(bot); Template.DemoBots.Add(tBot.Id); } //if (mode.HasFlag(BotMode.Scanner)) { Scanners.Add(bot); Template.Scanners.Add(tBot.Id); } //if (mode.HasFlag(BotMode.Paper)) { PaperBots.Add(bot); Template.PaperBots.Add(tBot.Id); } //if (mode.HasFlag(BotMode.Live)) { if (LiveBots == null) { LiveBots = new ObservableCollection<IBot>(); } LiveBots.Add(bot); } //if (mode.HasFlag(BotMode.Demo)) { if (DemoBots == null) { DemoBots = new ObservableCollection<IBot>(); } DemoBots.Add(bot); } if (Bots == null) { Bots = new ObservableCollection <IBot>(); } if (!BotIds.Contains(bot.Template.Id)) { BotIds.Add(bot.Template.Id); Bots.Add(bot); } //if (mode.HasFlag(BotMode.Paper)) { if (PaperBots==null) { PaperBots = new ObservableCollection<IBot>(); } PaperBots.Add(bot); } //if (pBot != null) //{ // bot.DesiredExecutionState = pBot.DesiredExecutionState; //} //switch (mode) //{ // case BotMode.Live: // LiveBots.Add(bot); // break; // case BotMode.Demo: // DemoBots.Add(bot); // break; // case BotMode.Scanner: // Scanners.Add(bot); // break; // case BotMode.Paper: // break; // default: // throw new ArgumentException(nameof(mode)); //} //if (mode.HasFlag(BotMode.Scanner)) //{ // Scanners.Add(bot); //} //if (mode.HasFlag(BotMode.Live)) //{ // LiveBots.Add(bot); //} //if (mode.HasFlag(BotMode.Demo)) //{ // DemoBots.Add(bot); //} //if (mode.HasFlag(BotMode.Paper)) //{ // PaperBots.Add(bot); //} //Task.Factory.StartNew(() => bot.Start()); return(bot); }
private IBot _AddBotForMode(BotMode mode, BacktestResult backtestResult = null, PBot pBot = null, TBot tBot = null, IBot bot = null) { IAccount account; switch (mode) { case BotMode.Live: account = LiveAccount; break; case BotMode.Demo: account = DemoAccount; break; case BotMode.Scanner: account = ScannerAccount; break; case BotMode.Paper: account = PaperAccount; break; default: throw new ArgumentException(nameof(mode) + " unknown or is set to more than one mode."); } if (account == null) { Debug.WriteLine($"WARNING - _AddBotForMode({mode}) assigned no account"); } return(_AddBot(mode, account: account, backtestResult: backtestResult, pBot: pBot, tBot: tBot, bot: bot)); }
static void Main(string[] args) { TBot bot = new TBot(); bot.Run(); }
public async override void Next(MessageEventArgs e) { var userId = e.Message.From.Id; string btnText = e.Message.Text; var state = GetUserState(userId); switch (state) { case State.UnknownClientGreeting: { if (btnText == Texts.LetsButton) { SetGetPhoneNumberState(e); } break; } case State.CheckContactData: { if (btnText == Texts.PhoneNumberChangedButton) { SetGetPhoneNumberState(e); } else if (btnText == Texts.EmailAddressChangedButton) { SetGetEmailState(e); } else if (btnText == Texts.ItsAnActualDataButton) { SetGetTokenState(e); } break; } case State.GetPhoneNumber: { if (e.Message.Type == Telegram.Bot.Types.Enums.MessageType.ContactMessage) { var contact = e.Message.Contact; if (contact.UserId == userId) { SavePhoneNumber(e); await TBot.SendTextMessageAsync(userId, Texts.PhoneNumberSaved); if (DBHelper.IsClient(e.Message.From)) { SetCheckContactDataState(e); } else { SetGetEmailState(e); } } else { await TBot.SendTextMessageAsync(userId, $"{Emoji.Error} Нет, нам нужен ВАШ номер."); } } else { await TBot.SendTextMessageAsync(userId, "Нажмите на кнопку внизу, чтобы отправить свой номер."); } break; } case State.GetEmailAddress: { if (FormatHelper.IsEmailAddress(e.Message.Text)) { SaveEmailAddress(e); await TBot.SendTextMessageAsync(userId, Texts.EmailSaved); if (DBHelper.IsClient(userId)) { SetCheckContactDataState(e); } else { SaveNewClient(userId); SetGetTokenState(e); } } else { await TBot.SendTextMessageAsync(userId, $"{Emoji.Error} Это не адрес электронный почты."); } break; } case State.GetBotToken: { string token = e.Message.Text; if (TokenIsValid(token)) { OurBot existedBot = null; using (var db = DBHelper.GetConnection()) { existedBot = db.Table <OurBot>().FirstOrDefault(b => b.Token == token); } if (existedBot != null) { var tBotName = new TelegramBotClient(token).GetMeAsync().Result.Username; await TBot.SendTextMessageAsync(userId, $"Данный токен уже используется в Вашем персональном помощнике @{tBotName}"); } else { BotController.RegisterNewBot(e.Message.Text, userId, nameof(Scheme1)); await TBot.SendTextMessageAsync(userId, $"Поздравляем"); } } else { await TBot.SendTextMessageAsync(userId, "Неверный токен"); SetGetTokenState(e); } break; } } }
void _bot_OnDisconnect(TBot sender, Exception ex) { MessageBox.Show("Lost connection! \n " + ex.ToString()); Environment.Exit(0); return; }
void _bot_OnMessageRead(TBot sender, TBotMessage message, string raw) { Chatlog.AppendText(string.Format("<{0}> {1}\n", message.Username, message.Text)); TBotCommand command = null; foreach(ListViewItem i in commandList.Items) { TBotCommand _tCom = (TBotCommand)i.Tag; string msgCompare = message.Text; string msgCompareSplit = message.Text; if (msgCompare.Contains(" ")) msgCompareSplit = msgCompare.Split(' ')[0]; if (!_tCom.FlagCaseSensitive) msgCompare = msgCompare.ToLower(); if (_tCom.FlagIsRegex) { if (Regex.Match(msgCompare, _tCom.Flag).Success) command = _tCom; } else { switch(_tCom.Paramiters) { case ParamiterType.HasParamiters: if (i.Text.ToLower() == msgCompare) command = _tCom; break; case ParamiterType.NoParamiters: if (i.Text.ToLower() == msgCompareSplit) command = _tCom; break; default: if (i.Text.ToLower() == msgCompareSplit || i.Text.ToLower() == msgCompare) command = _tCom; break; } } if (command != null) break; } if (command != null) ExecuteCommand(command, message); CheckBlacklist(message); }
public static async Task <Services.Bot.FSM <TBot> > Get(Update update, CancellationToken token) { if (state.TryGetValue(update.Message.Chat.Id, out Services.Bot.FSM <TBot> fsm)) { return(fsm); } else { if (TextMessage.defaultClient != null && TextMessage.defaultClient.BotId.HasValue) { var temp = await dBWorker.GetChat(update.Message.Chat.Id, token, TextMessage.defaultClient.BotId.Value); if (temp == null) { temp = new TBot() { Id = update.Message.Chat.Id }; } if (update.Message.Chat.Type == Telegram.Bot.Types.Enums.ChatType.Private) { temp.Username = update.Message.From.Username; temp.Name = update.Message.From.FirstName; temp.userType = Enums.UserType.User; } else if (update.Message.Chat.Type == Telegram.Bot.Types.Enums.ChatType.Group || update.Message.Chat.Type == Telegram.Bot.Types.Enums.ChatType.Supergroup && update.Message.From.Id != 777000) { try { temp.Username = update.Message.Chat.Username; temp.Name = update.Message.Chat.FirstName; temp.userType = Enums.UserType.Group; //await dBWorker.SaveChat(temp, token, TextMessage.defaultClient.BotId.Value); //var temp2 = await dBWorker.GetChat(update.Message.From.Id, token, TextMessage.defaultClient.BotId.Value); //if (temp2 == null) //{ // temp2 = new TBot() { Id = update.Message.From.Id }; // temp2.Username = update.Message.From.Username; // temp2.Name = update.Message.From.FirstName; // temp2.userType = Enums.UserType.User; // temp2.Status = Enums.UserStatus.common; //} //else //{ // temp2.Username = update.Message.From.Username; // temp2.Name = update.Message.From.FirstName; // temp2.userType = Enums.UserType.User; //} //await dBWorker.SaveChat(temp2, token, TextMessage.defaultClient.BotId.Value); } catch (Exception ex) { } } await dBWorker.SaveChat(temp, token, TextMessage.defaultClient.BotId.Value); FSM <TBot> fSM = new FSM <TBot>(update.Message.Chat.Id, temp); state.TryAdd(update.Message.Chat.Id, fSM); return(fSM); } return(null); } }
public async override void Next(MessageEventArgs e) { var userId = e.Message.From.Id; string btnText = e.Message.Text; var state = GetUserState(userId); if (btnText == Texts.ToStartButton) { SetGreetingState(e.Message.From.Id); } else { switch (state) { case State.ChooseSettings: { if (btnText == Texts.PersonalAccount.StatisticsButton) { SetChooseStatisticsState(e); } else if (btnText == Texts.PersonalAccount.TextsEditingButton) { SetChooseBlockState(e); } else if (btnText == Texts.BackButton) { SetGreetingState(e.Message.From.Id); } break; } case State.ChooseStatistics: { if (btnText == Texts.PersonalAccount.AllUsersButton) { ShowAllUsers(e); } else if (btnText == Texts.PersonalAccount.LamagnaPassedUsersButton) { ShowLamagnaPassedUsers(e); } else if (btnText == Texts.PersonalAccount.TrippierPassedUsersButton) { ShowTrippierPassedUsers(e); } else if (btnText == Texts.PersonalAccount.MainProductPassedUsersButton) { ShowMainProductPassedUsers(e); } else if (btnText == Texts.BackButton) { SetChooseSettingsState(e); } break; } case State.ChooseBlockToEdit: { if (btnText == Texts.BackButton) { SetChooseSettingsState(e); } else if (Texts.ValidBlockName(e.Message.Text)) { SaveBlockChoice(userId, e.Message.Text); SetChooseTextState(e); } else { await TBot.SendTextMessageAsync(userId, $"{Emoji.Error} Нет такого блока."); SetChooseBlockState(e); } break; } case State.ChooseTextToEdit: { if (btnText == Texts.BackButton) { SetChooseBlockState(e); } else { SaveTextChoice(userId, e.Message.Text); SetEnterNewTextState(e); } break; } case State.EnterNewText: { if (btnText == Texts.BackButton) { SetChooseTextState(e); } else { if (string.IsNullOrEmpty(btnText)) { await TBot.SendTextMessageAsync(userId, "Молчание не привлечёт к вам клиентов!"); SetChooseTextState(e); } UpdateText(e); } break; } } } }
void _bot_OnConnect(TBot sender, bool success) { if (success) { MessageBox.Show("Connected"); } else { MessageBox.Show("Failed to connect"); Environment.Exit(0); return; } }