using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; namespace ServerCommon; public static class StringRuleHelper { public static ServerErrorCode isValidNickname(string nickName) { ArgumentNullReferenceCheckHelper.throwIfNull(nickName, () => $"stringValue is null"); // 첫번째 글자가 숫자인지 체크 한다. if (Regex.IsMatch(nickName[0].ToString(), "[0-9]") == true) { return ServerErrorCode.UserNicknameNotAllowedNumberAtFirstChars; } // 특수문자가 포함되어 있는지 체크 한다. if (true == nickName.isContainSpecialChars(out _)) { return ServerErrorCode.UserNicknameNotAllowWithSpecialChars; } // 길이 체크 if ( nickName.Length < MetaHelper.GameConfigMeta.UserNicknameMinLength || nickName.Length > MetaHelper.GameConfigMeta.UserNicknameMaxLength ) { return ServerErrorCode.UserNicknameAllowedMin2ToMax12; } // 금지어 여부를 체크 한다. if (StringRuleHelper.isBanNickname(nickName) == true) { Log.getLogger().info($"User Nickname is Ban !!! : nickname:{nickName}"); return ServerErrorCode.UserNicknameBan; } return ServerErrorCode.Success; } public static string convertStringFromBase64(string stringValue) { ArgumentNullReferenceCheckHelper.throwIfNull(stringValue, () => $"stringValue is null"); string decoded_text = string.Empty; try { byte[] byteArray = Convert.FromBase64String(stringValue); decoded_text = Encoding.UTF8.GetString(byteArray); } catch (Exception e) { Log.getLogger().error($"convertStringFromBase64 exception occured {e.StackTrace}"); } return decoded_text; } public static string getString(LanguageType langType, List systemMessage) { ArgumentNullReferenceCheckHelper.throwIfNull(systemMessage, () => $"systemMessage is null"); string txt = string.Empty; foreach (var msg in systemMessage) { if ((int)msg.LanguageType == (int)langType) { //var base64_string = StringRuleHelper.convertStringFromBase64(msg.Text); txt = msg.Text; break; } } return txt; } public static bool isBanWord(string word, bool includeNickname) { var lowered_word = word.ToLower(); if (MetaData.Instance._BanWordMetaTable.Any(banWord => lowered_word.Contains(banWord) == true)) { return true; } return includeNickname && isBanNickname(word); } private static bool isBanNickname(string word) { var lowered_word = word.ToLower(); return MetaData.Instance._BanWordNicknameMetaTable.Any(banNickNameWord => lowered_word.Contains(banNickNameWord) == true); } }