Advertisement
Guest User

Untitled

a guest
May 7th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.04 KB | None | 0 0
  1. using System;
  2. using System.ComponentModel.DataAnnotations;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Crap;
  6. using Discord;
  7. using Discord.WebSocket;
  8. using DiscordPleaseStopSendingMessages.Properties;
  9. using Microsoft.EntityFrameworkCore;
  10. using ConTabs;
  11. namespace DiscordPleaseStopSendingMessages
  12. {
  13. class Program
  14. {
  15.  
  16.  
  17. public static void Main(string[] args)
  18. {
  19. MainAlternative().GetAwaiter().GetResult();
  20.  
  21. }
  22.  
  23. static DiscordSocketClient client;
  24. public static async Task MainAlternative()
  25. {
  26. client = new DiscordSocketClient();
  27. client.Log += Log;
  28. client.MessageReceived += MessageReceived;
  29.  
  30. string token = Resources.Token;
  31.  
  32.  
  33. await client.LoginAsync(TokenType.Bot, token);
  34. await client.StartAsync();
  35.  
  36.  
  37. await Task.Delay(-1);
  38.  
  39. }
  40.  
  41. static async Task MessageReceived(SocketMessage message)
  42. {
  43.  
  44. if (!message.Channel.Name.ToLower().Contains("music"))
  45. {
  46. if (message.Content.StartsWith("?"))
  47. {
  48. if (message.Content.ToLower().StartsWith("?mostautistic"))
  49. {
  50. await Log("Sending leaderboard");
  51. await SendLeaderboard(message);
  52. return;
  53. }
  54. if (message.Content.ToLower().StartsWith("?update"))
  55. {
  56. using (var db = new UsersContext())
  57. {
  58. await SetHighScore(db);
  59. }
  60. return;
  61. }
  62. if (message.Content.ToLower().StartsWith("?/kick"))
  63. {
  64. if (message.MentionedUsers.Count != 0)
  65. {
  66. await PuntUser(message.MentionedUsers.First() as SocketGuildUser);
  67. }
  68. return;
  69. }
  70.  
  71. await Log(new LogMessage(LogSeverity.Info, "Spam", "New spam detected"));
  72. using (var db = new UsersContext())
  73. {
  74.  
  75. var actualUser = await db.Users
  76. .Where(s=>s.User == (decimal)message.Author.Id)
  77. .FirstOrDefaultAsync(s => s.User == message.Author.Id);
  78.  
  79. if (actualUser == null)
  80. {
  81. await Log(new LogMessage(LogSeverity.Info, "Spam",
  82. $"{message.Author.Username} is a new offender."));
  83. db.Users.Add(new MyUser(message.Author.Id, 1) {Username = message.Author.Username});
  84. await message.Channel.SendMessageAsync(
  85. $"{message.Author.Mention}, please use the music-commands channel for music commands. This is the first time you have made this mistake.");
  86. }
  87. else
  88. {
  89. actualUser.Count += 1;
  90. await Log(new LogMessage(LogSeverity.Info, "Spam",
  91. $"{message.Author.Username} is a repeat offender ${actualUser.Count} times."));
  92. await message.Channel.SendMessageAsync(
  93. $"{message.Author.Mention}, please use the music-commands channel for music commands. You have made this mistake {actualUser.Count } times.");
  94. }
  95. await PuntUser(message);
  96.  
  97. await SetHighScore(db);
  98.  
  99. await db.SaveChangesAsync();
  100. }
  101. }
  102. }
  103.  
  104. }
  105.  
  106. private static async Task PuntUser(SocketMessage message)
  107. {
  108. var chanel = message.Channel as SocketGuildChannel;
  109. var guild = chanel.Guild;
  110. var puntChanel = await guild.CreateVoiceChannelAsync("Punt");
  111. var guildUser = message.Author as SocketGuildUser;
  112. await guildUser.ModifyAsync((x) => { x.Channel = puntChanel; });
  113. await puntChanel.DeleteAsync();
  114. }
  115.  
  116. private static async Task PuntUser(SocketGuildUser user)
  117. {
  118. var guild = user.Guild;
  119. var puntChanel = await guild.CreateVoiceChannelAsync("Punt");
  120. await user.ModifyAsync((x) => { x.Channel = puntChanel; });
  121. await puntChanel.DeleteAsync();
  122. }
  123.  
  124. private static async Task SendLeaderboard(SocketMessage message)
  125. {
  126. using (var db = new UsersContext())
  127. {
  128.  
  129. var topFive = await db.Users
  130. .OrderByDescending(i => i.Count)
  131. .Take(5)
  132. .ToArrayAsync();
  133. var table = Table<MyUser>.Create(topFive);
  134. table.Columns["UserDatabaseId"].Hide = true;
  135. table.Columns["User"].Hide = true;
  136. table.Columns.MoveColumn("Username",0);
  137.  
  138. Console.WriteLine(table.ToString());
  139. await message.Channel.SendMessageAsync("```\n" + table.ToString() + "\n```");
  140.  
  141. }
  142.  
  143. }
  144.  
  145. private static async Task SetHighScore(UsersContext db)
  146. {
  147. MyUser highestUser = await db.Users
  148. .OrderByDescending(i => i.Count)
  149. .FirstOrDefaultAsync();
  150. if (highestUser != null)
  151. {
  152. await client.SetGameAsync($"{highestUser.Username} : {highestUser.Count}");
  153. }
  154. }
  155.  
  156. static Task Log(LogMessage log)
  157. {
  158. Console.WriteLine(log);
  159. return Task.CompletedTask;
  160. }
  161.  
  162. static Task Log(string content, string title = "Spam")
  163. {
  164. return Log(new LogMessage(LogSeverity.Info, title, content));
  165. }
  166.  
  167. }
  168.  
  169.  
  170. }
  171.  
  172. namespace Crap
  173. {
  174. public class UsersContext : DbContext
  175. {
  176.  
  177. public UsersContext()
  178. {
  179.  
  180. }
  181.  
  182. protected override void OnConfiguring(DbContextOptionsBuilder builder)
  183. {
  184. string remoteUser = Resources.remoteUser;
  185. string remotePass = Resources.remotePass;
  186.  
  187. builder.UseMySQL(
  188. $@"Server=bot.nate601.me;Database=complaintDatabase;Uid={remoteUser};Pwd={remotePass};");
  189. }
  190.  
  191.  
  192. public DbSet<MyUser> Users { get; set; }
  193.  
  194. }
  195.  
  196. public class MyUser
  197. {
  198. public MyUser(decimal user, int count)
  199. {
  200. User = user;
  201. Count = count;
  202. }
  203.  
  204. public MyUser()
  205. {
  206.  
  207. }
  208. [Key]
  209. public int UserDatabaseId { get; set; }
  210. public decimal User { get; set; }
  211. public int Count { get; set; }
  212. public string Username { get; set; }
  213. }
  214. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement