Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2016
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.19 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Net.Sockets;
  8. using System.Runtime.InteropServices;
  9. using System.Text;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. using TwitchCSharp.Clients;
  14. using TwitchCSharp.Models;
  15.  
  16. namespace Tournament_Bot
  17. {
  18. public partial class mainForm : Form
  19. {
  20.  
  21. #region variables
  22. public static string userName; //Name of the bot (must be the same as the bot's twitch channel name)
  23. public static string room; //Name of the channel to connect to
  24. public static string password; //Oauth Key
  25. public static string twitchClientID; //Twitch Client ID
  26.  
  27. public static bool canWhisper = true;
  28. List<CommandSpamUser> cmdSpamUser = new List<CommandSpamUser>();
  29. List<LinkUserControl> linkUserControl = new List<LinkUserControl>();
  30.  
  31. string readData = "";
  32.  
  33. commandHandler cmdHandler = new commandHandler();
  34. Settings settings = new Settings();
  35. #endregion
  36.  
  37. #region IRC
  38. Thread chatThread;
  39.  
  40. IrcClient irc;// = new IrcClient("irc.chat.twitch.tv", 6667, userName, password);
  41. NetworkStream serverStream = default(NetworkStream);
  42. #endregion
  43.  
  44. #region Borderless window
  45. public const int WM_NCLBUTTONDOWN = 0xA1;
  46. public const int HT_CAPTION = 0x2;
  47.  
  48. [DllImportAttribute("user32.dll")]
  49. public static extern int SendMessage(IntPtr hWnd,
  50. int Msg, int wParam, int lParam);
  51. [DllImportAttribute("user32.dll")]
  52. public static extern bool ReleaseCapture();
  53.  
  54. #endregion
  55.  
  56. public mainForm()
  57. {
  58. InitializeComponent();
  59. }
  60.  
  61. private void Form_Load(object sender, EventArgs e)
  62. {
  63. userName = settings.Username;
  64. room = settings.Room;
  65. password = settings.Password;
  66. twitchClientID = settings.TwitchClientID;
  67. joinIRCRoom();
  68. }
  69.  
  70. private void joinIRCRoom()
  71. {
  72. irc = new IrcClient("irc.chat.twitch.tv", 6667, userName, password);
  73. irc.joinRoom(room);
  74. //sendMsg("I'm ready and waiting, type !commands to see what I can do!");
  75. chatThread = new Thread(getMessage);
  76. chatThread.Start();
  77. //commandHandler cmdHandler = new commandHandler();
  78. }
  79.  
  80. private void getMessage()
  81. {
  82. serverStream = irc.tcpClient.GetStream();
  83. int buffsize = 0;
  84. byte[] inStream = new byte[10025];
  85. buffsize = irc.tcpClient.ReceiveBufferSize;
  86.  
  87. while (true)
  88. {
  89. try
  90. {
  91. readData = irc.readMessage();
  92. msg();
  93. }
  94. catch { }
  95. }
  96. }
  97.  
  98. private void msg()
  99. {
  100. try
  101. {
  102. if (this.InvokeRequired) this.Invoke(new MethodInvoker(msg));
  103. else
  104. {
  105. //AppendText(chatBox, readData.ToString() + Environment.NewLine, Color.Blue, false);
  106. string[] sep1 = new string[] { "#" + room + " :" };
  107. string[] sep2 = new string[] { ":", "!" };
  108.  
  109. if (readData.ToString().Contains("PRIVMSG"))
  110. {
  111. string user = readData.Split(sep2, StringSplitOptions.None)[1];
  112. string message = readData.Split(sep1, StringSplitOptions.None)[1];
  113.  
  114. if (message[0] == '!')
  115. { //Only checks command if first character is "!"
  116.  
  117. foreach (CommandSpamUser singleUser in cmdSpamUser)
  118. {
  119. if (user == singleUser.username)
  120. {
  121. if (!CooledDown(singleUser, user)) return; //Stops a user spamming commands
  122. }
  123. }
  124. cmdHandler.checkCommand(message, user);
  125. if (cmdHandler.CommandSuccess() && !checkMod(user)) //If command executed prevent user from sending a message for an amount of time
  126. {
  127. CommandSpamUser spamUser = new CommandSpamUser(); //Mods are not limited by this filter
  128. spamUser.username = user;
  129. spamUser.timeOfMessage = DateTime.Now;
  130. cmdSpamUser.Add(spamUser);
  131. }
  132. string outputMessage = cmdHandler.getOutputMessage;
  133. if (outputMessage.Contains("you have been added to the queue at position") || outputMessage.Contains("you have been removed from the queue") || outputMessage.Contains("Queue closed!")) updateQueue();
  134. sendMsg(outputMessage);
  135. }
  136. else
  137. {
  138. // Prevent links from being sent unless user is authorised
  139.  
  140. }
  141. }
  142. if (readData.Contains("PING")) irc.PingResponse();
  143. }
  144. }
  145. catch { }
  146. }
  147.  
  148. private bool checkMod(string user) {
  149. List<String> mods = cmdHandler.getMods();
  150. foreach (string name in mods) if (name == user) return true;
  151. return false;
  152. }
  153.  
  154. private bool CooledDown(CommandSpamUser spamUser, string username)
  155. {
  156. List<CommandSpamUser> temp = cmdSpamUser;
  157. foreach (CommandSpamUser user in temp)
  158. {
  159. TimeSpan duration = DateTime.Now - user.timeOfMessage;
  160. if (duration > TimeSpan.FromSeconds(3))
  161. {
  162. cmdSpamUser.Remove(user);
  163. return true;
  164. }
  165. }
  166. return false;
  167. }
  168.  
  169. private void updateQueue()
  170. {
  171. List<String> queueList = cmdHandler.getQueue();
  172. txtQueue.Text = "";
  173. txtAddPlayer.ForeColor = Color.Black;
  174. foreach (string line in queueList) txtQueue.Text += line + Environment.NewLine;
  175. }
  176.  
  177. private void sendMsg(string message)
  178. {
  179. if (message != "")
  180. irc.sendChatMessage(message);
  181. }
  182.  
  183. private void sendWhisper(string user, string message)
  184. {
  185. if (message != "")
  186. irc.sendWhisper(user, message);
  187. }
  188.  
  189. private void mainForm_MouseDown(object sender, MouseEventArgs e)
  190. {
  191. if (e.Button == MouseButtons.Left && isInBounds(e.Location, new Point(0, 0), this.Width, 28))
  192. {
  193. ReleaseCapture();
  194. SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
  195. }
  196. }
  197.  
  198. private bool isInBounds(Point point1, Point point2, int width, int height)
  199. {
  200. if (point1.X > point2.X && point1.X < point2.X + width && point1.Y > point2.Y && point1.Y < point2.Y + height)
  201. return true;
  202. else return false;
  203. }
  204.  
  205. private void txtAddPlayer_TextChanged(object sender, EventArgs e)
  206. {
  207. cmdHandler.checkCommand("!join", txtAddPlayer.Text);
  208. sendMsg(cmdHandler.getOutputMessage);
  209. }
  210.  
  211. private void txtAddPlayer_KeyPress(object sender, KeyPressEventArgs e)
  212. {
  213. if (e.KeyChar == (char)Keys.Enter)
  214. {
  215. cmdHandler.checkCommand("!join " + txtAddPlayer.Text, userName);
  216. sendMsg(cmdHandler.getOutputMessage);
  217. txtAddPlayer.Text = "";
  218. }
  219. }
  220.  
  221. private void txtstartkoth_Click(object sender, EventArgs e)
  222. {
  223. if (!cmdHandler.isKOTHRunning())
  224. {
  225. cmdHandler.checkCommand("!startkoth 2 3 false true", userName);
  226. sendMsg(cmdHandler.getOutputMessage);
  227. }
  228. }
  229.  
  230. private void btnExit_Click(object sender, EventArgs e)
  231. {
  232. Environment.Exit(Environment.ExitCode);
  233. }
  234.  
  235. private void btnExit_MouseEnter_1(object sender, EventArgs e)
  236. {
  237. btnExit.BackgroundImage = Tournament_Bot.Properties.Resources.btnExit_hover;
  238. }
  239.  
  240. private void btnExit_MouseLeave_1(object sender, EventArgs e)
  241. {
  242. btnExit.BackgroundImage = Tournament_Bot.Properties.Resources.btnExit1;
  243. }
  244.  
  245. private void btnWhisper_Click(object sender, EventArgs e)
  246. {
  247. //TODO - whisper players
  248. if (cmbAmount.SelectedIndex < 0 || cmbAmount.SelectedIndex > 9)
  249. {
  250. lblError.Visible = true;
  251. lblError.Text = "*Invalid amount selection!";
  252. }
  253. else if (txtMessage.Text.Length < 5)
  254. {
  255. lblError.Visible = true;
  256. lblError.Text = "*Message must not be empty!";
  257. }
  258. else {
  259. lblError.Visible = false;
  260. whisperCooldown.Enabled = true;
  261. whisperCooldown.Start();
  262. btnWhisper.Enabled = false;
  263. //Send out whispers
  264. int noToSend = cmbAmount.SelectedIndex + 1;
  265. List<String> queueList = cmdHandler.getQueue();
  266. for (int x = 0; x < noToSend; x++)
  267. {
  268. sendWhisper(queueList[x], txtMessage.Text);
  269. }
  270.  
  271. }
  272. }
  273.  
  274. private void whisperCooldown_Tick(object sender, EventArgs e)
  275. {
  276. canWhisper = true;
  277. btnWhisper.Enabled = true;
  278. }
  279. }
  280. class CommandSpamUser
  281. {
  282. public string username;
  283. public DateTime timeOfMessage;
  284. }
  285.  
  286. class LinkUserControl
  287. {
  288. public string username;
  289. public int amount;
  290. }
  291. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement