Auto assign roles
This commit is contained in:
parent
279e189f08
commit
4b080590b2
@ -8,7 +8,7 @@ using NadekoBot.Services.Database.Impl;
|
|||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(NadekoSqliteContext))]
|
[DbContext(typeof(NadekoSqliteContext))]
|
||||||
[Migration("20160824184118_FirstMigration")]
|
[Migration("20160824223801_FirstMigration")]
|
||||||
partial class FirstMigration
|
partial class FirstMigration
|
||||||
{
|
{
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
@ -21,6 +21,8 @@ namespace NadekoBot.Migrations
|
|||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
.ValueGeneratedOnAdd();
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<ulong>("AutoAssignRoleId");
|
||||||
|
|
||||||
b.Property<bool>("DeleteMessageOnCommand");
|
b.Property<bool>("DeleteMessageOnCommand");
|
||||||
|
|
||||||
b.Property<ulong>("GuildId");
|
b.Property<ulong>("GuildId");
|
||||||
@ -30,7 +32,7 @@ namespace NadekoBot.Migrations
|
|||||||
b.HasIndex("GuildId")
|
b.HasIndex("GuildId")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("Configs");
|
b.ToTable("GuildConfigs");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.Donator", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.Donator", b =>
|
@ -9,17 +9,18 @@ namespace NadekoBot.Migrations
|
|||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "Configs",
|
name: "GuildConfigs",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<int>(nullable: false)
|
Id = table.Column<int>(nullable: false)
|
||||||
.Annotation("Autoincrement", true),
|
.Annotation("Autoincrement", true),
|
||||||
|
AutoAssignRoleId = table.Column<ulong>(nullable: false),
|
||||||
DeleteMessageOnCommand = table.Column<bool>(nullable: false),
|
DeleteMessageOnCommand = table.Column<bool>(nullable: false),
|
||||||
GuildId = table.Column<ulong>(nullable: false)
|
GuildId = table.Column<ulong>(nullable: false)
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_Configs", x => x.Id);
|
table.PrimaryKey("PK_GuildConfigs", x => x.Id);
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
@ -55,8 +56,8 @@ namespace NadekoBot.Migrations
|
|||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Configs_GuildId",
|
name: "IX_GuildConfigs_GuildId",
|
||||||
table: "Configs",
|
table: "GuildConfigs",
|
||||||
column: "GuildId",
|
column: "GuildId",
|
||||||
unique: true);
|
unique: true);
|
||||||
|
|
||||||
@ -70,7 +71,7 @@ namespace NadekoBot.Migrations
|
|||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Configs");
|
name: "GuildConfigs");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Donators");
|
name: "Donators");
|
@ -20,6 +20,8 @@ namespace NadekoBot.Migrations
|
|||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
.ValueGeneratedOnAdd();
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<ulong>("AutoAssignRoleId");
|
||||||
|
|
||||||
b.Property<bool>("DeleteMessageOnCommand");
|
b.Property<bool>("DeleteMessageOnCommand");
|
||||||
|
|
||||||
b.Property<ulong>("GuildId");
|
b.Property<ulong>("GuildId");
|
||||||
@ -29,7 +31,7 @@ namespace NadekoBot.Migrations
|
|||||||
b.HasIndex("GuildId")
|
b.HasIndex("GuildId")
|
||||||
.IsUnique();
|
.IsUnique();
|
||||||
|
|
||||||
b.ToTable("Configs");
|
b.ToTable("GuildConfigs");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.Donator", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.Donator", b =>
|
||||||
|
@ -15,7 +15,6 @@ using NadekoBot.Services.Database;
|
|||||||
using NadekoBot.Services.Database.Models;
|
using NadekoBot.Services.Database.Models;
|
||||||
|
|
||||||
//todo fix delmsgoncmd
|
//todo fix delmsgoncmd
|
||||||
//todo DB
|
|
||||||
namespace NadekoBot.Modules.Administration
|
namespace NadekoBot.Modules.Administration
|
||||||
{
|
{
|
||||||
[Module(".", AppendSpace = false)]
|
[Module(".", AppendSpace = false)]
|
||||||
@ -47,9 +46,9 @@ namespace NadekoBot.Modules.Administration
|
|||||||
Config conf;
|
Config conf;
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
conf = uow.Configs.For(channel.Guild.Id);
|
conf = uow.GuildConfigs.For(channel.Guild.Id);
|
||||||
conf.DeleteMessageOnCommand = !conf.DeleteMessageOnCommand;
|
conf.DeleteMessageOnCommand = !conf.DeleteMessageOnCommand;
|
||||||
uow.Configs.Update(conf);
|
uow.GuildConfigs.Update(conf);
|
||||||
await uow.CompleteAsync();
|
await uow.CompleteAsync();
|
||||||
}
|
}
|
||||||
if (conf.DeleteMessageOnCommand)
|
if (conf.DeleteMessageOnCommand)
|
||||||
@ -381,8 +380,8 @@ namespace NadekoBot.Modules.Administration
|
|||||||
{
|
{
|
||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)imsg.Channel;
|
||||||
//todo actually print info about created channel
|
//todo actually print info about created channel
|
||||||
await channel.Guild.CreateVoiceChannelAsync(channelName).ConfigureAwait(false);
|
var ch = await channel.Guild.CreateVoiceChannelAsync(channelName).ConfigureAwait(false);
|
||||||
await channel.SendMessageAsync($"Created voice channel **{channelName}**.").ConfigureAwait(false);
|
await channel.SendMessageAsync($"Created voice channel **{ch.Name}**, id `{ch.Id}`.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
@ -391,7 +390,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
public async Task DelTxtChanl(IMessage imsg, [Remainder] ITextChannel channel)
|
public async Task DelTxtChanl(IMessage imsg, [Remainder] ITextChannel channel)
|
||||||
{
|
{
|
||||||
await channel.DeleteAsync().ConfigureAwait(false);
|
await channel.DeleteAsync().ConfigureAwait(false);
|
||||||
await channel.SendMessageAsync($"Removed text channel **{channel.Name}**.").ConfigureAwait(false);
|
await channel.SendMessageAsync($"Removed text channel **{channel.Name}**, id `{channel.Id}`.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
@ -402,7 +401,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)imsg.Channel;
|
||||||
//todo actually print info about created channel
|
//todo actually print info about created channel
|
||||||
var txtCh = await channel.Guild.CreateTextChannelAsync(channelName).ConfigureAwait(false);
|
var txtCh = await channel.Guild.CreateTextChannelAsync(channelName).ConfigureAwait(false);
|
||||||
await channel.SendMessageAsync($"Added text channel **{channelName}**.").ConfigureAwait(false);
|
await channel.SendMessageAsync($"Added text channel **{txtCh.Name}**, id `{txtCh.Id}`.").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
@ -413,7 +412,6 @@ namespace NadekoBot.Modules.Administration
|
|||||||
var channel = (ITextChannel)imsg.Channel;
|
var channel = (ITextChannel)imsg.Channel;
|
||||||
topic = topic ?? "";
|
topic = topic ?? "";
|
||||||
await (channel as ITextChannel).ModifyAsync(c => c.Topic = topic);
|
await (channel as ITextChannel).ModifyAsync(c => c.Topic = topic);
|
||||||
//await (channel).ModifyAsync(c => c).ConfigureAwait(false);
|
|
||||||
await channel.SendMessageAsync(":ok: **New channel topic set.**").ConfigureAwait(false);
|
await channel.SendMessageAsync(":ok: **New channel topic set.**").ConfigureAwait(false);
|
||||||
|
|
||||||
}
|
}
|
@ -1,54 +0,0 @@
|
|||||||
using Discord;
|
|
||||||
using Discord.Commands;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
using NadekoBot.Attributes;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Administration
|
|
||||||
{
|
|
||||||
//todo DB
|
|
||||||
public partial class Administration
|
|
||||||
{
|
|
||||||
[Group]
|
|
||||||
public class AutoAssignRole
|
|
||||||
{
|
|
||||||
public AutoAssignRole()
|
|
||||||
{
|
|
||||||
var _client = NadekoBot.Client;
|
|
||||||
_client.UserJoined += (user) =>
|
|
||||||
{
|
|
||||||
//var config = SpecificConfigurations.Default.Of(e.Server.Id);
|
|
||||||
|
|
||||||
//var role = e.Server.Roles.Where(r => r.Id == config.AutoAssignedRole).FirstOrDefault();
|
|
||||||
|
|
||||||
//if (role == null)
|
|
||||||
// return;
|
|
||||||
|
|
||||||
//imsg.Author.AddRoles(role);
|
|
||||||
return Task.CompletedTask;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
//[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
|
||||||
//[RequireContext(ContextType.Guild)]
|
|
||||||
//[RequirePermission(GuildPermission.ManageRoles)]
|
|
||||||
//public async Task AutoAssignRole(IMessage imsg, IRole role)
|
|
||||||
//{
|
|
||||||
// var channel = (ITextChannel)imsg.Channel;
|
|
||||||
|
|
||||||
// var config = SpecificConfigurations.Default.Of(e.Server.Id);
|
|
||||||
|
|
||||||
// if (string.IsNullOrWhiteSpace(r)) //if role is not specified, disable
|
|
||||||
// {
|
|
||||||
// config.AutoAssignedRole = 0;
|
|
||||||
|
|
||||||
// await channel.SendMessageAsync("`Auto assign role on user join is now disabled.`").ConfigureAwait(false);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// config.AutoAssignedRole = role.Id;
|
|
||||||
// await channel.SendMessageAsync("`Auto assigned role is set.`").ConfigureAwait(false);
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,71 @@
|
|||||||
|
using Discord;
|
||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using NadekoBot.Attributes;
|
||||||
|
using NadekoBot.Services;
|
||||||
|
using NadekoBot.Services.Database;
|
||||||
|
using NadekoBot.Services.Database.Models;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NadekoBot.Modules.Administration
|
||||||
|
{
|
||||||
|
public partial class Administration
|
||||||
|
{
|
||||||
|
[Group]
|
||||||
|
public class AutoAssignRoleCommands
|
||||||
|
{
|
||||||
|
public AutoAssignRoleCommands()
|
||||||
|
{
|
||||||
|
var _client = NadekoBot.Client;
|
||||||
|
_client.UserJoined += async (user) =>
|
||||||
|
{
|
||||||
|
Config conf;
|
||||||
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
{
|
||||||
|
conf = uow.GuildConfigs.For(user.Guild.Id);
|
||||||
|
}
|
||||||
|
var aarType = conf.AutoAssignRoleId.GetType();
|
||||||
|
|
||||||
|
if (conf.AutoAssignRoleId == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var role = user.Guild.Roles.Where(r => r.Id == conf.AutoAssignRoleId).FirstOrDefault();
|
||||||
|
|
||||||
|
if (role != null)
|
||||||
|
await user.AddRolesAsync(role);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
|
[RequireContext(ContextType.Guild)]
|
||||||
|
[RequirePermission(GuildPermission.ManageRoles)]
|
||||||
|
public async Task AutoAssignRole(IMessage imsg, [Remainder] IRole role = null)
|
||||||
|
{
|
||||||
|
var channel = (ITextChannel)imsg.Channel;
|
||||||
|
|
||||||
|
Config conf;
|
||||||
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
{
|
||||||
|
conf = uow.GuildConfigs.For(channel.Guild.Id);
|
||||||
|
if (role == null)
|
||||||
|
conf.AutoAssignRoleId = 0;
|
||||||
|
else
|
||||||
|
conf.AutoAssignRoleId = role.Id;
|
||||||
|
|
||||||
|
uow.GuildConfigs.Update(conf);
|
||||||
|
await uow.CompleteAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (role == null)
|
||||||
|
{
|
||||||
|
await channel.SendMessageAsync("`Auto assign role on user join is now disabled.`").ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await channel.SendMessageAsync("`Auto assigned role is set.`").ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -10,7 +10,7 @@ namespace NadekoBot.Services.Database
|
|||||||
public interface IUnitOfWork : IDisposable
|
public interface IUnitOfWork : IDisposable
|
||||||
{
|
{
|
||||||
IQuoteRepository Quotes { get; }
|
IQuoteRepository Quotes { get; }
|
||||||
IConfigRepository Configs { get; }
|
IConfigRepository GuildConfigs { get; }
|
||||||
IDonatorsRepository Donators { get; }
|
IDonatorsRepository Donators { get; }
|
||||||
int Complete();
|
int Complete();
|
||||||
Task<int> CompleteAsync();
|
Task<int> CompleteAsync();
|
||||||
|
@ -9,6 +9,7 @@ namespace NadekoBot.Services.Database.Models
|
|||||||
public class Config : DbEntity
|
public class Config : DbEntity
|
||||||
{
|
{
|
||||||
public ulong GuildId { get; set; }
|
public ulong GuildId { get; set; }
|
||||||
public bool DeleteMessageOnCommand { get; set; } = false;
|
public bool DeleteMessageOnCommand { get; set; }
|
||||||
|
public ulong AutoAssignRoleId { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ namespace NadekoBot.Services.Database
|
|||||||
{
|
{
|
||||||
public DbSet<Quote> Quotes { get; set; }
|
public DbSet<Quote> Quotes { get; set; }
|
||||||
public DbSet<Donator> Donators { get; set; }
|
public DbSet<Donator> Donators { get; set; }
|
||||||
public DbSet<Config> Configs { get; set; }
|
public DbSet<Config> GuildConfigs { get; set; }
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
@ -41,9 +41,6 @@ namespace NadekoBot.Services.Database
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected abstract override void OnConfiguring(DbContextOptionsBuilder optionsBuilder);
|
||||||
{
|
|
||||||
optionsBuilder.UseSqlite("Filename=./data/NadekoBot.sqlite");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,8 +15,8 @@ namespace NadekoBot.Services.Database
|
|||||||
private IQuoteRepository _quotes;
|
private IQuoteRepository _quotes;
|
||||||
public IQuoteRepository Quotes => _quotes ?? (_quotes = new QuoteRepository(_context));
|
public IQuoteRepository Quotes => _quotes ?? (_quotes = new QuoteRepository(_context));
|
||||||
|
|
||||||
private IConfigRepository _configs;
|
private IConfigRepository _guildConfigs;
|
||||||
public IConfigRepository Configs => _configs ?? (_configs = new ConfigRepository(_context));
|
public IConfigRepository GuildConfigs => _guildConfigs ?? (_guildConfigs = new ConfigRepository(_context));
|
||||||
|
|
||||||
private IDonatorsRepository _donators;
|
private IDonatorsRepository _donators;
|
||||||
public IDonatorsRepository Donators => _donators ?? (_donators = new DonatorsRepository(_context));
|
public IDonatorsRepository Donators => _donators ?? (_donators = new DonatorsRepository(_context));
|
||||||
|
Loading…
Reference in New Issue
Block a user