Advertisement
timeshifter

new parser 2

Oct 21st, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.48 KB | None | 0 0
  1.     public string ProcessAlias(string target, string user, string msgText, int idx, string args) {
  2.  
  3.         if (idx > -1) {
  4.             msgText = dsData.Tables["Alias"].Rows[idx]["Message"].ToString();
  5.         }
  6.  
  7.         string[] prms = args.Split(',');
  8.         if (args.Trim().Length == 0) {
  9.             prms = new string[0];
  10.         }
  11.  
  12.         msgText = msgText
  13.             .Replace("{user}", user)
  14.             .Replace("{prev}", ChannelHistory[target].Count > 0 ? ChannelHistory[target][0].User : "");
  15.  
  16.         Random R = new Random();
  17.  
  18.         Regex
  19.             regToken = new Regex(@"{([^{}]+)}"),
  20.             regDefault = new Regex(@"{(\d):([^{}]+)}"),
  21.             regUrl = new Regex(@"{(\d):url}"),
  22.             regArg = new Regex(@"{(\d+)}"),
  23.             regRnd = new Regex(@"{rnd:([^{}]+)}"),
  24.             regRng = new Regex(@"{rng:([^{}]+)}"),
  25.             regMisc = new Regex(@"{!([^{}]+)}");
  26.  
  27.         Match
  28.             mDefault,
  29.             mUrl,
  30.             mArg,
  31.             mRnd,
  32.             mRng,
  33.             mMisc;
  34.  
  35.         string matchReplace = "";
  36.         int iterations = 6;
  37.         bool hasMatch = true;
  38.  
  39.         while (hasMatch && iterations > 0) {
  40.  
  41.             if (regToken.IsMatch(msgText)) {
  42.                 int offset = 0;
  43.                 foreach (Match mToken in regToken.Matches(msgText)) {
  44.                     matchReplace = "";
  45.  
  46.                     string matchOriginal = mToken.Value;
  47.  
  48.                     if (regUrl.IsMatch(matchOriginal)) {
  49.                         mUrl = regUrl.Matches(matchOriginal)[0];
  50.  
  51.                         if (prms.Length > int.Parse(mUrl.Groups[1].Value)) {
  52.                             matchReplace = HttpUtility.UrlEncode(prms[int.Parse(mUrl.Groups[1].Value)]);
  53.                         }
  54.                         else {
  55.                             matchReplace = " ";
  56.                         }
  57.  
  58.                     }
  59.                     else if (regDefault.IsMatch(matchOriginal)) {
  60.                         mDefault = regDefault.Matches(matchOriginal)[0];
  61.  
  62.  
  63.                         if (prms.Length > int.Parse(mDefault.Groups[1].Value)) {
  64.                             matchReplace = prms[int.Parse(mDefault.Groups[1].Value)];
  65.                         }
  66.                         else {
  67.                             matchReplace = mDefault.Groups[2].Value;
  68.                         }
  69.  
  70.                     }
  71.                     else if (regArg.IsMatch(matchOriginal)) {
  72.                         mArg = regArg.Matches(matchOriginal)[0];
  73.  
  74.                         if (prms.Length > int.Parse(mArg.Groups[1].Value)) {
  75.                             matchReplace = prms[int.Parse(mArg.Groups[1].Value)];
  76.                         }
  77.                         else {
  78.                             matchReplace = " ";
  79.                         }
  80.  
  81.                     }
  82.                     else if (regRnd.IsMatch(matchOriginal)) {
  83.                         mRnd = regRnd.Matches(matchOriginal)[0];
  84.  
  85.                         if (mRnd.Groups[1].Value.ToLower() == "args") {
  86.                             string[] parts = msgText.Split(',');
  87.                             matchReplace = parts[R.Next(parts.Length)];
  88.                         }
  89.                         else {
  90.                             string[] parts = new string[0];
  91.                             if (mRnd.Groups[1].Value.Contains('|'))
  92.                                 parts = mRnd.Groups[1].Value.Split('|');
  93.                             else
  94.                                 parts = mRnd.Groups[1].Value.Split(',');
  95.  
  96.                             matchReplace = parts[R.Next(parts.Length)];
  97.                         }
  98.  
  99.                     }
  100.                     else if (regRng.IsMatch(matchOriginal)) {
  101.                         mRng = regRng.Matches(matchOriginal)[0];
  102.  
  103.                         string[] parts = mRng.Groups[1].Value.Split(',');
  104.                         int p1 = 0, p2 = 0;
  105.                         if (parts[0].ToLower().Trim() == "min") {
  106.                             p1 = int.MinValue;
  107.                         }
  108.                         else {
  109.                             p1 = int.Parse(parts[0]);
  110.                         }
  111.                         if (parts[1].ToLower().Trim() == "max") {
  112.                             p2 = int.MaxValue - 1;
  113.                         }
  114.                         else {
  115.                             p2 = int.Parse(parts[1]);
  116.                         }
  117.  
  118.                         matchReplace = R.Next(Math.Min(p1, p2), Math.Max(p1, p2) + 1).ToString();
  119.                     }
  120.                     else if (regMisc.IsMatch(matchOriginal)) {
  121.                         mMisc = regMisc.Matches(matchOriginal)[0];
  122.  
  123.                         string name = mMisc.Groups[1].Value;
  124.  
  125.                         int i = GetRowIndex("Lists", "Name", name, false);
  126.  
  127.                         if (i > -1) {
  128.                             string listName = dsData.Tables["Lists"].Rows[i]["Name"].ToString();
  129.  
  130.                             int listIdx = -1;
  131.  
  132.                             listIdx = R.Next(dsData.Tables[listName].Rows.Count);
  133.                             matchReplace = dsData.Tables[listName].Rows[listIdx][0].ToString();
  134.                         }
  135.                         else {
  136.                             int aliasIdx = -1;
  137.                             for (int x = 0; x < dsData.Tables["Alias"].Rows.Count; x++) {
  138.                                 if (dsData.Tables["Alias"].Rows[x]["Keyword"].ToString().ToLower() == name.ToLower()) {
  139.                                     if (dsData.Tables["Alias"].Rows[x]["Channel"].ToString() == target) {
  140.                                         aliasIdx = x;
  141.                                         break;
  142.                                     }
  143.                                     else if (aliasIdx == -1) {
  144.                                         aliasIdx = x;
  145.                                     }
  146.                                 }
  147.                             }
  148.  
  149.                             if (aliasIdx > -1) {
  150.                                 matchReplace = dsData.Tables["Alias"].Rows[aliasIdx]["Message"].ToString();
  151.                             }
  152.                         }
  153.  
  154.                     }
  155.  
  156.                     if (matchReplace != "") {
  157.                         msgText = msgText.Remove(mToken.Index - offset, mToken.Length).Insert(mToken.Index - offset, matchReplace);
  158.                         offset += mToken.Length - matchReplace.Length;
  159.                     }
  160.  
  161.                 }
  162.  
  163.             }
  164.             else {
  165.                 hasMatch = false;
  166.             }
  167.  
  168.             iterations--;
  169.         }
  170.  
  171.         return msgText;
  172.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement