Advertisement
Guest User

Untitled

a guest
Dec 4th, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.10 KB | None | 0 0
  1. <?php
  2. class VariableClass {
  3. #region SETTINGS
  4. public $chan = "#quaintshanty";
  5. public $server = "irc.twitch.tv";
  6. public $port = 6667;
  7. public $nick = "quaintbot";
  8. public $pass = ""; //http://tmi.twitchapps.com <-- Go there for your oauth key.
  9. #end
  10. public $socket;
  11. #region VARIABLES
  12. //Database variables
  13. public $db;
  14. public $storedVariables;
  15. /*Default storedVariables
  16. {"adminUsers" : ["quaintshanty"], "ignoredUsers" : ["moobot", "nightbot", "shantypantsbot"], "welcomeToggle" : false, "welcomeMessage" : "Hello, ", "goodbyeToggle" : false, "goodbyeMessage" : "Bye, ", "setCommandLimitTime" : 60, "commandMaxLimit" : 4, "setPointsTime" : 900, "pointsModifier" : 2}
  17. */
  18. //User lists
  19. public $users = array();
  20. public $adminUsers;
  21. public $modUsers;
  22. public $ignoredUsers;
  23. //Command variables
  24. public $welcomeToggle;
  25. public $welcomeMessage;
  26. public $goodbyeToggle;
  27. public $goodbyeMessage;
  28. public $setCommandLimitTime;
  29. public $commandLimitTimer;
  30. public $commandLimit = 0;
  31. public $commandMaxLimit;
  32. //Points system variables
  33. public $setPointsTime;
  34. public $pointsTimer;
  35. public $pointsModifier;
  36.  
  37. //Raffle
  38. public $raffleEntries = array();
  39. #end
  40. }
  41. // Prevent PHP from stopping the script after 30 sec
  42. set_time_limit(0);
  43. // Set the timezone
  44. date_default_timezone_set('America/New_York'); //ENTER YOUR TIMEZONE HERE. FIND AVAILABLE TIMEZONES HERE: http://www.php.net/manual/en/timezones.php
  45. #region VC Vars
  46. $VC = new VariableClass();
  47. $VC->socket = fsockopen($VC->server, $VC->port);
  48. fputs($VC->socket,"PASS $VC->pass\n");
  49. fputs($VC->socket,"NICK $VC->nick\n");
  50. fputs($VC->socket,"JOIN " . $VC->chan . "\n");
  51. $VC->db = new SQLite3('IRCBotDB');
  52. $VC->storedVariables = json_decode($VC->db->querySingle("SELECT variables FROM stored_variables"), true);
  53. $VC->adminUsers = $VC->storedVariables['adminUsers'];
  54. $VC->ignoredUsers = $VC->storedVariables['ignoredUsers'];
  55. $VC->welcomeToggle = $VC->storedVariables['welcomeToggle'];
  56. $VC->welcomeMessage = $VC->storedVariables['welcomeMessage'];
  57. $VC->goodbyeToggle = $VC->storedVariables['goodbyeToggle'];
  58. $VC->goodbyeMessage = $VC->storedVariables['goodbyeMessage'];
  59. $VC->setCommandLimitTime = $VC->storedVariables['setCommandLimitTime'];
  60. $VC->commandLimitTimer = $VC->setCommandLimitTime;
  61. $VC->commandMaxLimit = $VC->storedVariables['commandMaxLimit'];
  62. $VC->setPointsTime = $VC->storedVariables['setPointsTime'];
  63. $VC->pointsTimer = $VC->setPointsTime;
  64. $VC->pointsModifier = $VC->storedVariables['pointsModifier'];
  65. #end
  66. function StripTrim($strip, $trim){
  67. $strippedString = (string)stripcslashes(trim($strip, $trim));
  68. $strippedString = preg_replace('~[.[:cntrl:][:space:]]~', '', $strippedString);
  69. return $strippedString;
  70. }
  71. function BasicChat($socket, $chan, $text){
  72. fputs($socket, "PRIVMSG ". $chan . " :" . $text . " \n");
  73. }
  74. function UserCommands($users, $sender, $socket, $chan, $message, $rawcmd, $args){
  75. //Verify that there are arguments.
  76. if(!is_null($args)){
  77. switch($rawcmd[1]) {
  78. case "!sayit" :
  79. fputs($socket, "PRIVMSG " . $chan . " :" . $args . "\n");
  80. break;
  81. case "!md5" :
  82. fputs($socket, "PRIVMSG " . $chan . " :MD5 " . md5($args) . "\n");
  83. break;
  84.  
  85. case "!quote" :
  86. if(count($args)>1){
  87. fputs($socket, "PRIVMSG " . $chan . " :Quote system coming soon.\n");
  88. }
  89. else {
  90.  
  91. }
  92. break;
  93. }
  94. }
  95. else {
  96. switch($rawcmd[1]) {
  97. case "!points" :
  98. for($i=0; $i < count($users); $i++){
  99. if($sender == $users[$i]['name']){
  100. fputs($socket, "PRIVMSG " . $chan . " :" . $sender . ", you have " . $users[$i]['points'] . " points.\n");
  101. break;
  102. }
  103. }
  104. break;
  105.  
  106. case "?points" :
  107. fputs($socket, "PRIVMSG " . $chan . " :With points, you can use them to play games (coming soon) and enter in giveaways (coming soon), or become chosen for special events with the broadcaster. The more points, the better the rewards!\n");
  108. break;
  109. case "!timeHere" :
  110. for($i=0; $i < count($users); $i++){
  111. if($sender == $users[$i]['name']){
  112. fputs($socket, "PRIVMSG " . $chan . " :" . $sender . ", you have been here for " . secondsToTime(round((microtime(true) - $users[$i]['time_joined']))) . ".\n");
  113. break;
  114. }
  115. }
  116. }
  117. }
  118. }
  119. function secondsToTime($seconds) {
  120. $dtF = new DateTime("@0");
  121. $dtT = new DateTime("@$seconds");
  122. return $dtF->diff($dtT)->format('%a days, %h hours, %i minutes and %s seconds');
  123. }
  124. function SaveVariable($VC, $db){
  125. $storedVariablesJSONed = json_encode($VC->storedVariables);
  126. $db->query("UPDATE stored_variables SET variables = '{$storedVariablesJSONed}'");
  127. }
  128. function AdminCommands($message, $rawcmd, $args, $VC){
  129. //Verify that there are arguments.
  130. if(!is_null($args)){
  131. switch($rawcmd[1]) {
  132. case "!mod" :
  133. if(!in_array(StripTrim($args, ":"), $VC->adminUsers)) {
  134. $VC->adminUsers[] = StripTrim($args, ":");
  135. $VC->storedVariables['adminUsers'][] = StripTrim($args, ":");;
  136. SaveVariable($VC, $VC->db);
  137. }
  138. }
  139. }
  140. else {
  141. switch($rawcmd[1]) {
  142. case "!users" :
  143. var_dump($VC->users);
  144. break;
  145. }
  146. }
  147. }
  148. function AddPointsToAll($users, $pointsModifier, $db) {
  149. for($i = 0; $i < count($users); $i++){
  150. $users[$i]['points'] += $pointsModifier;
  151. $db->query("UPDATE users SET points = '{$users[$i]['points']}' WHERE name = '{$users[$i]['name']}'");
  152. }
  153.  
  154. return $users;
  155. }
  156. // Set timout to 1 second
  157. if (!stream_set_timeout($VC->socket, 1)) die("Could not set timeout");
  158. while(1) {
  159. //points timer
  160. if($VC->pointsTimer > 0) {
  161. $VC->pointsTimer--;
  162. }
  163. else {
  164. $VC->pointsTimer = $VC->setPointsTime;
  165. $VC->users = AddPointsToAll($VC->users, $VC->pointsModifier, $VC->db);
  166. }
  167.  
  168. //commands limit
  169. if($VC->commandLimitTimer > 0) {
  170. $VC->commandLimitTimer--;
  171. }
  172. else {
  173. $VC->commandLimitTimer = $VC->setCommandLimitTime;
  174. $VC->commandLimit = 0;
  175. }
  176.  
  177. while($data = fgets($VC->socket)) {
  178. flush();
  179. //Separate the incoming data by spaces and add them to the the message variable as a list.
  180. $message = explode(' ', $data);
  181. //If the server sends us a ping, pong those suckers back!
  182. if($message[0] == "PING"){
  183. fputs($VC->socket, "PONG " . $message[1] . "\n");
  184. }
  185. else {
  186. echo $data;
  187. }
  188. if($message[1] == "353"){
  189. //Adds all current users to the user list.
  190. for($i = 5; $i < count($message); $i++){
  191. $strippedUser = StripTrim($message[$i], ":"); //Trim is needed for the first user since it starts with :, sadly.
  192. if(!in_array($strippedUser, $VC->ignoredUsers) && !in_array($strippedUser, $VC->users)){
  193. $db_name = $VC->db->querySingle("SELECT name FROM users WHERE name = '" . $strippedUser . "'", false);
  194.  
  195. if($db_name) {
  196. $db_points = $VC->db->querySingle("SELECT points FROM users WHERE name = '" . $strippedUser . "'", false);
  197. $VC->users[] = array(
  198. 'name' => $db_name,
  199. 'points' => $db_points,
  200. 'time_joined' => microtime(true)
  201. ); //Add them to the users list.
  202. } else {
  203. $VC->users[] = array(
  204. 'name' => $strippedUser,
  205. 'points' => 0,
  206. 'time_joined' => microtime(true)
  207. ); //Add them to the users list without loading from the DB.
  208. $VC->db->query("INSERT INTO users (name, points) VALUES ('" . $strippedUser . "', 0)"); //Add user to DB
  209. }
  210. }
  211. }
  212. }
  213. elseif($message[1] == "JOIN"){
  214. $temp = explode('!', (string)$message[0]);
  215. $joinedUser = StripTrim($temp[0], ":");
  216. if(!in_array($joinedUser, $VC->ignoredUsers) && !in_array($joinedUser, $VC->users)){
  217. $db_name = $VC->db->querySingle("SELECT name FROM users WHERE name = '" . $joinedUser . "'", false);
  218.  
  219. if($db_name) {
  220. $db_points = $VC->db->querySingle("SELECT points FROM users WHERE name = '" . $joinedUser . "'", false);
  221. $VC->users[] = array(
  222. 'name' => $db_name,
  223. 'points' => $db_points,
  224. 'time_joined' => microtime(true)
  225. ); //Add them to the users list.
  226. } else {
  227. $VC->users[] = array(
  228. 'name' => $joinedUser,
  229. 'points' => 0,
  230. 'time_joined' => microtime(true)
  231. ); //Add them to the users list without loading from the DB.
  232. $VC->db->query("INSERT INTO users (name, points) VALUES ('" . $joinedUser . "', 0)"); //Add user to DB
  233. }
  234. if($VC->welcomeToggle){
  235. BasicChat($VC->socket, $VC->chan, $VC->welcomeMessage . $joinedUser . "!");
  236. }
  237. }
  238. }
  239. elseif($message[1] == "PART"){
  240. $temp = explode('!', (string)$message[0]);
  241. $partedUser = StripTrim($temp[0], ":");
  242.  
  243. for($i=0; $i < count($VC->users); $i++){
  244. if($partedUser == $VC->users[$i]['name']){
  245. unset($VC->users[$i]['name']); //Remove them from the users list.
  246. $VC->users = array_values($VC->users);
  247. unset($VC->users[$i]['points']);
  248. $VC->users = array_values($VC->users);
  249. unset($VC->users[$i]['time_joined']);
  250. $VC->users = array_values($VC->users);
  251. unset($VC->users[$i]);
  252. $VC->users = array_values($VC->users);
  253. break;
  254. }
  255. }
  256. if($VC->goodbyeToggle){
  257. if(!in_array($partedUser, $VC->ignoredUsers)){
  258. BasicChat($VC->socket, $VC->chan, $VC->goodbyeMessage . $partedUser . "!");
  259. }
  260. }
  261. }
  262. elseif($message[1] == "MODE"){
  263. // Add mods
  264. }
  265. elseif($message[1] == "PRIVMSG"){
  266. echo "Entered...";
  267. if($VC->users!=NULL && count($VC->users)>0) {
  268. $temp = explode('!', (string)$message[0]);
  269. $sender = StripTrim($temp[0], ":");
  270.  
  271. $rawcmd = explode(':', $message[3]); //Get the raw command from the message.
  272.  
  273. //Get all arguments after the raw command.
  274. $args = NULL;
  275. if(count($message) > 4){
  276. for($i = 4; $i < count($message); $i++){
  277. $args .= $message[$i] . ' ';
  278. }
  279. }
  280.  
  281. $rawcmd = preg_replace('~[.[:cntrl:][:space:]]~', '', $rawcmd);
  282.  
  283. if(substr($rawcmd[1], 0, 1) == "!" && $VC->commandLimit < ($VC->commandMaxLimit + 1))
  284. $VC->commandLimit++;
  285. echo "Commanding...";
  286. echo $rawcmd[1];
  287. if($rawcmd[1] == "!raffle") {
  288. echo "Raffling...";
  289. for($i=0; $i < count($users); $i++){
  290. if($sender == $VC->users[$i]['name']){
  291. echo $i . "PLACE...";
  292. if($VC->users[$i]['points'] >= 5){
  293. echo "Success";
  294. if(!in_array($VC->users[$i]['name'], $VC->raffle))
  295. {
  296. $VC->users[$i]['points'] -= 5;
  297. fputs($$VC->socket, "PRIVMSG " . $VC->chan . " :You are entered in to the raffle!\n");
  298. }
  299. else
  300. {
  301. fputs($$VC->socket, "PRIVMSG " . $VC->chan . " :You are already entered!\n");
  302. }
  303. }
  304. else {
  305. echo "Fail";
  306. fputs($VC->socket, "PRIVMSG " . $VC->chan . " :You need 5 or more points to enter the raffle.\n");
  307. }
  308. break;
  309. }
  310. }
  311. }
  312. else
  313. {
  314. //Make it so users can't spam commands.
  315. if($VC->commandLimit <= $VC->commandMaxLimit)
  316. UserCommands($VC->users, $sender, $VC->socket, $VC->chan, $message, $rawcmd, $args);
  317.  
  318. //replace this will array_search by assigning an admin variable in the future.
  319. if(in_array($sender, $VC->adminUsers)){
  320. AdminCommands($message, $rawcmd, $args, $VC);
  321. }
  322. }
  323. }
  324. }
  325. }
  326.  
  327. if (!feof($VC->socket)) {
  328. continue;
  329. }
  330.  
  331. sleep(1);
  332. }
  333. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement