Exemple #1
0
        private async Task Client_JoinedGuild(SocketGuild arg)
        {
            Console.WriteLine($"{DateTime.Now} -> Joined guild: {arg.Id}");

            GuildOption go = new GuildOption();
            Options     o  = new Options();

            go.GuildID       = arg.Id;
            go.GuildName     = arg.Name;
            go.OwnerID       = arg.Owner.Id;
            go.Prefix        = "]";
            o.LogChannelID   = 0;
            o.LogEmbeds      = false;
            o.LogAttachments = false;

            go.Options = o;
            if (!GlobalVars.GuildOptions.Any(x => x.GuildID == go.GuildID))
            {
                GlobalVars.GuildOptions.Add(go);
            }

            DBControl.UpdateDB($"INSERT INTO Guilds (GuildID,GuildName,OwnerID,Prefix,LogChannelID,LogEmbeds,LogAttachments) VALUES ({go.GuildID.ToString()}, '{go.GuildName.Replace(@"'","")}',{go.OwnerID.ToString()},'{go.Prefix}',{go.Options.LogChannelID.ToString()}, {(go.Options.LogEmbeds ? 1:0)}, {(go.Options.LogAttachments ? 1:0)});");

            await UpdateActivity();

            await Task.Delay(100);
        }
        public async Task SetPrefix(CommandContext ctx, string prefix)
        {
            // allow admins or bot owners to change the prefix
            if (ctx.Member.PermissionsIn(ctx.Channel).HasPermission(Permissions.Administrator) || Bot.BotOwnerIds.Contains(ctx.User.Id))
            {
                if (Bot.GuildOptions == null)
                {
                    await ctx.RespondAsync("[ERROR] Bot.Prefixes is Empty; Contact an administrator with this error.");

                    return;
                }

                if (!string.IsNullOrEmpty(prefix))
                {
                    var guild = Bot.GuildOptions.Find(x => x.Id == ctx.Guild.Id);
                    if (guild == null)
                    {
                        guild = new GuildOption {
                            Id = ctx.Guild.Id
                        };
                    }

                    guild.Prefix = prefix;
                    DB.Upsert(GuildOption.DBName, GuildOption.TableName, guild);
                    Bot.UpdateGuildOptions();
                }
                await ctx.RespondAsync($"New prefix is now `{Bot.GetPrefix(ctx.Guild)}` 👌");
            }
            else
            {
                await ctx.RespondAsync("Please contact an administrator to change the prefix for this guild");
            }
        }
        public async Task SetChannel(CommandContext ctx, DiscordChannel channel = null)
        {
            if (ctx.Member.PermissionsIn(ctx.Channel).HasPermission(Permissions.Administrator) || Bot.BotOwnerIds.Contains(ctx.User.Id))
            {
                if (channel == null)
                {
                    channel = ctx.Channel;
                }
                if (channel.Type == DSharpPlus.ChannelType.Text)
                {
                    var member = await ctx.Guild.GetMemberAsync(ctx.Client.CurrentUser.Id);

                    //TODO BROKEN, WAIT FOR DSHARPPLUS TO FIX THIS GARBAGE
                    var perm = channel.PermissionsFor(member);
                    var requiredPermissions = new Permissions[] {
                        Permissions.ReadMessageHistory,
                        Permissions.SendMessages,
                        Permissions.AddReactions,
                        Permissions.UseExternalEmojis,
                        Permissions.EmbedLinks,
                        Permissions.AccessChannels,
                    };
                    foreach (var p in requiredPermissions)
                    {
                        if (!perm.HasPermission(p))
                        {
                            await ctx.RespondAsync($"I'm missing some permissions to work there! I need these permissions to work properly\n{string.Join("\n", requiredPermissions.Select(x => x.ToPermissionString()))}");

                            return;
                        }
                    }
                    var guild = Bot.GuildOptions.Find(x => x.Id == ctx.Guild.Id);
                    if (guild == null)
                    {
                        guild = new GuildOption {
                            Id = ctx.Guild.Id
                        };
                    }
                    guild.Channel = channel.Id;
                    try {
                        DB.Upsert(GuildOption.DBName, GuildOption.TableName, guild);
                        Bot.UpdateGuildOptions();
                        await ctx.RespondAsync($"👌 New default channel is now {guild.GetChannel()}");
                    } catch (System.Exception ex) {
                        Logger.Error(ex);
                    }
                }
                else
                {
                    await ctx.RespondAsync("Seems like I can't post messages, or add reactions in that channel!");

                    return;
                }
            }
            else
            {
                await ctx.RespondAsync("This command can only be used by server admins.");
            }
        }
