Example #1
0
        /// <summary>
        /// This is used to scan each message for less important things.
        /// Mostly used for shit posting, but also does useful things like nag users
        /// to use more up to date tools, or automatically answer some simple questions.
        /// </summary>
        /// <param name="message">Message that got us here</param>
        /// <returns></returns>
        internal async Task Listen(SocketMessage message)
        {
            if (message.Content.StartsWith("BOT_KEY-A2F3D6"))
            {
                await message.DeleteAsync();

                var msgSplit = message.Content.Split('|');

                /*msgSplit Layout
                 * 0 - BotKey to get here
                 * 1 - Discord user
                 * 2 - Test type
                 * 3 - Workshop URL
                 * 4 - Map images
                 */

                var splitUser = msgSplit[1].Split('#');

                try
                {
                    //Try to tag
                    await message.Channel.SendMessageAsync($"New Playtest Request Submitted by {_client.GetUser(splitUser[0], splitUser[1]).Mention}, check it out!");
                }
                catch
                {
                    //Can't tag
                    await message.Channel.SendMessageAsync($"New Playtest Request Submitted by {msgSplit[1]}, check it out!");
                }
                await _wsItem.HandleWorkshopEmbeds(message, msgSplit[4], msgSplit[2]);

                return;
            }

            //If the message is from a bot, dont process shitposts
            if (message.Author.IsBot)
            {
                return;
            }

            //Is a shit post.
            if (CanShitPost())
            {
                if (message.Content.StartsWith("I'm", StringComparison.OrdinalIgnoreCase) && message.Content.Length > 5)
                {
                    //20% chance to shitpost.
                    if (_random.Next(5) != 1)
                    {
                        return;
                    }

                    await message.Channel.SendMessageAsync($"Hi {message.Content.Substring(3).Trim()}, I'm BotHATTwaffle.");

                    _canShitPost = DateTime.Now.AddMinutes(_dataService.ShitPostDelay);
                    await DataBaseUtil.AddShitpostAsync("Dad Joke", message);

                    return;
                }

                if (message.Content.Contains(":KMS:") || message.Content.Contains(":ShootMyself:") || message.Content.Contains(":HangMe:"))
                {
                    var builder = new EmbedBuilder()
                    {
                        ThumbnailUrl = "https://content.tophattwaffle.com/BotHATTwaffle/doit.jpg",
                    };
                    await message.Channel.SendMessageAsync("", false, builder);

                    _canShitPost = DateTime.Now.AddMinutes(_dataService.ShitPostDelay);
                    await DataBaseUtil.AddShitpostAsync("KMS", message);

                    return;
                }

                if (message.Content.ToLower().Contains("who is daddy") || message.Content.ToLower().Contains("who is tophattwaffle"))
                {
                    await message.Channel.SendMessageAsync("TopHATTwaffle my daddy.");

                    _canShitPost = DateTime.Now.AddMinutes(_dataService.ShitPostDelay);
                    await DataBaseUtil.AddShitpostAsync("Daddy", message);

                    return;
                }

                if (message.Content.ToLower().Contains("sudo make me a sandwich"))
                {
                    await message.Channel.SendMessageAsync("ok.");

                    _canShitPost = DateTime.Now.AddMinutes(_dataService.ShitPostDelay);
                    await DataBaseUtil.AddShitpostAsync("Sandwich", message);

                    return;
                }

                if (message.Content.ToLower().Contains("execute order 66"))
                {
                    await message.Channel.SendMessageAsync("Yes my lord.");

                    await message.Author.SendMessageAsync("Master Skywalker, there are too many of them. What are we going to do?");

                    _canShitPost = DateTime.Now.AddMinutes(_dataService.ShitPostDelay);

                    await DataBaseUtil.AddShitpostAsync("Order 66", message);

                    return;
                }

                if (_dataService.VbEavesDrop.Any(s => message.Content.ToLower().Contains(s)))
                {
                    await VB(message);

                    _canShitPost = DateTime.Now.AddMinutes(_dataService.ShitPostDelay);
                    return;
                }
            }

            //Is a shit post.
            if (message.Content.Equals("^") && _dataService.ShitpostAgreeReplies.Any() &&
                (_dataService.ShitpostAgreeUserIds.Contains(message.Author.Id) ||
                 ((SocketGuildUser)message.Author).Roles.Contains(_dataService.PatreonsRole) ||
                 ((SocketGuildUser)message.Author).Roles.Contains(_dataService.ModRole)))
            {
                await message.Channel.SendMessageAsync(
                    _dataService.ShitpostAgreeReplies.ElementAt(_random.Next(0, _dataService.ShitpostAgreeReplies.Count)));

                await DataBaseUtil.AddShitpostAsync("^", message);

                return;
            }

            if (_dataService.PakRatEavesDrop.Any(s => message.Content.ToLower().Contains(s)))
            {
                await PakRat(message);

                return;
            }

            if (_dataService.HowToPackEavesDrop.Any(s => message.Content.ToLower().Contains(s)))
            {
                await HowToPack(message);

                return;
            }

            if (CanShitPost())
            {
                if (_dataService.CarveEavesDrop.Any(s => message.Content.ToLower().Contains(s)))
                {
                    await Carve(message);

                    _canShitPost = DateTime.Now.AddMinutes(_dataService.ShitPostDelay);
                    return;
                }
            }

            if (_dataService.PropperEavesDrop.Any(s => message.Content.ToLower().Contains(s)))
            {
                await Propper(message);

                return;
            }

            await _wsItem.HandleWorkshopEmbeds(message);
        }
        public async Task PublicTestAnnounceAsync(string serverCode = null)
        {
            Server server = null;

            if (!_playtesting.CanReserve)
            {
                await ReplyAsync(
                    $"```Servers cannot be reserved at this time." +
                    $"\nServer reservation is blocked 1 hour before a scheudled test, and resumes once the calendar event has passed.```");

                return;
            }

            if (serverCode == null)
            {
                //Find the server that the user has reserved
                UserData user = null;

                foreach (UserData u in _playtesting.UserData)
                {
                    if (u.User == Context.Message.Author)
                    {
                        user   = u;
                        server = u.ReservedServer;
                    }
                }
            }
            else
            {
                server = await _dataService.GetServer(serverCode);
            }

            //Server found, process command
            if (server != null)
            {
                string reply = await _dataService.RconCommand("host_map", server);

                reply = reply.Substring(14, reply.IndexOf(".bsp", StringComparison.Ordinal) - 14);
                Embed wsEmbed = null;

                string[] result = reply.Split('/');

                //If larger than 1, we are a workshop map.
                if (result.Length == 3)
                {
                    reply   = result[2];
                    wsEmbed = await _wsItem.HandleWorkshopEmbeds(null, null, null, result[1]);
                }

                await _dataService.TestingChannel.SendMessageAsync($"Hey {_dataService.CommunityTesterRole.Mention}!\n\n {Context.User.Mention} " +
                                                                   $"needs players to help test `{reply}`\n\nYou can join using: `connect {server.address}`", false, wsEmbed);
            }

            //No reservation found
            else
            {
                var authBuilder = new EmbedAuthorBuilder()
                {
                    Name    = $"Hey there {Context.Message.Author}!",
                    IconUrl = Context.Message.Author.GetAvatarUrl(),
                };

                var builder = new EmbedBuilder()
                {
                    Author       = authBuilder,
                    ThumbnailUrl = "https://www.tophattwaffle.com/wp-content/uploads/2017/11/1024_png-300x300.png",
                    Color        = new Color(243, 128, 72),

                    Description = $"I was unable to find a server reservation for you. You'll need to reserve a server before you can send commands." +
                                  $" A server can be reserved by using `>PublicServer [serverPrefix]`. Using just `>PublicServer` will display all the servers you can use."
                };
                await ReplyAsync("", false, builder);
            }

            await DataBaseUtil.AddCommandAsync("PublicAnnounce", Context);
        }