Advertisement
Guest User

Untitled

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