Exemple #4
0
        private async Task OnGuildAvailable(GuildCreateEventArgs e)
        {
            if (e.Guild.Id == Options.Guild)
            {
                Logger.Info("Found options.Guild");
                var channels = await e.Guild.GetChannelsAsync();

                foreach (var channel in channels)
                {
                    if (ImageCache != null && ModerationChannel != null)
                    {
                        break;
                    }
                    if (channel.Id == Options.ModerationChannel)
                    {
                        Logger.Info("Found moderation channel");
                        ModerationChannel = channel;
                        var moderationTarget = new DiscordChannelTarget(ModerationChannel);
                        NLog.LogManager.Configuration.AddRule(NLog.LogLevel.Info, NLog.LogLevel.Fatal, moderationTarget);
                    }
                    if (channel.Id == Options.CacheChannel)
                    {
                        Logger.Info("Found cache channel");
                        ImageCache = channel;
                    }
                }
            }

            if (!GuildOptions.Any(x => x.Id == e.Guild.Id))
            {
                var options = new GuildOption {
                    Id      = e.Guild.Id,
                    Channel = e.Guild.GetDefaultChannel().Id
                };

                DB.Insert(GuildOption.DBName, GuildOption.TableName, options);
                LoadGuildOptions();
            }

            Logger.Info("OnGuildAvailable {0}", e.Guild.Name);
            await Task.Delay(1);
        }
Exemple #5
0
        private void GetSQLData()
        {
            //Load prefix & options from DB
            SqlConnectionStringBuilder sBuilder = new SqlConnectionStringBuilder();

            sBuilder.InitialCatalog = GlobalVars.dbSettings.db;
            sBuilder.UserID         = GlobalVars.dbSettings.username;
            sBuilder.Password       = GlobalVars.dbSettings.password;
            sBuilder.DataSource     = GlobalVars.dbSettings.host + @"\" + GlobalVars.dbSettings.instance + "," + GlobalVars.dbSettings.port;
            SqlConnection conn = new SqlConnection();

            conn.ConnectionString = sBuilder.ConnectionString;


            using (conn)
            {
                conn.Open();

                #region Get Guilds
                SqlCommand    cmd = new SqlCommand($"SELECT * FROM SBGuilds", conn);
                SqlDataReader dr  = cmd.ExecuteReader();

                while (dr.Read())
                {
                    GuildOption go = new GuildOption();

                    go.GuildID         = Convert.ToUInt64(dr.GetValue(0));
                    go.GuildName       = Convert.ToString(dr.GetValue(1));
                    go.OwnerID         = Convert.ToUInt64(dr.GetValue(2));
                    go.Prefix          = Convert.ToString(dr.GetValue(3));
                    go.PunishThreshold = Convert.ToUInt16(dr.GetValue(4));
                    go.MaxReserves     = Convert.ToUInt16(dr.GetValue(5));

                    GlobalVars.GuildOptions.Add(go);
                }
                #endregion

                conn.Close();
                conn.Dispose();
            }
        }
        public async Task SetRole(CommandContext ctx, DiscordRole role)
        {
            // allow admins or bot owners to change the prefix
            if (ctx.Member.PermissionsIn(ctx.Channel).HasPermission(Permissions.Administrator) || Bot.BotOwnerIds.Contains(ctx.User.Id))
            {
                if (Bot.GuildOptions == null)
                {
                    await ctx.RespondAsync("[ERROR] Bot.Prefixes is Empty; Contact an administrator with this error.");

                    return;
                }
                if (role != null)
                {
                    if (!role.IsMentionable)
                    {
                        await ctx.RespondAsync($"@{role.Name} isn't mentionable. Please make sure I can mention the role.");

                        return;
                    }

                    var guild = Bot.GuildOptions.Find(x => x.Id == ctx.Guild.Id);
                    if (guild == null)
                    {
                        guild = new GuildOption {
                            Id = ctx.Guild.Id
                        };
                    }

                    guild.RoleId = role.Id;
                    DB.Upsert(GuildOption.DBName, GuildOption.TableName, guild);

                    Bot.UpdateGuildOptions();
                    await ctx.RespondAsync($"New role is now @{role.Name} 👌\nMake sure the bot can ping this role.");
                }
                else
                {
                    await ctx.RespondAsync($"Removed role 👌");
                }
            }
        }
