public static async Task MessageCreatedEvent(DiscordClient c, MessageCreateEventArgs a)
        {
            if (a.Message.Content.StartsWith(Settings.Default.commandChar + "quit", StringComparison.OrdinalIgnoreCase))
            {
                await CheckForQuitEvent(a).ConfigureAwait(false);
            }
            else if (a.Message.Content.StartsWith(Settings.Default.commandChar))
            {
                await CheckForCustomCommand(a).ConfigureAwait(false);
            }
            else if (a.Message.Content.StartsWith(SekiMain.BotName + ",", StringComparison.OrdinalIgnoreCase) || a.Message.Content.EndsWith(SekiMain.BotName, StringComparison.OrdinalIgnoreCase))
            {
                await CheckForCleverBot(a).ConfigureAwait(false);
            }

            await Waifunator(a.Message).ConfigureAwait(false);

            // Update "last seen" for user that sent the message
            if (a.Guild.Members.TryGetValue(a.Message.Author.Id, out DiscordMember member))
            {
                string username = member.DisplayName;
                Seen.MarkUserSeen(username);

                // Ping users, leave this last cause it's sloooooooow
                await PingUser.SendPings(a).ConfigureAwait(false);
            }
        }
Exemple #2
0
        private static async Task MainAsync(string[] args)
        {
            string token        = args[0];
            bool   quit         = false;
            bool   tryReconnect = false;
            string botName      = string.Empty;

            //TODO: This should be fixed once .net Core 3.0 is released

            /*if (Settings.Default.UpgradeNeeded)
             * {
             *  Settings.Default.Upgrade();
             *  Settings.Default.UpgradeNeeded = false;
             *  Settings.Default.Save();
             * }*/

            Console.WriteLine(DateTime.Now.ToString("[HH:mm:ss] ", CultureInfo.CreateSpecificCulture("en-GB")) + "Starting...");

            if (string.IsNullOrWhiteSpace(Settings.Default.apikey))
            {
                string api = string.Empty;
                if (args.Length > 1)
                {
                    api = args[1];
                }
                else
                {
                    Console.WriteLine("Add api key for youtube search (or enter to ignore): ");
                    api = Console.ReadLine();
                }
                if (!string.IsNullOrWhiteSpace(api))
                {
                    Settings.Default.apikey = api;
                    //TODO: This should be fixed once .net Core 3.0 is released
                    //Settings.Default.Save();
                }
            }
            if (string.IsNullOrWhiteSpace(Settings.Default.CleverbotAPI))
            {
                string api = string.Empty;
                if (args.Length > 2)
                {
                    api = args[2];
                }
                else
                {
                    Console.WriteLine("Add api key for Cleverbot (or enter to ignore): ");
                    api = Console.ReadLine();
                }
                if (!string.IsNullOrWhiteSpace(api))
                {
                    Settings.Default.CleverbotAPI = api;
                    //TODO: This should be fixed once .net Core 3.0 is released
                    //Settings.Default.Save();
                }
            }

            GetDiscordClient = new DiscordClient(new DiscordConfiguration
            {
                Token     = token,
                TokenType = TokenType.Bot
            });

            GetDiscordClient.SocketErrored += async a =>
            {
                tryReconnect = true;
                await Console.Out.WriteLineAsync(DateTime.Now.ToString("[HH:mm:ss] ", CultureInfo.CreateSpecificCulture("en-GB")) + "Error: " + a.Exception.Message).ConfigureAwait(false);
            };

            GetDiscordClient.Ready += async a =>
            {
                await Console.Out.WriteLineAsync(DateTime.Now.ToString("[HH:mm:ss] ", CultureInfo.CreateSpecificCulture("en-GB")) + "Ready!").ConfigureAwait(false);

                tryReconnect = false;
            };

            GetDiscordClient.UnknownEvent += async unk =>
            {
                await Console.Out.WriteLineAsync(DateTime.Now.ToString("[HH:mm:ss] ", CultureInfo.CreateSpecificCulture("en-GB")) + "Unknown Event: " + unk.EventName).ConfigureAwait(false);
            };

            GetDiscordClient.MessageCreated += async e =>
            {
                if (e.Message.Content.StartsWith("!quit", StringComparison.OrdinalIgnoreCase))
                {
                    DiscordMember author = await e.Guild.GetMemberAsync(e.Author.Id).ConfigureAwait(false);

                    bool isBotAdmin = Useful.MemberIsBotOperator(author);

                    if (author.IsOwner || isBotAdmin)
                    {
                        quit = true;
                        Console.WriteLine(DateTime.Now.ToString("[HH:mm:ss] ", CultureInfo.CreateSpecificCulture("en-GB")) + "Quitting...");
                    }
                }

                //CustomCommands
                else if (e.Message.Content.StartsWith('!'))
                {
                    string   arguments = string.Empty;
                    string[] split     = e.Message.Content.Split(new char[] { ' ' }, 2);
                    string   command   = split[0];
                    if (split.Length > 1)
                    {
                        arguments = split[1];
                    }

                    string        nick   = ((DiscordMember)e.Message.Author).DisplayName;
                    List <string> listU  = Useful.GetOnlineNames(e.Channel.Guild);
                    string        result = CustomCommand.UseCustomCommand(command.TrimStart('!'), arguments, nick, listU);
                    if (!string.IsNullOrEmpty(result))
                    {
                        await e.Message.RespondAsync(result).ConfigureAwait(false);
                    }
                }

                //Bot Talk and Cleverbot
                else if (e.Message.Content.StartsWith(botName + ",", StringComparison.OrdinalIgnoreCase))
                {
                    if (e.Message.Content.EndsWith('?'))
                    {
                    }
                    else
                    {
                        await Think(e, botName).ConfigureAwait(false);
                    }
                }
                else if (e.Message.Content.EndsWith(botName, StringComparison.OrdinalIgnoreCase))
                {
                    await Think(e, botName).ConfigureAwait(false);
                }

                //waifunator
                if (!string.IsNullOrWhiteSpace(e.Message.Content) && e.Message.Author.Id == Settings.Default.limid) //lims shitty id lul
                {
                    if (e.Message.Content.Contains("wife", StringComparison.OrdinalIgnoreCase))
                    {
                        await e.Message.CreateReactionAsync(DiscordEmoji.FromName(GetDiscordClient, ":regional_indicator_w:")).ConfigureAwait(false);

                        await e.Message.CreateReactionAsync(DiscordEmoji.FromName(GetDiscordClient, ":regional_indicator_a:")).ConfigureAwait(false);

                        await e.Message.CreateReactionAsync(DiscordEmoji.FromName(GetDiscordClient, ":regional_indicator_i:")).ConfigureAwait(false);

                        await e.Message.CreateReactionAsync(DiscordEmoji.FromName(GetDiscordClient, ":regional_indicator_f:")).ConfigureAwait(false);

                        await e.Message.CreateReactionAsync(DiscordEmoji.FromName(GetDiscordClient, ":regional_indicator_u:")).ConfigureAwait(false);
                    }
                }

                //Update "last seen" for user that sent the message
                string username = ((DiscordMember)e.Message.Author).DisplayName.ToLower(CultureInfo.CreateSpecificCulture("en-GB"));
                Seen.MarkUserSeen(username);
                Seen.SaveSeen(Seen.SeenTime);
                //Ping users, leave this last cause it's sloooooooow
                await PingUser.SendPings(e).ConfigureAwait(false);
            };

            //Register the commands defined on SekiCommands.cs

            commands = GetDiscordClient.UseCommandsNext(new CommandsNextConfiguration
            {
                StringPrefix        = "!",
                CaseSensitive       = false,
                EnableMentionPrefix = false
            });

            commands.RegisterCommands <SekiCommands>();

            //Connect to Discord
            await GetDiscordClient.ConnectAsync().ConfigureAwait(false);

            botName = GetDiscordClient.CurrentUser.Username;

            while (!quit)
            {
                if (tryReconnect)
                {
                    try
                    {
                        await GetDiscordClient.DisconnectAsync().ConfigureAwait(false);
                    }
                    finally
                    {
                        Console.WriteLine(DateTime.Now.ToString("[HH:mm:ss] ", CultureInfo.CreateSpecificCulture("en-GB")) + "Attempting to Reconnect...");
                        await GetDiscordClient.ConnectAsync().ConfigureAwait(false);
                    }
                }

                //Wait a bit
                await Task.Delay(10 * 1000).ConfigureAwait(false);
            }

            await GetDiscordClient.DisconnectAsync().ConfigureAwait(false);
        }