Advertisement
Guest User

Untitled

a guest
May 24th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.60 KB | None | 0 0
  1. using Discord;
  2. using Discord.Commands;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Security.Cryptography;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9.  
  10. namespace DandDBot.Modules
  11. {
  12.     public class Roll : ModuleBase<SocketCommandContext>
  13.     {
  14.         [Command("d")]
  15.         public async Task RollAsync(int numberOfSides = 20, int amountOfDice = 1, string modifierOrStat = "0", string userName = "-")
  16.         {
  17.             string errorCode = "default"; //1+2 = Toolarge, 3 = badusername, 4 = badmodifier
  18.             EmbedBuilder builder = new EmbedBuilder();
  19.             string asterikNatural = "";
  20.             int rollAddition = 0;
  21.             List<string> fileData = new List<string>();
  22.             int finalRoll = 0;
  23.             char profileAccess = 'n';
  24.             int modifierValue = 0;
  25.  
  26.             if (numberOfSides > 100 || numberOfSides < 1)
  27.             {
  28.                 EmbedBuilder originalBuilder = new EmbedBuilder();
  29.  
  30.                 builder.WithTitle("Fuck off jew")
  31.                         .WithDescription(":joy: :point_right: :shower:")
  32.                         .WithColor(Color.Red);
  33.  
  34.                 await ReplyAsync("", false, builder.Build());
  35.  
  36.                 errorCode = "1";
  37.             }
  38.             if (amountOfDice > 20 || amountOfDice < 1)
  39.             {
  40.                 errorCode = "2";
  41.             }
  42.  
  43.             if (modifierOrStat != "0")
  44.             {
  45.                 try
  46.                 {
  47.                     modifierValue = Convert.ToInt32(modifierOrStat);
  48.                 }
  49.                 catch (FormatException)
  50.                 {
  51.                     profileAccess = 'y';
  52.                 }
  53.             }
  54.  
  55.             if (profileAccess == 'y' && userName == "-")
  56.             {
  57.                 errorCode = "3";
  58.             }
  59.  
  60.             RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
  61.             StreamReader sr;
  62.             int i = 0;
  63.             int cumulativeRoll = 0;
  64.             byte[] singleByteBuf = new byte[1];
  65.             int max = Byte.MaxValue - Byte.MaxValue % numberOfSides;
  66.             while (i < amountOfDice)
  67.             {
  68.                 rng.GetBytes(singleByteBuf);
  69.                 int b = singleByteBuf[0];
  70.                 if (b < max)
  71.                 {
  72.                     int currentRoll = b % numberOfSides + 1;
  73.                     cumulativeRoll += currentRoll;
  74.                     i += 1;
  75.                 }
  76.             }
  77.  
  78.             if ((cumulativeRoll == 1 || cumulativeRoll == 20) && (amountOfDice == 1) && (numberOfSides == 20))
  79.             {
  80.                 asterikNatural = "*";
  81.             }
  82.  
  83.             if (profileAccess == 'n')
  84.             {
  85.                 rollAddition = Convert.ToInt32(modifierOrStat);
  86.             }
  87.             else
  88.             {
  89.                 try
  90.                 {
  91.                     sr = new StreamReader("D:\\GoogleDrive\\Discord_Bot\\DandD_Profiles\\" + userName + ".txt");
  92.                     sr.Close();
  93.                 }
  94.                 catch (IOException)
  95.                 {
  96.                     errorCode = "3";
  97.                 }
  98.  
  99.                 if (errorCode != "3")
  100.                 {
  101.                     sr = new StreamReader("D:\\GoogleDrive\\Discord_Bot\\DandD_Profiles\\" + userName + ".txt");
  102.                     fileData.Add(sr.ReadLine()); //Discord ID
  103.                     fileData.Add(sr.ReadLine()); //Strength
  104.                     fileData.Add(sr.ReadLine()); //Dexterity
  105.                     fileData.Add(sr.ReadLine()); //Constitution
  106.                     fileData.Add(sr.ReadLine()); //Intelligence
  107.                     fileData.Add(sr.ReadLine()); //Wisdom
  108.                     fileData.Add(sr.ReadLine()); //Charisma
  109.                     fileData.Add(sr.ReadLine()); //Proficiency
  110.                     sr.Close();
  111.  
  112.  
  113.                     switch (modifierOrStat)
  114.                     {
  115.                         case "s":
  116.                             rollAddition = Convert.ToInt32(fileData[1]);
  117.                             break;
  118.                         case "d":
  119.                             rollAddition = Convert.ToInt32(fileData[2]);
  120.                             break;
  121.                         case "n":
  122.                             rollAddition = Convert.ToInt32(fileData[3]);
  123.                             break;
  124.                         case "i":
  125.                             rollAddition = Convert.ToInt32(fileData[4]);
  126.                             break;
  127.                         case "w":
  128.                             rollAddition = Convert.ToInt32(fileData[5]);
  129.                             break;
  130.                         case "c":
  131.                             rollAddition = Convert.ToInt32(fileData[6]);
  132.                             break;
  133.                         case "sp":
  134.                             rollAddition = Convert.ToInt32(fileData[1]) + Convert.ToInt32(fileData[7]);
  135.                             break;
  136.                         case "dp":
  137.                             rollAddition = Convert.ToInt32(fileData[2]) + Convert.ToInt32(fileData[7]);
  138.                             break;
  139.                         case "np":
  140.                             rollAddition = Convert.ToInt32(fileData[3]) + Convert.ToInt32(fileData[7]);
  141.                             break;
  142.                         case "ip":
  143.                             rollAddition = Convert.ToInt32(fileData[4]) + Convert.ToInt32(fileData[7]);
  144.                             break;
  145.                         case "wp":
  146.                             rollAddition = Convert.ToInt32(fileData[5]) + Convert.ToInt32(fileData[7]);
  147.                             break;
  148.                         case "cp":
  149.                             rollAddition = Convert.ToInt32(fileData[6]) + Convert.ToInt32(fileData[7]);
  150.                             break;
  151.                         default:
  152.                             errorCode = "4";
  153.                             break;
  154.                     }
  155.                 }
  156.             }
  157.  
  158.             finalRoll = cumulativeRoll + rollAddition;
  159.  
  160.             switch (errorCode)
  161.             {
  162.                 case "1":
  163.                     builder.WithTitle("Error")
  164.                     .WithDescription($"The number of sides you entered was too large or too small.")
  165.                     .WithColor(Color.Red);
  166.  
  167.                     await ReplyAsync("", false, builder.Build());
  168.                     break;
  169.                 case "2":
  170.                     builder.WithTitle("Error")
  171.                     .WithDescription($"The number of dice you entered was too large or too small.")
  172.                     .WithColor(Color.Red);
  173.  
  174.                     await ReplyAsync("", false, builder.Build());
  175.                     break;
  176.                 case "3":
  177.                     builder.WithTitle("Error")
  178.                     .WithDescription($"You either didn't enter a username or didn't enter a valid username.")
  179.                     .WithColor(Color.Red);
  180.  
  181.                     await ReplyAsync("", false, builder.Build());
  182.                     break;
  183.                 case "4":
  184.                     builder.WithTitle("Error")
  185.                     .WithDescription($"You entered an invalid modifier or stat.")
  186.                     .WithColor(Color.Red);
  187.  
  188.                     await ReplyAsync("", false, builder.Build());
  189.                     break;
  190.                 default:
  191.                     builder.WithTitle("Roll Results")
  192.                     .WithDescription($"You rolled a {finalRoll}{asterikNatural}.")
  193.                     .WithColor(Color.LighterGrey);
  194.  
  195.                     await ReplyAsync("", false, builder.Build());
  196.                     break;
  197.             }
  198.         }
  199.     }
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement