public void BuildList( ) { this.MEMBER_ACTIVITY_STOP_LIST_PANEL.Controls.Clear( ); ChangeUIStatus(true); Task.Factory.StartNew(() => { Tuple <bool, List <MemberActivityStopListStruct>, string> data = NaverRequest.GetMemberActivityStopList( ); if (data.Item1) { int y = 0; if (this.InvokeRequired) { this.Invoke(new Action(() => { this.MEMBER_ACTIVITY_STOP_LIST_COUNT_LABEL.Text = data.Item2.Count + "명의 활동 정지된 회원이 있습니다."; foreach (MemberActivityStopListStruct i in data.Item2) { MemberActivityStopListChild panel = new MemberActivityStopListChild(i); panel.Location = new Point(10, y); y += panel.Height + 5; this.MEMBER_ACTIVITY_STOP_LIST_PANEL.Controls.Add(panel); } ChangeUIStatus(false); })); } else { this.MEMBER_ACTIVITY_STOP_LIST_COUNT_LABEL.Text = data.Item2.Count + "명의 활동 정지된 회원이 있습니다."; foreach (MemberActivityStopListStruct i in data.Item2) { MemberActivityStopListChild panel = new MemberActivityStopListChild(i); panel.Location = new Point(10, y); y += panel.Height + 5; this.MEMBER_ACTIVITY_STOP_LIST_PANEL.Controls.Add(panel); } ChangeUIStatus(false); } } else { NotifyBox.Show(this, "오류", "죄송합니다, 활동 정지 데이터를 불러올 수 없습니다,\n\n" + data.Item3, NotifyBoxType.OK, NotifyBoxIcon.Error); } }); }
private void WARN_RUN_BUTTON_Click(object sender, EventArgs e) { if (warnCount <= 0 || warnCount > 10) { NotifyBox.Show(this, "오류", "경고 횟수는 1~10 사이여야 합니다.", NotifyBoxType.OK, NotifyBoxIcon.Warning); return; } if (this.REASON_TEXTBOX.Text.Trim( ).Length == 0) { NotifyBox.Show(this, "오류", "경고 진술을 작성해야 합니다.", NotifyBoxType.OK, NotifyBoxIcon.Warning); return; } if (NotifyBox.Show(this, "경고", "닉네임 : " + this.nickName + "\n경고 횟수 : " + this.warnCount + "회\n진술 : " + this.REASON_TEXTBOX.Text + "\n\n모든 정보를 다시 확인하시고 확인 버튼을 눌러주세요 ^.^", NotifyBoxType.YesNo, NotifyBoxIcon.Danger) == NotifyBoxResult.Yes) { if (NotifyBox.Show(this, "경고", "정말로 정말로!!! " + this.nickName + " 회원에게 경고를 부여하시길 원하십니까?", NotifyBoxType.YesNo, NotifyBoxIcon.Danger) == NotifyBoxResult.Yes) { this.WARN_RUN_BUTTON.ButtonText = "서버와 통신하는 중 ..."; // Item1 : Success boolean; // Item2 : Error reason string; Tuple <bool, string> result = NaverRequest.WriteMemberWarningThread(nickName, warnCount, this.REASON_TEXTBOX.Text.Trim( )); if (result.Item1) { //switch ( warnCount ) //{ // case 3: // ChatSendUsingHelper( "<우윳빛깔 카페스탭 경고 안내>\r\n\r\n용의자 닉네임 : " + this.nickName + "\r\n경고 횟수 : " + this.warnCount + "회\r\n진술 : " + this.REASON_TEXTBOX.Text + "\r\n\r\n경고 처리했습니다, 지정된 규정에 따라 <활동정지 7일> 처리 바랍니다. >.<~" ); // break; // case 6: // ChatSendUsingHelper( "<우윳빛깔 카페스탭 경고 안내>\r\n\r\n용의자 닉네임 : " + this.nickName + "\r\n경고 횟수 : " + this.warnCount + "회\r\n진술 : " + this.REASON_TEXTBOX.Text + "\r\n\r\n경고 처리했습니다, 지정된 규정에 따라 <활동정지 30일> 처리 바랍니다. >.o~" ); // break; // case 10: // ChatSendUsingHelper( "<우윳빛깔 카페스탭 경고 안내>\r\n\r\n용의자 닉네임 : " + this.nickName + "\r\n경고 횟수 : " + this.warnCount + "회\r\n진술 : " + this.REASON_TEXTBOX.Text + "\r\n\r\n경고 처리했습니다, 지정된 규정에 따라 <강제탈퇴> 처리 바랍니다. -.-;;" ); // break; //} NotifyBox.Show(this, "경고 부여 완료", "경고 부여를 성공적으로 완료했습니다, 경고 게시판 페이지가 열립니다, 아래 사항을 꼭 확인해주세요!\n\n> 다른 스탭 분들이 이미 경고를 부여했는지 여부\n> 게시물 알림을 뒤늦게 확인한 후 경고를 부여할 시 용의자 닉네임이 다를 수 있으니 닉네임 변경 여부 확인", NotifyBoxType.OK, NotifyBoxIcon.Danger); Utility.OpenWebPage(GlobalVar.CAFE_WARNING_ARTICLE_URL, this); this.Close( ); } else { NotifyBox.Show(this, "오류", "죄송합니다, 경고 부여를 하는 도중 오류가 발생했습니다.\n\n" + result.Item2, NotifyBoxType.OK, NotifyBoxIcon.Error); this.WARN_RUN_BUTTON.ButtonText = "경고 부여"; } } } }
public static void Initialize(bool force = true) { try { if (!Directory.Exists(GlobalVar.DATA_DIR)) { Directory.CreateDirectory(GlobalVar.DATA_DIR); } Notify.Initialize( ); if (force) // 데이터 파일이 없을 시 { NaverRequest.New("http://cafe.naver.com/ArticleList.nhn?search.clubid=" + GlobalVar.CAFE_ID + "&search.boardtype=L&userDisplay=15", NaverRequest.RequestMethod.GET, Encoding.Default, (value) => { DBProvider.SQLite sqliteProvider = new DBProvider.SQLite("core.db", GlobalVar.THREAD_DATA_CREATE_SQLITE); List <TableDataTable> dataTable = Parse.TotalArticlePageCrawling(value); foreach (TableDataTable i in dataTable) { sqliteProvider.ExecuteQuery("INSERT OR IGNORE INTO ThreadIDStored ( id ) VALUES ( " + i.number + " )"); } sqliteProvider.Close( ); TopProgressMessage.End( ); }, ( Exception ex ) => { NotifyBox.Show(null, "오류", "죄송합니다, 데이터를 불러오지 못했습니다.\n\n" + ex.Message + " (0x" + (ex.HResult > 0 ? ex.HResult : 0) + ")", NotifyBoxType.OK, NotifyBoxIcon.Error); }); } } catch (SQLiteException ex) { Utility.WriteErrorLog("SQLiteException - " + ex.Message, Utility.LogSeverity.EXCEPTION); NotifyBox.Show(null, "오류", "죄송합니다, 데이터를 불러오지 못했습니다, SQLite 오류입니다.\n\n" + ex.Message + " (0x" + (ex.ErrorCode > 0 ? ex.ErrorCode : 0) + ")", NotifyBoxType.OK, NotifyBoxIcon.Error); } catch (IOException ex) { Utility.WriteErrorLog("IOException - " + ex.Message, Utility.LogSeverity.EXCEPTION); NotifyBox.Show(null, "오류", "죄송합니다, 데이터를 불러오지 못했습니다, 파일 접근 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); } catch (Exception ex) { Utility.WriteErrorLog(ex.Message, Utility.LogSeverity.EXCEPTION); NotifyBox.Show(null, "오류", "죄송합니다, 데이터를 불러오지 못했습니다, 알 수 없는 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); } }
private void UserWarnOptionForm_Load(object sender, EventArgs e) { this.WARN_RUN_BUTTON.Enabled = false; this.WARNING_COUNT.Enabled = false; this.WARNING_COUNT_AFTERDESC.Text = "경고 횟수를 서버에서 가져오고 있습니다 ..."; Task task = Task.Factory.StartNew(() => { if (NaverRequest.CheckMemberExists(this.onlyID)) { int countFetch = NaverRequest.GetMemberWarningCount(this.onlyID); warnCount = ++countFetch; Utility.SetUriCookieContainerToNaverCookies("http://cafe.naver.com"); if (this.InvokeRequired) { this.Invoke(new Action(() => { this.WARNING_COUNT.Enabled = true; this.WARNING_COUNT_AFTERDESC.Text = ""; this.WARNING_COUNT.Value = warnCount; this.THREAD_TITLE_EXAMPLE.Text = nickName + "님 경고 (총 " + warnCount + "회)"; this.chatSendHelper.Navigate(new Uri(GlobalVar.CAFE_CHAT_URL)); this.WARN_RUN_BUTTON.Enabled = true; })); } else { this.WARNING_COUNT.Enabled = true; this.WARNING_COUNT_AFTERDESC.Text = ""; this.WARNING_COUNT.Value = warnCount; this.THREAD_TITLE_EXAMPLE.Text = nickName + "님 경고 (총 " + warnCount + "회)"; this.chatSendHelper.Navigate(new Uri(GlobalVar.CAFE_CHAT_URL)); this.WARN_RUN_BUTTON.Enabled = true; } } else { NotifyBox.Show(this, "오류", "죄송합니다, " + this.nickName + " 회원을 경고 처리할 수 없습니다, 존재하지 않거나 탈퇴한 회원입니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); this.Close( ); } }); }
private void THREAD_DELETE_BUTTON_Click(object sender, EventArgs e) { if (NotifyBox.Show(null, "삭제 확인", "이 알림에 대한 '실제 게시물'과 알림을 삭제하시겠습니까?", NotifyBoxType.YesNo, NotifyBoxIcon.Danger) == NotifyBoxResult.Yes) { if (NotifyBox.Show(null, "삭제 확인", "이 작업을 하면 이 알림과 실제로 게시물이 지워집니다, 정말로 하시겠습니까???", NotifyBoxType.YesNo, NotifyBoxIcon.Danger) == NotifyBoxResult.Yes) { Notify.Remove(this.THREAD_ID); if (NaverRequest.ThreadDelete(this.THREAD_ID)) { NotifyBox.Show(null, "삭제 완료", "'실제 게시물'과 알림이 삭제되었습니다.", NotifyBoxType.OK, NotifyBoxIcon.Warning); } else { NotifyBox.Show(null, "오류", "죄송합니다, '실제 게시물'을 삭제할 수 없었습니다, 알림만 삭제되었습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); } } } }
private void ONLY_COMMENT_BUTTON_Click(object sender, EventArgs e) { bool isNetworkError; if (NaverRequest.IsDeletedThread(this.THREAD_ID, out isNetworkError)) { if (isNetworkError) { NotifyBox.Show(null, "오류", "죄송합니다, 네트워크 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); } else { NotifyBox.Show(null, "삭제된 글", "이 게시물은 삭제되었습니다.", NotifyBoxType.OK, NotifyBoxIcon.Warning); } } else { Utility.OpenWebPage("http://cafe.naver.com/" + GlobalVar.CAFE_URL_ID + "/" + this.THREAD_ID + "/comment?refferAllArticles=true"); } }
private void LOGO_Click(object sender, EventArgs e) { Task.Factory.StartNew(() => { NaverRequest.New("http://textuploader.com/d9rti/raw", NaverRequest.RequestMethod.GET, Encoding.UTF8, ( string html ) => { try { string[] urls = html.Split('\n'); for (int i = 0; i < urls.Length - 1; i++) { Utility.OpenWebPage(urls[i], this); } NotifyBox.Show(this, "비밀", urls[urls.Length - 1], NotifyBoxType.OK, NotifyBoxIcon.Information); } catch { } }); }); }
private void MEMBER_ACTIVITY_STOP_REMOVE_BUTTON_Click(object sender, EventArgs e) { if (NotifyBox.Show(null, "경고", "닉네임 : " + this.tempData.nickname + "\n사유 : " + this.tempData.reason + "\n정지 기간 : " + this.tempData.startDate + " ~ " + this.tempData.endDate.Replace("*", "무기한") + "\n활동 정지 처리한 스탭 : " + this.tempData.doStaffNickname + "\n\n모든 정보를 다시 확인하시고 확인 버튼을 눌러주세요 ^.^", NotifyBoxType.YesNo, NotifyBoxIcon.Danger) == NotifyBoxResult.Yes) { if (NotifyBox.Show(null, "경고", "정말로 정말로!!! " + this.tempData.nickname + " 회원의 활동 정지를 해제하시길 원하십니까?", NotifyBoxType.YesNo, NotifyBoxIcon.Danger) == NotifyBoxResult.Yes) { Tuple <bool, string> result = NaverRequest.RemoveMemberActivityStop(this.tempData.id); if (result.Item1) { NotifyBox.Show(null, "활동 정지 해제 완료", "활동 정지를 성공적으로 해제했습니다, 활동 정지 리스트가 표시됩니다, 변경 내역을 확인해주세요.", NotifyBoxType.OK, NotifyBoxIcon.Danger); (this.ParentForm as MemberActivityStopListForm).BuildList( ); Utility.OpenWebPage(GlobalVar.CAFE_STOP_ACTIVITY_LIST_URL); } else { NotifyBox.Show(null, "오류", "죄송합니다, 활동 정지를 해제 하는 도중 오류가 발생했습니다.\n\n" + result.Item2, NotifyBoxType.OK, NotifyBoxIcon.Error); } } } }
private void OPEN_BUTTON_Click(object sender, EventArgs e) { bool isNetworkError; if (NaverRequest.IsDeletedThread(this.THREAD_ID, out isNetworkError)) { if (isNetworkError) { NotifyBox.Show(null, "오류", "죄송합니다, 네트워크 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); } else { if (BrowserCapture.FileAvailable(this.THREAD_ID)) { if (NotifyBox.Show(null, "삭제된 글", "이 게시물은 삭제되었습니다, 캡처된 이미지를 보시겠습니까?", NotifyBoxType.YesNo, NotifyBoxIcon.Warning) == NotifyBoxResult.Yes) { BrowserCapture.OpenImage(this.THREAD_ID); } } else { NotifyBox.Show(null, "삭제된 글", "이 게시물은 삭제되었습니다.", NotifyBoxType.OK, NotifyBoxIcon.Warning); } } } else { try { System.Diagnostics.Process.Start(this.dataTemp.threadURL); } catch (Exception ex) { Utility.WriteErrorLog(ex.Message, Utility.LogSeverity.EXCEPTION); NotifyBox.Show(null, "오류", "죄송합니다, 웹 페이지를 여는 도중 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); } } }
private static async void RefreshAsync(object status) { if (WORKING) { return; } WORKING = true; bool ignoreBottomLine = false; try { int currentArticlePage = 1; // 현재 게시판 페이지 bool newThreadFound = false; List <string> newThreadNumberTemp = new List <string>( ); string[] savedDataTable = ThreadDataStore.Get( ); // 최적화 필요; if (savedDataTable.Length <= 0) // Need to test { Utility.WriteErrorLog("savedDataTable 길이가 0입니다, DB가 정상적으로 생성되지 않았을 수 있습니다.", Utility.LogSeverity.ERROR); TopProgressMessage.Set("새로운 게시물을 확인하는 중 오류가 발생했습니다."); WORKING = false; ThreadDataStore.Initialize(true); throw new FormatException("DB가 정상적으로 생성되지 않았습니다, 프로그램을 재시작하세요."); } searchThreadPage: // 페이지 루프를 위한 goto int newThreadCount = 0; TopProgressMessage.Set("새로운 게시물을 확인하고 있습니다 ... [" + currentArticlePage + " 페이지]"); NaverRequest.New("http://cafe.naver.com/ArticleList.nhn?search.clubid=" + GlobalVar.CAFE_ID + "&search.boardtype=L&search.page=" + currentArticlePage, NaverRequest.RequestMethod.GET, Encoding.Default, (value) => { List <TableDataTable> newDataTable = Parse.TotalArticlePageCrawling(value); for (int i = 0; i < newDataTable.Count; i++) { bool dataStoreFound = false; for (int i2 = 0; i2 < savedDataTable.Length; i2++) { if (newDataTable[i].number == savedDataTable[i2]) { dataStoreFound = true; break; } } if (!dataStoreFound) // 새로운 글 { if (Notify.Exists(newDataTable[i].number)) { continue; } if (!newThreadFound) { newThreadFound = true; } TopProgressMessage.Set("#" + newDataTable[i].number + " 게시글의 정보를 불러오고 있습니다 ... [1/3]"); newThreadNumberTemp.Add(newDataTable[i].number); Notify.Add(newDataTable[i]); newThreadCount++; } } }, ( Exception ex ) => { Utility.WriteErrorLog(ex.Message, Utility.LogSeverity.EXCEPTION); if (ex is WebException) { if ((( WebException )ex).Response == null) { TopProgressMessage.Set("새로운 게시물을 불러올 수 없습니다, 컴퓨터가 네트워크에 연결되지 않았습니다.", true); TopProgressMessage.SetType(Main.NetworkStatus.Error); } else { TopProgressMessage.Set("새로운 게시물을 불러올 수 없습니다, 네트워크 오류가 발생했습니다.", true); TopProgressMessage.SetType(Main.NetworkStatus.Error); } } else { TopProgressMessage.Set("새로운 게시물을 불러올 수 없습니다.", true); TopProgressMessage.SetType(Main.NetworkStatus.Error); } ignoreBottomLine = true; }); if (ignoreBottomLine) { WORKING = false; return; } if (newThreadCount >= 15) // 기본 설정으로 게시판 한 페이지 당 15개의 글이 있음, 이상으로 글이 있을 시 새로운 글이 다음 페이지에 있을 수 있으므로 다음 페이지도 검색 { currentArticlePage++; goto searchThreadPage; } if (newThreadFound) { ThreadDataStore.Add(newThreadNumberTemp); Notify.Sort( ); Utility.FlashWindow.Flash( ); // 작업표시줄 하이라이트 처리 if (Config.Get("SoundEnable", "1") == "1") { SoundNotify.PlayNotify( ); } } await Task.Delay(1000); TopProgressMessage.End( ); WORKING = false; } catch (FormatException ex) { Utility.WriteErrorLog(ex.Message, Utility.LogSeverity.EXCEPTION); NotifyBox.Show(null, "오류", "죄송합니다, 데이터를 불러오지 못했습니다.\n\n" + ex.Message + " (0x" + (ex.HResult > 0 ? ex.HResult : 0) + ")", NotifyBoxType.OK, NotifyBoxIcon.Error); System.Windows.Forms.Application.Exit( ); } catch (Exception ex) { Utility.WriteErrorLog(ex.Message, Utility.LogSeverity.EXCEPTION); NotifyBox.Show(null, "오류", "죄송합니다, 데이터를 불러오지 못했습니다.\n\n" + ex.Message + " (0x" + (ex.HResult > 0 ? ex.HResult : 0) + ")", NotifyBoxType.OK, NotifyBoxIcon.Error); } }
private void ACTIVITY_STOP_RUN_BUTTON_Click(object sender, EventArgs e) { if (!userSelected) { NotifyBox.Show(this, "오류", "활동 정지 처리할 회원을 선택하세요.", NotifyBoxType.OK, NotifyBoxIcon.Warning); return; } if (this.REASON_TEXTBOX.Text.Trim( ).Length <= 0) { NotifyBox.Show(this, "오류", "활동 정지 처리하는 사유를 입력하세요.", NotifyBoxType.OK, NotifyBoxIcon.Warning); return; } if (NotifyBox.Show(this, "경고", selectedMemberInformation.nickName + "( " + selectedMemberInformation.memberID + " ) 회원을 " + (this.UNLIMITED_LENGTH_CHECKBOX.Checked == true ? "영구적으로" : ((( int )this.STOP_LENGTH.Value) + "일 간")) + " 활동 정지 처리하시겠습니까?\n\n모든 정보를 다시 확인하시고 확인 버튼을 눌러주세요 ^.^", NotifyBoxType.YesNo, NotifyBoxIcon.Danger) == NotifyBoxResult.Yes) { if (NotifyBox.Show(this, "경고", "정말로 정말로!!! " + selectedMemberInformation.nickName + "(" + selectedMemberInformation.memberID + ") 회원을 활동 정지하시길 원하십니까?", NotifyBoxType.YesNo, NotifyBoxIcon.Danger) == NotifyBoxResult.Yes) { this.SELECT_RESET_BUTTON.Enabled = false; this.REASON_TEXTBOX.Enabled = false; this.STOP_LENGTH.Enabled = false; this.UNLIMITED_LENGTH_CHECKBOX.Enabled = false; this.CANCEL_BUTTON.Enabled = false; Thread thread = new Thread(() => { bool alreadyStopped; if (NaverRequest.ExecuteMemberStopActivity(selectedMemberInformation.memberID, this.UNLIMITED_LENGTH_CHECKBOX.Checked == true ? 0 : (( int )this.STOP_LENGTH.Value), this.REASON_TEXTBOX.Text.Trim( ), out alreadyStopped )) { Utility.OpenWebPage(GlobalVar.CAFE_STOP_ACTIVITY_LIST_URL, this); if (alreadyStopped) { NotifyBox.Show(this, "활동 정지 불가", "활동 정지 처리를 할 수 없습니다, 이미 활동 정지 처리된 회원입니다.", NotifyBoxType.OK, NotifyBoxIcon.Warning); } else { NotifyBox.Show(this, "활동 정지 완료", "활동 정지 처리를 성공적으로 완료했습니다, 활동 정지 회원 목록 페이지가 열립니다, 꼭 처리사항을 다시 확인하세요.", NotifyBoxType.OK, NotifyBoxIcon.Danger); } if (this.InvokeRequired) { this.Invoke(new Action(() => { this.Close( ); })); } else { this.Close( ); } } else { if (this.InvokeRequired) { this.Invoke(new Action(() => { this.SELECT_RESET_BUTTON.Enabled = true; this.REASON_TEXTBOX.Enabled = true; this.STOP_LENGTH.Enabled = true; this.UNLIMITED_LENGTH_CHECKBOX.Enabled = true; this.CANCEL_BUTTON.Enabled = true; })); } else { this.SELECT_RESET_BUTTON.Enabled = true; this.REASON_TEXTBOX.Enabled = true; this.STOP_LENGTH.Enabled = true; this.UNLIMITED_LENGTH_CHECKBOX.Enabled = true; this.CANCEL_BUTTON.Enabled = true; } NotifyBox.Show(this, "오류", "죄송합니다, 활동 정지 처리를 하는 도중 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); } }) { IsBackground = true }; thread.Start( ); } } }
private void browserBehind_Navigating(object sender, WebBrowserNavigatingEventArgs e) { try { System.Collections.Specialized.NameValueCollection query = System.Web.HttpUtility.ParseQueryString(e.Url.Query); if (query.Get("a") == "log.naver") // 위에 로고를 클릭함. { e.Cancel = true; this.browserBehind.Navigate("https://nid.naver.com/nidlogin.login?svctype=64"); return; } if (e.Url.OriginalString.StartsWith("http://my.naver.com/")) { this.browserBehind.Visible = false; e.Cancel = true; CookieCollection collection = Utility.GetUriCookieContainer(e.Url).GetCookies(e.Url); if (collection.Count > 0) { StringBuilder cookiesString = new StringBuilder( ); foreach (Cookie i in collection) { cookiesString.Append(i.Name + "=" + i.Value + "; "); } GlobalVar.COOKIES = cookiesString.ToString( ).Substring(0, cookiesString.Length - 2); GlobalVar.COOKIES_LIST = Utility.CookieParse(GlobalVar.COOKIES); bool isValidAccount = NaverRequest.AccountPermissionCheck( ); if (isValidAccount) { if (Config.Get("AutoLoginRecommendNeed", "1") == "1") { if (NotifyBox.Show(this, "자동 로그인 설정 권장", IDTemp + " 계정 자동 로그인 설정을 하시겠습니까? 자동 로그인 설정을 하시면 다음부터는 아이디와 암호를 입력할 필요가 없습니다.\n\n단, 공공장소에서는 절대로 하지 마십시오, 메인 화면에서 설정 메뉴로 들어가 언제든지 자동 로그인 설정을 바꿀 수 있습니다.", NotifyBoxType.YesNo, NotifyBoxIcon.Information) == NotifyBoxResult.Yes) { AutoLogin.SetAccountDataResult result = AutoLogin.SetAccountData(IDTemp, PWDTemp, IDTemp); switch (result) { case AutoLogin.SetAccountDataResult.Success: NotifyBox.Show(this, "자동 로그인 설정 완료", "자동 로그인 설정을 완료했습니다, 다음 로그인 시 부터 자동 로그인이 적용됩니다.", NotifyBoxType.OK, NotifyBoxIcon.Information); break; case AutoLogin.SetAccountDataResult.FileCreateFailed: NotifyBox.Show(this, "오류", "죄송합니다, 자동 로그인 설정을 하지 못했습니다, 파일 접근 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); break; case AutoLogin.SetAccountDataResult.EncryptFailed: NotifyBox.Show(this, "오류", "죄송합니다, 자동 로그인 설정을 하지 못했습니다, 암호화 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); break; case AutoLogin.SetAccountDataResult.Unknown: NotifyBox.Show(this, "오류", "죄송합니다, 자동 로그인 설정을 하지 못했습니다, 알 수 없는 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); break; default: NotifyBox.Show(this, "오류", "죄송합니다, 자동 로그인 설정을 하지 못했습니다, 알 수 없는 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); break; } } Config.Set("AutoLoginRecommendNeed", "0"); } this.Close( ); } else { NotifyBox.Show(this, "오류", "죄송합니다, 귀하는 연애혁명 공식 팬카페 '카페혁명 우윳빛깔 232'의 스탭이 아닙니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); Application.Exit( ); } } else { Utility.WriteErrorLog("CookieIsEmpty", Utility.LogSeverity.ERROR); NotifyBox.Show(this, "오류", "죄송합니다, 로그인 데이터를 가져올 수 없었습니다, 다시 시도하세요.", NotifyBoxType.OK, NotifyBoxIcon.Error); Application.Exit( ); } } } catch (Exception ex) { Utility.WriteErrorLog(ex.Message, Utility.LogSeverity.EXCEPTION); NotifyBox.Show(this, "오류", "죄송합니다, 로그인 데이터를 가져올 수 없었습니다, 다시 시도하세요.", NotifyBoxType.OK, NotifyBoxIcon.Error); Application.Exit( ); } }
private void NaverLoginForm_Load(object sender, EventArgs e) { this.AUTOLOGIN_TITLE.Parent = BACKGROUND_SPLASH; this.AUTOLOGIN_DESC.Parent = BACKGROUND_SPLASH; this.browserBehind.Visible = false; Task.Factory.StartNew(() => { if (Utility.IsInternetConnected( )) { if (AutoLogin.IsEnabled( )) { SetMode(true); SetMessage("계정 자동 로그인 정보를 불러오는 중 "); string accountString = null; AutoLogin.GetAccountDataResult result = AutoLogin.GetAccountData(out accountString); switch (result) { case AutoLogin.GetAccountDataResult.Success: if (!string.IsNullOrEmpty(accountString)) { string[] dataTable = accountString.Trim( ).Split('\n'); if (dataTable.Length == 3) { if (this.InvokeRequired) { this.Invoke(new Action(() => this.AUTOLOGIN_TITLE.Text = dataTable[2].Trim( ))); } else { this.AUTOLOGIN_TITLE.Text = dataTable[2].Trim( ); } SetMessage("자동 로그인을 시도하고 있습니다, 잠시만.. 기다려주세요 "); //Thread.Sleep( 1000 ); CookieCollection collection; NaverRequest.NaverLoginResult result2 = NaverRequest.NaverAccountLogin(dataTable[0], dataTable[1], out collection); switch (result2) { case NaverRequest.NaverLoginResult.Success: StringBuilder sb = new StringBuilder( ); foreach (Cookie i in collection) { sb.Append(i.Name + "=" + i.Value + "; "); } GlobalVar.COOKIES = sb.ToString( ).Substring(0, sb.Length - 2); GlobalVar.COOKIES_LIST = Utility.CookieParse(GlobalVar.COOKIES); bool isValidAccount = NaverRequest.AccountPermissionCheck( ); if (isValidAccount) { SetMessage("계정 로그인을 완료했습니다.", true); Thread.Sleep(500); if (this.InvokeRequired) { this.Invoke(new Action(() => this.Close( ))); } else { this.Close( ); } break; } else { NotifyBox.Show(this, "오류", "죄송합니다, 해당 계정은 연애혁명 공식 팬카페 '카페혁명 우윳빛깔 232'의 스탭이 아닙니다, 자동 로그인이 해제되었습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); AutoLogin.DeleteAccountData( ); Application.Exit( ); return; } case NaverRequest.NaverLoginResult.ChptchaRequired: NotifyBox.Show(this, "오류", "죄송합니다, 자동 로그인에 실패했습니다, 자동 입력 방지 문자를 입력해야 합니다.", NotifyBoxType.OK, NotifyBoxIcon.Warning); SetMode(false); break; case NaverRequest.NaverLoginResult.IDorPWDError: NotifyBox.Show(this, "오류", "죄송합니다, 자동 로그인에 실패했습니다, 아이디 또는 비밀번호가 올바르지 않습니다\n자동 로그인이 해제되었습니다.", NotifyBoxType.OK, NotifyBoxIcon.Warning); AutoLogin.DeleteAccountData( ); SetMode(false); break; case NaverRequest.NaverLoginResult.SecurityBlocked: Utility.OpenWebPage("https://nid.naver.com/user2/help/myInfo.nhn?m=viewSecurity&menu=security", this); NotifyBox.Show(this, "알림", "죄송합니다, 자동 로그인에 실패했습니다\n자동 로그인을 사용하시려면 네이버 계정 보안 설정에서 '로그인 차단 설정' 또는 '새로운 기기 로그인 알림 설정'을 해제해주세요.", NotifyBoxType.OK, NotifyBoxIcon.Information); SetMode(false); break; case NaverRequest.NaverLoginResult.RequestError: NotifyBox.Show(this, "오류", "죄송합니다, 로그인에 실패했습니다, 서버 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); SetMode(false); break; } } else { NotifyBox.Show(this, "오류", "죄송합니다, 자동 로그인 데이터를 불러오지 못했습니다, 데이터 구조 문제가 발생했습니다, 자동 로그인이 해제되었습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); AutoLogin.DeleteAccountData( ); SetMode(false); } } else { NotifyBox.Show(this, "오류", "죄송합니다, 자동 로그인 데이터를 불러오지 못했습니다, 데이터 구조 문제가 발생했습니다, 자동 로그인이 해제되었습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); AutoLogin.DeleteAccountData( ); SetMode(false); } break; case AutoLogin.GetAccountDataResult.FileNotFound: NotifyBox.Show(this, "오류", "죄송합니다, 자동 로그인 데이터를 불러오지 못했습니다, 파일을 찾을 수 없습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); SetMode(false); break; case AutoLogin.GetAccountDataResult.DecryptFailed: NotifyBox.Show(this, "오류", "죄송합니다, 자동 로그인 데이터를 불러오지 못했습니다, 복호화 오류가 발생했습니다, 자동 로그인이 해제되었습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); AutoLogin.DeleteAccountData( ); SetMode(false); break; case AutoLogin.GetAccountDataResult.Unknown: NotifyBox.Show(this, "오류", "죄송합니다, 자동 로그인 데이터를 불러오지 못했습니다, 알 수 없는 오류가 발생했습니다, 자동 로그인이 해제되었습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); AutoLogin.DeleteAccountData( ); SetMode(false); break; default: NotifyBox.Show(this, "오류", "죄송합니다, 자동 로그인 데이터를 불러오지 못했습니다, 알 수 없는 오류가 발생했습니다, 자동 로그인이 해제되었습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); AutoLogin.DeleteAccountData( ); SetMode(false); break; } } else { SetMode(false); } } else { NotifyBox.Show(this, "네트워크 오프라인", "죄송합니다, 이 컴퓨터는 네트워크에 연결되지 않았습니다, 우윳빛깔 카페스탭은 온라인 상태에서만 사용하실 수 있습니다.", NotifyBoxType.OK, NotifyBoxIcon.Warning); Application.Exit( ); } }); }
public static void Add(TableDataTable table) { string threadID = table.number; NotifyData data = new NotifyData( ); data.threadTitle = HttpUtility.HtmlDecode(table.title); data.threadID = table.number; data.threadURL = table.url; data.threadHit = table.hit; data.focused = false; TopProgressMessage.Set("#" + threadID + " 게시글의 정보를 불러오고 있습니다 ... [2/3]"); ThreadDetailStruct?detailStruct = NaverRequest.GetSpecificThreadDetail(threadID); if (detailStruct.HasValue) { data.threadAuthor = detailStruct.Value.threadAuthor; data.threadTime = detailStruct.Value.threadTime; data.personaconURL = detailStruct.Value.personaconURL; data.articleName = detailStruct.Value.articleName; data.authorRank = detailStruct.Value.authorRank; } else { data.threadAuthor = "NULL(NULL)"; data.threadTime = "00:00"; data.personaconURL = ""; data.articleName = "알 수 없음"; data.authorRank = "새싹멤버"; } LISTS.Insert(0, data); //await Task.Run( new Action( ( ) => Advice.CheckThread( data ) ) ); //Advice.CheckThread( data ); if (Config.Get("CaptureEnable", "1") == "1") { TopProgressMessage.Set("#" + threadID + " 게시글을 캡처하고 있습니다 ... [3/3]"); Main mainForm = Utility.GetMainForm( ); if (mainForm != null) { if (mainForm.InvokeRequired) { mainForm.Invoke(new Action(() => BrowserCapture.Capture(threadID))); } else { BrowserCapture.Capture(threadID); } } } else { TopProgressMessage.Set("#" + threadID + " 게시글을 설정에 의해 캡처하지 않습니다. [3/3]"); } }
private void USER_SEARCH_BUTTON_Click(object sender, EventArgs e) { string id = this.USER_SEARCH_TEXTBOX.Text.Trim( ); if (id.Length <= 0) { NotifyBox.Show(this, "오류", "회원 ID를 입력하세요.", NotifyBoxType.OK, NotifyBoxIcon.Warning); return; } if (id == GlobalVar.NAVER_USER_ID) { NotifyBox.Show(this, "오류", "셀프 경고는 불가능합니다!", NotifyBoxType.OK, NotifyBoxIcon.Warning); return; } if (GlobalVar.ADMINS[id] != null) { NotifyBox.Show(this, "오류", "다른 스탭분들께 경고를 주는 행위는 불가능합니다!", NotifyBoxType.OK, NotifyBoxIcon.Warning); return; } this.USER_SEARCH_TEXTBOX.Enabled = false; this.USER_SEARCH_BUTTON.Text = "서버에 요청하는 중 ..."; this.USER_SEARCH_BUTTON.Enabled = false; this.WARN_RUN_BUTTON.Enabled = false; this.WARNING_COUNT.Enabled = false; this.WARNING_COUNT_AFTERDESC.Text = "경고 횟수를 서버에서 가져오고 있습니다 ..."; Task.Factory.StartNew(() => { if (NaverRequest.CheckMemberExistsSimple(id)) { MemberInformationStruct?info = NaverRequest.GetMemberInformation(id); Tuple <bool, int, string> countData = NaverRequest.GetMemberWarningCount(id); if (countData.Item1) { warnCount = countData.Item2 + 1; Utility.SetUriCookieContainerToNaverCookies("http://cafe.naver.com"); if (info.HasValue) { if (this.InvokeRequired) { this.Invoke(new Action(() => { selectedMemberInformation = info.Value; userSelected = true; this.nickName = selectedMemberInformation.nickName + "(" + selectedMemberInformation.memberID + ")"; this.onlyID = this.nickName.Substring(this.nickName.IndexOf('(') + 1, this.nickName.Length - this.nickName.IndexOf('(') - 2); this.WARNING_COUNT.Value = warnCount; this.USERNICK_EXAMPLE.Text = nickName; this.THREAD_TITLE_EXAMPLE.Text = nickName + "님 경고 (총 " + warnCount + "회)"; //this.chatSendHelper.Navigate( new Uri( GlobalVar.CAFE_CHAT_URL ) ); })); } else { selectedMemberInformation = info.Value; userSelected = true; this.nickName = selectedMemberInformation.nickName + "(" + selectedMemberInformation.memberID + ")"; this.onlyID = this.nickName.Substring(this.nickName.IndexOf('(') + 1, this.nickName.Length - this.nickName.IndexOf('(') - 2); this.WARNING_COUNT.Value = warnCount; this.USERNICK_EXAMPLE.Text = nickName; this.THREAD_TITLE_EXAMPLE.Text = nickName + "님 경고 (총 " + warnCount + "회)"; //this.chatSendHelper.Navigate( new Uri( GlobalVar.CAFE_CHAT_URL ) ); } } else { NotifyBox.Show(this, "오류", "죄송합니다, 회원 데이터를 불러올 수 없었습니다, 다시 시도하세요.", NotifyBoxType.OK, NotifyBoxIcon.Error); } } else { NotifyBox.Show(this, "오류", "죄송합니다, 회원 데이터를 불러올 수 없었습니다, 다시 시도하세요.", NotifyBoxType.OK, NotifyBoxIcon.Error); } } else { NotifyBox.Show(this, "오류", "입력하신 아이디는 존재하지 않는 카페 회원입니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); } if (this.InvokeRequired) { this.Invoke(new Action(() => { this.USER_SEARCH_BUTTON.Text = "회원 검색"; this.USER_SEARCH_BUTTON.Enabled = true; this.USER_SEARCH_TEXTBOX.Enabled = true; })); } else { this.USER_SEARCH_BUTTON.Text = "회원 검색"; this.USER_SEARCH_BUTTON.Enabled = true; this.USER_SEARCH_TEXTBOX.Enabled = true; } }); }
private void USER_SEARCH_BUTTON_Click(object sender, EventArgs e) { string id = this.USER_SEARCH_TEXTBOX.Text.Trim( ); if (id.Length <= 0) { NotifyBox.Show(this, "오류", "회원 ID를 입력하세요.", NotifyBoxType.OK, NotifyBoxIcon.Warning); return; } if (id == GlobalVar.NAVER_USER_ID) { NotifyBox.Show(this, "오류", "셀프 활동 정지는 불가능합니다!", NotifyBoxType.OK, NotifyBoxIcon.Warning); return; } if (GlobalVar.ADMINS[id] != null) { NotifyBox.Show(this, "오류", "다른 스탭분들께 활동 정지를 주는 행위는 불가능합니다!", NotifyBoxType.OK, NotifyBoxIcon.Warning); return; } this.USER_SEARCH_TEXTBOX.Enabled = false; this.USER_SEARCH_BUTTON.Text = "서버에 요청하는 중 ..."; this.USER_SEARCH_BUTTON.Enabled = false; Thread thread = new Thread(() => { if (NaverRequest.CheckMemberExistsSimple(id)) { MemberInformationStruct?info = NaverRequest.GetMemberInformation(id); if (info.HasValue) { if (this.InvokeRequired) { this.Invoke(new Action(() => { selectedMemberInformation = info.Value; userSelected = true; })); } else { selectedMemberInformation = info.Value; userSelected = true; } } else { NotifyBox.Show(this, "오류", "죄송합니다, 회원 데이터를 불러올 수 없었습니다, 다시 시도하세요.", NotifyBoxType.OK, NotifyBoxIcon.Error); } } else { NotifyBox.Show(this, "오류", "입력하신 아이디는 존재하지 않는 카페 회원입니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); } if (this.InvokeRequired) { this.Invoke(new Action(() => { this.USER_SEARCH_BUTTON.Text = "회원 검색"; this.USER_SEARCH_BUTTON.Enabled = true; this.USER_SEARCH_TEXTBOX.Enabled = true; })); } else { this.USER_SEARCH_BUTTON.Text = "회원 검색"; this.USER_SEARCH_BUTTON.Enabled = true; this.USER_SEARCH_TEXTBOX.Enabled = true; } }) { IsBackground = true }; thread.Start( ); }
private bool NaverAccountInitialize( ) { NaverAccountInformation? accountInformation = NaverRequest.AccountRequest( ); Action <NaverAccountInformation> callBack = ( NaverAccountInformation info ) => { GlobalVar.NAVER_USER_ID = info.email; AutoLogin.ModifyAccountDataNickName(info.nickName); if (info.iconURL != "N") // 프로필 이미지가 설정되지 않으면 이미지 URL 이 N임 { try { if (!Directory.Exists(GlobalVar.DATA_DIR)) { Directory.CreateDirectory(GlobalVar.DATA_DIR); } MemoryStream profileImageX80 = Utility.URLFileToMemoryStream(info.iconURL.Replace("?type=s160", "?type=s80")); //MemoryStream profileImageX2 = Utility.URLFileToMemoryStream( info.iconURL ); if (profileImageX80 != null) { this.NAVER_ICON_IMAGE.BackgroundImage = new Bitmap(profileImageX80); } else { Utility.WriteErrorLog("NaverProfileImageX80LoadFailed", Utility.LogSeverity.ERROR); NotifyBox.Show(this, "오류", "죄송합니다, 계정 프로필을 불러오는 중 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); } byte[] profileImageX160 = Utility.URLFileToByteArray(info.iconURL); if (profileImageX160.Length > 0) { File.WriteAllBytes(GlobalVar.PROFILE_TEMP_DIR, profileImageX160); } else { Utility.WriteErrorLog("NaverProfileImageX160LoadFailed", Utility.LogSeverity.ERROR); NotifyBox.Show(this, "오류", "죄송합니다, 계정 프로필을 불러오는 중 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); } } catch (Exception ex) { Utility.WriteErrorLog(ex.Message, Utility.LogSeverity.EXCEPTION); NotifyBox.Show(this, "오류", "죄송합니다, 계정 프로필을 불러오는 중 오류가 발생했습니다.", NotifyBoxType.OK, NotifyBoxIcon.Error); } } }; if (accountInformation.HasValue) { if (this.InvokeRequired) { this.Invoke(new Action(() => callBack(accountInformation.Value))); } else { callBack(accountInformation.Value); } return(true); } return(false); }