Exemple #7
0
        private async Task Client_JoinedGuild(SocketGuild arg)
        {
            if (Constants._IGNOREDGUILDS_.Contains(arg.Id))
            {
                return;
            }
            Console.WriteLine($"{DateTime.Now} -> Joined guild: {arg.Id}");

            GuildOption go = new GuildOption();

            go.GuildID         = arg.Id;
            go.GuildName       = arg.Name;
            go.OwnerID         = arg.Owner.Id;
            go.Prefix          = "]";
            go.PunishThreshold = 0;
            go.MaxReserves     = 1;
            GlobalVars.GuildOptions.Add(go);

            DBControl.UpdateDB($"INSERT INTO SBGuilds VALUES ({go.GuildID.ToString()}, '{go.GuildName.Replace(@"'", "_")}',{go.OwnerID.ToString()},'{go.Prefix}', {go.PunishThreshold}, {go.MaxReserves})");

            await UpdateActivity();

            await Task.Delay(100);
        }
Exemple #8
0
        private async Task GetSQLData()
        {
            if (hasLoaded)
            {
                return;
            }

            //Load prefix & options from DB
            SqlConnectionStringBuilder sBuilder = new SqlConnectionStringBuilder();

            sBuilder.InitialCatalog     = dbSettings.db;
            sBuilder.UserID             = dbSettings.username;
            sBuilder.Password           = dbSettings.password;
            sBuilder.DataSource         = dbSettings.host + @"\" + dbSettings.instance + "," + dbSettings.port;
            sBuilder.ConnectTimeout     = 30;
            sBuilder.IntegratedSecurity = false;
            SqlConnection conn = new SqlConnection();

            conn.ConnectionString = sBuilder.ConnectionString;

            using (conn)
            {
                conn.Open();

                #region Get Guilds
                SqlCommand    cmd = new SqlCommand($"SELECT * FROM Guilds", conn);
                SqlDataReader dr  = cmd.ExecuteReader();

                while (dr.Read())
                {
                    GuildOption go = new GuildOption();
                    Options     o  = new Options();

                    go.GuildID       = Convert.ToUInt64(dr.GetValue(0));
                    go.GuildName     = Convert.ToString(dr.GetValue(1));
                    go.OwnerID       = Convert.ToUInt64(dr.GetValue(2));
                    go.Prefix        = Convert.ToString(dr.GetValue(3));
                    o.LogChannelID   = Convert.ToUInt64(dr.GetValue(4));
                    o.LogEmbeds      = Convert.ToBoolean(dr.GetValue(5));
                    o.LogAttachments = Convert.ToBoolean(dr.GetValue(6));

                    go.Options = o;

                    if (!GlobalVars.GuildOptions.Any(x => x.GuildID == go.GuildID))
                    {
                        GlobalVars.GuildOptions.Add(go);
                    }
                }
                dr.Close();
                #endregion

                #region Get Friends
                cmd.CommandText = $"SELECT UserID FROM Friends";
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    var id   = Convert.ToUInt64(dr.GetValue(0));
                    var user = await CustomUserTypereader.GetUserFromID(id, Client.Guilds);

                    if (!GlobalVars.FriendUsers.ContainsKey(id))
                    {
                        GlobalVars.FriendUsers.Add(id, user);
                    }
                }
                dr.Close();
                #endregion

                #region Get Idiots
                cmd.CommandText = $"SELECT UserID FROM Ignores";
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    var id   = Convert.ToUInt64(dr.GetValue(0));
                    var user = await Classes.Commands.CustomUserTypereader.GetUserFromID(id, Client.Guilds);

                    if (!GlobalVars.IgnoredUsers.ContainsKey(id))
                    {
                        GlobalVars.IgnoredUsers.Add(id, user);
                    }
                }
                dr.Close();
                #endregion

                #region Get Emotes
                cmd.CommandText = $"SELECT * FROM Emotes";
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    ApprovedEmote ae = new ApprovedEmote(dr.GetValue(0).ToString(), dr.GetValue(3).ToString(), dr.GetValue(2).ToString(), Convert.ToBoolean(dr.GetValue(4)), dr.GetValue(5).ToString(), Convert.ToBoolean(dr.GetValue(6)));
                    if (!GlobalVars.EmoteList.ContainsKey(ae.EmoteID))
                    {
                        GlobalVars.EmoteList.Add(ae.EmoteID, ae);
                    }
                }
                dr.Close();
                #endregion

                #region Get Bot Owners
                cmd.CommandText = $"SELECT * FROM BotOwners";
                dr = cmd.ExecuteReader();
                List <ulong> ownerList = new List <ulong>();
                while (dr.Read())
                {
                    ownerList.Add(Convert.ToUInt64(dr.GetValue(1)));
                }
                Constants._BOTOWNERS_ = ownerList.ToArray();
                dr.Close();
                #endregion

                #region Get Morty Users
                cmd.CommandText = $"SELECT * FROM mortyUsers";
                dr = cmd.ExecuteReader();
                List <ulong> mortyUsers = new List <ulong>();
                while (dr.Read())
                {
                    mortyUsers.Add(Convert.ToUInt64(dr.GetValue(1)));
                }
                GlobalVars.RegisteredMortyUsers = mortyUsers;
                GlobalVars.MortyTimeouts        = new Dictionary <ulong, bool>();
                GlobalVars.MortyLastUse         = new Dictionary <ulong, DateTime>();
                foreach (ulong u in GlobalVars.RegisteredMortyUsers)
                {
                    GlobalVars.MortyTimeouts.Add(u, false);
                    GlobalVars.MortyLastUse.Add(u, DateTime.MinValue);
                }
                dr.Close();
                #endregion

                #region Get Timers
                cmd.CommandText = $"SELECT UserID, GuildID, ChannelID, TimerType, TriggerTime, TimerMessage, TimerID FROM Timers";
                dr = cmd.ExecuteReader();

                List <TimerObj> timerList = new List <TimerObj>();

                while (dr.Read())
                {
                    var o = new TimerObj
                    {
                        UserID      = ulong.Parse(dr.GetValue(0).ToString()),
                        GuildID     = ulong.Parse(dr.GetValue(1).ToString()),
                        ChannelID   = ulong.Parse(dr.GetValue(2).ToString()),
                        TimerType   = dr.GetValue(3).ToString(),
                        TriggerTime = dr.GetValue(4).ToString(),
                        TimerMsg    = dr.GetValue(5).ToString(),
                        TimerID     = int.Parse(dr.GetValue(6).ToString())
                    };
                    timerList.Add(o);
                }

                foreach (var o in timerList)
                {
                    if (o.TimerType == "remind")
                    {
                        Reminders     r         = new Reminders();
                        int           time      = 0;
                        List <string> timeParts = o.TriggerTime.Split('-').ToList();
                        timeParts.RemoveAll(s => s == "-");
                        int[] intTP = new int[7];
                        for (int i = 0; i < 7; i++)
                        {
                            intTP[i] = int.Parse(timeParts[i]);
                        }
                        DateTime dt = new DateTime(intTP[0], intTP[1], intTP[2], intTP[3], intTP[4], intTP[5], intTP[6]);
                        time = Convert.ToInt32(dt.Subtract(DateTime.Now).TotalMilliseconds);

                        if (time >= 0)
                        {
                            var t       = Convert.ToUInt64(time);
                            var txtChan = Client.GetGuild(o.GuildID).GetTextChannel(o.ChannelID);
                            var u       = Client.GetGuild(o.GuildID).GetUser(o.UserID);
                            var msg     = o.TimerMsg.Replace("§²", "'").Replace("§³", ";");
                            r.TimerStart(t, txtChan, u, msg);
                        }
                        else
                        {
                            string sql = $"DELETE FROM Timers WHERE TimerID = {o.TimerID}";
                            DBControl.UpdateDB(sql);
                        }
                    }
                }

                dr.Close();
                #endregion

                conn.Close();
                conn.Dispose();
            }
        }