protected override async Task PerformInternal(UserViewModel user, IEnumerable <string> arguments) { string filePath = (await this.ReplaceStringWithSpecialModifiers(this.FilePath, user, arguments)); if (this.FileActionType == FileActionTypeEnum.SaveToFile || this.FileActionType == FileActionTypeEnum.AppendToFile) { filePath = filePath.ToFilePathString(); string textToWrite = (!string.IsNullOrEmpty(this.TransferText)) ? this.TransferText : string.Empty; textToWrite = await this.ReplaceStringWithSpecialModifiers(textToWrite, user, arguments); if (this.FileActionType == FileActionTypeEnum.SaveToFile) { await ChannelSession.Services.FileService.SaveFile(filePath, textToWrite); } else if (this.FileActionType == FileActionTypeEnum.AppendToFile) { string dataToWrite = textToWrite; if (!string.IsNullOrEmpty(await ChannelSession.Services.FileService.ReadFile(filePath))) { dataToWrite = Environment.NewLine + dataToWrite; } await ChannelSession.Services.FileService.AppendFile(filePath, dataToWrite); } } else { SpecialIdentifierStringBuilder.RemoveCustomSpecialIdentifier(this.TransferText); string data = await ChannelSession.Services.FileService.ReadFile(filePath); if (!string.IsNullOrEmpty(data)) { if (this.FileActionType == FileActionTypeEnum.ReadSpecificLineFromFile || this.FileActionType == FileActionTypeEnum.ReadRandomLineFromFile || this.FileActionType == FileActionTypeEnum.RemoveSpecificLineFromFile || this.FileActionType == FileActionTypeEnum.RemoveRandomLineFromFile) { List <string> lines = new List <string>(data.Split(new string[] { Environment.NewLine, "\n" }, StringSplitOptions.RemoveEmptyEntries)); if (lines.Count > 0) { int lineIndex = -1; if (this.FileActionType == FileActionTypeEnum.ReadSpecificLineFromFile || this.FileActionType == FileActionTypeEnum.RemoveSpecificLineFromFile) { if (!string.IsNullOrEmpty(this.LineIndexToRead)) { string lineToRead = await this.ReplaceStringWithSpecialModifiers(this.LineIndexToRead, user, arguments); if (int.TryParse(lineToRead, out lineIndex)) { lineIndex = lineIndex - 1; if (lineIndex >= 0 && lineIndex < lines.Count) { data = lines[lineIndex]; } else { return; } } } } else { lineIndex = RandomHelper.GenerateRandomNumber(lines.Count); data = lines[lineIndex]; } if (this.FileActionType == FileActionTypeEnum.RemoveSpecificLineFromFile || this.FileActionType == FileActionTypeEnum.RemoveRandomLineFromFile) { if (lineIndex >= 0) { lines.RemoveAt(lineIndex); await ChannelSession.Services.FileService.SaveFile(filePath, string.Join(Environment.NewLine, lines)); } } } else { return; } } data = await this.ReplaceStringWithSpecialModifiers(data, user, arguments); SpecialIdentifierStringBuilder.AddCustomSpecialIdentifier(this.TransferText, data); } } }