Fix to v+t, finished typing articles?
This commit is contained in:
parent
fdc6967bd0
commit
6d2c9970a7
432
src/NadekoBot/Migrations/20160901010812_second.Designer.cs
generated
Normal file
432
src/NadekoBot/Migrations/20160901010812_second.Designer.cs
generated
Normal file
@ -0,0 +1,432 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using NadekoBot.Services.Database.Impl;
|
||||||
|
|
||||||
|
namespace NadekoBot.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(NadekoSqliteContext))]
|
||||||
|
[Migration("20160901010812_second")]
|
||||||
|
partial class second
|
||||||
|
{
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
modelBuilder
|
||||||
|
.HasAnnotation("ProductVersion", "1.0.0-rtm-21431");
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.BlacklistItem", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<int?>("BotConfigId");
|
||||||
|
|
||||||
|
b.Property<ulong>("ItemId");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("BotConfigId");
|
||||||
|
|
||||||
|
b.ToTable("BlacklistItem");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.BotConfig", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<ulong>("BufferSize");
|
||||||
|
|
||||||
|
b.Property<string>("CurrencyName");
|
||||||
|
|
||||||
|
b.Property<string>("CurrencyPluralName");
|
||||||
|
|
||||||
|
b.Property<string>("CurrencySign");
|
||||||
|
|
||||||
|
b.Property<bool>("DontJoinServers");
|
||||||
|
|
||||||
|
b.Property<bool>("ForwardMessages");
|
||||||
|
|
||||||
|
b.Property<bool>("ForwardToAllOwners");
|
||||||
|
|
||||||
|
b.Property<string>("RemindMessageFormat");
|
||||||
|
|
||||||
|
b.Property<bool>("RotatingStatuses");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("BotConfig");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.ClashCaller", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<bool>("BaseDestroyed");
|
||||||
|
|
||||||
|
b.Property<string>("CallUser");
|
||||||
|
|
||||||
|
b.Property<int>("ClashWarId");
|
||||||
|
|
||||||
|
b.Property<int>("Stars");
|
||||||
|
|
||||||
|
b.Property<DateTime>("TimeAdded");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("ClashWarId");
|
||||||
|
|
||||||
|
b.ToTable("ClashCallers");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.ClashWar", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<ulong>("ChannelId");
|
||||||
|
|
||||||
|
b.Property<string>("EnemyClan");
|
||||||
|
|
||||||
|
b.Property<ulong>("GuildId");
|
||||||
|
|
||||||
|
b.Property<int>("Size");
|
||||||
|
|
||||||
|
b.Property<DateTime>("StartedAt");
|
||||||
|
|
||||||
|
b.Property<int>("WarState");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("ClashOfClans");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.Currency", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<long>("Amount");
|
||||||
|
|
||||||
|
b.Property<ulong>("UserId");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("UserId")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Currency");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.Donator", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<int>("Amount");
|
||||||
|
|
||||||
|
b.Property<string>("Name");
|
||||||
|
|
||||||
|
b.Property<ulong>("UserId");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("UserId")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Donators");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.EightBallResponse", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<int?>("BotConfigId");
|
||||||
|
|
||||||
|
b.Property<string>("Text");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("BotConfigId");
|
||||||
|
|
||||||
|
b.ToTable("EightBallResponse");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.FollowedStream", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<ulong>("ChannelId");
|
||||||
|
|
||||||
|
b.Property<int?>("GuildConfigId");
|
||||||
|
|
||||||
|
b.Property<ulong>("GuildId");
|
||||||
|
|
||||||
|
b.Property<bool>("LastStatus");
|
||||||
|
|
||||||
|
b.Property<int>("Type");
|
||||||
|
|
||||||
|
b.Property<string>("Username");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("GuildConfigId");
|
||||||
|
|
||||||
|
b.ToTable("FollowedStream");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.GuildConfig", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<ulong>("AutoAssignRoleId");
|
||||||
|
|
||||||
|
b.Property<bool>("AutoDeleteByeMessages");
|
||||||
|
|
||||||
|
b.Property<bool>("AutoDeleteGreetMessages");
|
||||||
|
|
||||||
|
b.Property<int>("AutoDeleteGreetMessagesTimer");
|
||||||
|
|
||||||
|
b.Property<bool>("AutoDeleteSelfAssignedRoleMessages");
|
||||||
|
|
||||||
|
b.Property<ulong>("ByeMessageChannelId");
|
||||||
|
|
||||||
|
b.Property<string>("ChannelByeMessageText");
|
||||||
|
|
||||||
|
b.Property<string>("ChannelGreetMessageText");
|
||||||
|
|
||||||
|
b.Property<float>("DefaultMusicVolume");
|
||||||
|
|
||||||
|
b.Property<bool>("DeleteMessageOnCommand");
|
||||||
|
|
||||||
|
b.Property<string>("DmGreetMessageText");
|
||||||
|
|
||||||
|
b.Property<bool>("ExclusiveSelfAssignedRoles");
|
||||||
|
|
||||||
|
b.Property<ulong>("GreetMessageChannelId");
|
||||||
|
|
||||||
|
b.Property<ulong>("GuildId");
|
||||||
|
|
||||||
|
b.Property<bool>("SendChannelByeMessage");
|
||||||
|
|
||||||
|
b.Property<bool>("SendChannelGreetMessage");
|
||||||
|
|
||||||
|
b.Property<bool>("SendDmGreetMessage");
|
||||||
|
|
||||||
|
b.Property<bool>("VoicePlusTextEnabled");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("GuildId")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("GuildConfigs");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.ModulePrefix", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<int?>("BotConfigId");
|
||||||
|
|
||||||
|
b.Property<string>("ModuleName");
|
||||||
|
|
||||||
|
b.Property<string>("Prefix");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("BotConfigId");
|
||||||
|
|
||||||
|
b.ToTable("ModulePrefix");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<int?>("BotConfigId");
|
||||||
|
|
||||||
|
b.Property<string>("Status");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("BotConfigId");
|
||||||
|
|
||||||
|
b.ToTable("PlayingStatus");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.Quote", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<ulong>("AuthorId");
|
||||||
|
|
||||||
|
b.Property<string>("AuthorName")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<ulong>("GuildId");
|
||||||
|
|
||||||
|
b.Property<string>("Keyword")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Property<string>("Text")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Quotes");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.RaceAnimal", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<int?>("BotConfigId");
|
||||||
|
|
||||||
|
b.Property<string>("Icon");
|
||||||
|
|
||||||
|
b.Property<string>("Name");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("BotConfigId");
|
||||||
|
|
||||||
|
b.ToTable("RaceAnimal");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.Reminder", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<ulong>("ChannelId");
|
||||||
|
|
||||||
|
b.Property<bool>("IsPrivate");
|
||||||
|
|
||||||
|
b.Property<string>("Message");
|
||||||
|
|
||||||
|
b.Property<ulong>("ServerId");
|
||||||
|
|
||||||
|
b.Property<ulong>("UserId");
|
||||||
|
|
||||||
|
b.Property<DateTime>("When");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("Reminders");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.Repeater", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<ulong>("ChannelId");
|
||||||
|
|
||||||
|
b.Property<ulong>("GuildId");
|
||||||
|
|
||||||
|
b.Property<TimeSpan>("Interval");
|
||||||
|
|
||||||
|
b.Property<string>("Message");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("ChannelId")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("Repeaters");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.SelfAssignedRole", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<ulong>("GuildId");
|
||||||
|
|
||||||
|
b.Property<ulong>("RoleId");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("GuildId", "RoleId")
|
||||||
|
.IsUnique();
|
||||||
|
|
||||||
|
b.ToTable("SelfAssignableRoles");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.TypingArticle", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<string>("Author");
|
||||||
|
|
||||||
|
b.Property<string>("Text");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("TypingArticles");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.BlacklistItem", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("NadekoBot.Services.Database.Models.BotConfig")
|
||||||
|
.WithMany("Blacklist")
|
||||||
|
.HasForeignKey("BotConfigId");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.ClashCaller", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("NadekoBot.Services.Database.Models.ClashWar", "ClashWar")
|
||||||
|
.WithMany("Bases")
|
||||||
|
.HasForeignKey("ClashWarId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.EightBallResponse", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("NadekoBot.Services.Database.Models.BotConfig")
|
||||||
|
.WithMany("EightBallResponses")
|
||||||
|
.HasForeignKey("BotConfigId");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.FollowedStream", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("NadekoBot.Services.Database.Models.GuildConfig")
|
||||||
|
.WithMany("FollowedStreams")
|
||||||
|
.HasForeignKey("GuildConfigId");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.ModulePrefix", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("NadekoBot.Services.Database.Models.BotConfig")
|
||||||
|
.WithMany("ModulePrefixes")
|
||||||
|
.HasForeignKey("BotConfigId");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("NadekoBot.Services.Database.Models.BotConfig")
|
||||||
|
.WithMany("RotatingStatusMessages")
|
||||||
|
.HasForeignKey("BotConfigId");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.RaceAnimal", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("NadekoBot.Services.Database.Models.BotConfig")
|
||||||
|
.WithMany("RaceAnimals")
|
||||||
|
.HasForeignKey("BotConfigId");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
32
src/NadekoBot/Migrations/20160901010812_second.cs
Normal file
32
src/NadekoBot/Migrations/20160901010812_second.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
namespace NadekoBot.Migrations
|
||||||
|
{
|
||||||
|
public partial class second : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "TypingArticles",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<int>(nullable: false)
|
||||||
|
.Annotation("Autoincrement", true),
|
||||||
|
Author = table.Column<string>(nullable: true),
|
||||||
|
Text = table.Column<string>(nullable: true)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_TypingArticles", x => x.Id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "TypingArticles");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -363,6 +363,20 @@ namespace NadekoBot.Migrations
|
|||||||
b.ToTable("SelfAssignableRoles");
|
b.ToTable("SelfAssignableRoles");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.TypingArticle", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
|
b.Property<string>("Author");
|
||||||
|
|
||||||
|
b.Property<string>("Text");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("TypingArticles");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.BlacklistItem", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.BlacklistItem", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("NadekoBot.Services.Database.Models.BotConfig")
|
b.HasOne("NadekoBot.Services.Database.Models.BotConfig")
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
////todo Add flags for every event
|
////todo Add flags for every event
|
||||||
//namespace NadekoBot.Modules.Administration
|
//namespace NadekoBot.Modules.Administration
|
||||||
//{
|
//{
|
||||||
// internal class LogCommand : DiscordCommand
|
// public class LogCommand : DiscordCommand
|
||||||
// {
|
// {
|
||||||
// private string prettyCurrentTime => $"【{DateTime.Now:HH:mm:ss}】";
|
// private string prettyCurrentTime => $"【{DateTime.Now:HH:mm:ss}】";
|
||||||
|
|
||||||
@ -373,7 +373,7 @@
|
|||||||
// catch { }
|
// catch { }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// internal override void Init(CommandGroupBuilder cgb)
|
// public override void Init(CommandGroupBuilder cgb)
|
||||||
// {
|
// {
|
||||||
|
|
||||||
// cgb.CreateCommand(Module.Prefix + "spmom")
|
// cgb.CreateCommand(Module.Prefix + "spmom")
|
||||||
|
@ -23,6 +23,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
public VoicePlusTextCommands()
|
public VoicePlusTextCommands()
|
||||||
{
|
{
|
||||||
NadekoBot.Client.UserUpdated += UserUpdatedEventHandler;
|
NadekoBot.Client.UserUpdated += UserUpdatedEventHandler;
|
||||||
|
voicePlusTextCache = new ConcurrentDictionary<ulong, bool>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task UserUpdatedEventHandler(IGuildUser before, IGuildUser after)
|
private Task UserUpdatedEventHandler(IGuildUser before, IGuildUser after)
|
||||||
|
@ -60,7 +60,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
private ConcurrentQueue<string> animals { get; }
|
private ConcurrentQueue<string> animals { get; }
|
||||||
|
|
||||||
public bool Fail { get; internal set; }
|
public bool Fail { get; set; }
|
||||||
|
|
||||||
public List<Participant> participants = new List<Participant>();
|
public List<Participant> participants = new List<Participant>();
|
||||||
private ulong serverId;
|
private ulong serverId;
|
||||||
|
@ -17,14 +17,14 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public Task Roll(IUserMessage umsg, [Remainder] string arg = null) =>
|
public Task Roll(IUserMessage umsg, [Remainder] string arg = null) =>
|
||||||
InternalRoll(umsg, arg, true);
|
publicRoll(umsg, arg, true);
|
||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public Task Rolluo(IUserMessage umsg, [Remainder] string arg = null) =>
|
public Task Rolluo(IUserMessage umsg, [Remainder] string arg = null) =>
|
||||||
InternalRoll(umsg, arg, false);
|
publicRoll(umsg, arg, false);
|
||||||
//todo drawing
|
//todo drawing
|
||||||
private async Task InternalRoll(IUserMessage umsg, string arg, bool ordered)
|
private async Task publicRoll(IUserMessage umsg, string arg, bool ordered)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)umsg.Channel;
|
||||||
var r = new Random();
|
var r = new Random();
|
||||||
|
@ -11,11 +11,11 @@
|
|||||||
////todo drawing
|
////todo drawing
|
||||||
//namespace NadekoBot.Modules.Gambling
|
//namespace NadekoBot.Modules.Gambling
|
||||||
//{
|
//{
|
||||||
// internal class DrawCommand : DiscordCommand
|
// public class DrawCommand : DiscordCommand
|
||||||
// {
|
// {
|
||||||
// public DrawCommand(DiscordModule module) : base(module) { }
|
// public DrawCommand(DiscordModule module) : base(module) { }
|
||||||
|
|
||||||
// internal override void Init(CommandGroupBuilder cgb)
|
// public override void Init(CommandGroupBuilder cgb)
|
||||||
// {
|
// {
|
||||||
// cgb.CreateCommand(Module.Prefix + "draw")
|
// cgb.CreateCommand(Module.Prefix + "draw")
|
||||||
// .Description($"Draws a card from the deck.If you supply number [x], she draws up to 5 cards from the deck. | `{Prefix}draw [x]`")
|
// .Description($"Draws a card from the deck.If you supply number [x], she draws up to 5 cards from the deck. | `{Prefix}draw [x]`")
|
||||||
|
@ -63,7 +63,7 @@
|
|||||||
|
|
||||||
// private SemaphoreSlim locker = new SemaphoreSlim(1,1);
|
// private SemaphoreSlim locker = new SemaphoreSlim(1,1);
|
||||||
|
|
||||||
// internal override void Init(CommandGroupBuilder cgb)
|
// public override void Init(CommandGroupBuilder cgb)
|
||||||
// {
|
// {
|
||||||
// cgb.CreateCommand(Module.Prefix + "pick")
|
// cgb.CreateCommand(Module.Prefix + "pick")
|
||||||
// .Description($"Picks a flower planted in this channel. | `{Prefix}pick`")
|
// .Description($"Picks a flower planted in this channel. | `{Prefix}pick`")
|
||||||
|
@ -1,196 +1,190 @@
|
|||||||
//using Discord;
|
using Discord;
|
||||||
//using Discord.Commands;
|
using Discord.Commands;
|
||||||
//using NadekoBot.Classes;
|
using Discord.WebSocket;
|
||||||
//using NadekoBot.DataModels;
|
using NadekoBot.Attributes;
|
||||||
//using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
//using System;
|
using NadekoBot.Services;
|
||||||
//using System.Collections.Concurrent;
|
using NadekoBot.Services.Database;
|
||||||
//using System.Collections.Generic;
|
using System;
|
||||||
//using System.Diagnostics;
|
using System.Collections.Concurrent;
|
||||||
//using System.Linq;
|
using System.Collections.Generic;
|
||||||
//using System.Threading.Tasks;
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
////todo DB
|
namespace NadekoBot.Modules.Games
|
||||||
////todo Rewrite?
|
{
|
||||||
//namespace NadekoBot.Modules.Games
|
public class TypingGame
|
||||||
//{
|
{
|
||||||
// public static class SentencesProvider
|
public const float WORD_VALUE = 4.5f;
|
||||||
// {
|
private readonly ITextChannel channel;
|
||||||
// internal static string GetRandomSentence()
|
public string CurrentSentence;
|
||||||
// {
|
public bool IsActive;
|
||||||
// var data = DbHandler.Instance.GetAllRows<TypingArticle>();
|
private readonly Stopwatch sw;
|
||||||
// try
|
private readonly List<ulong> finishedUserIds;
|
||||||
// {
|
|
||||||
// return data.ToList()[new Random().Next(0, data.Count())].Text;
|
|
||||||
// }
|
|
||||||
// catch
|
|
||||||
// {
|
|
||||||
// return "Failed retrieving data from parse. Owner didn't add any articles to type using `typeadd`.";
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// public class TypingGame
|
public TypingGame(ITextChannel channel)
|
||||||
// {
|
{
|
||||||
// public const float WORD_VALUE = 4.5f;
|
this.channel = channel;
|
||||||
// private readonly Channel channel;
|
IsActive = false;
|
||||||
// public string CurrentSentence;
|
sw = new Stopwatch();
|
||||||
// public bool IsActive;
|
finishedUserIds = new List<ulong>();
|
||||||
// private readonly Stopwatch sw;
|
}
|
||||||
// private readonly List<ulong> finishedUserIds;
|
|
||||||
|
|
||||||
// public TypingGame(Channel channel)
|
public ITextChannel Channel { get; set; }
|
||||||
// {
|
|
||||||
// this.channel = channel;
|
|
||||||
// IsActive = false;
|
|
||||||
// sw = new Stopwatch();
|
|
||||||
// finishedUserIds = new List<ulong>();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// public Channel Channell { get; internal set; }
|
public async Task<bool> Stop()
|
||||||
|
{
|
||||||
|
if (!IsActive) return false;
|
||||||
|
NadekoBot.Client.MessageReceived -= AnswerReceived;
|
||||||
|
finishedUserIds.Clear();
|
||||||
|
IsActive = false;
|
||||||
|
sw.Stop();
|
||||||
|
sw.Reset();
|
||||||
|
await channel.SendMessageAsync("Typing contest stopped").ConfigureAwait(false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// internal async Task<bool> Stop()
|
public async Task Start()
|
||||||
// {
|
{
|
||||||
// if (!IsActive) return false;
|
while (true)
|
||||||
// NadekoBot.Client.MessageReceived -= AnswerReceived;
|
{
|
||||||
// finishedUserIds.Clear();
|
if (IsActive) return; // can't start running game
|
||||||
// IsActive = false;
|
IsActive = true;
|
||||||
// sw.Stop();
|
CurrentSentence = GetRandomSentence();
|
||||||
// sw.Reset();
|
var i = (int)(CurrentSentence.Length / WORD_VALUE * 1.7f);
|
||||||
// await channel.Send("Typing contest stopped").ConfigureAwait(false);
|
await channel.SendMessageAsync($":clock2: Next contest will last for {i} seconds. Type the bolded text as fast as you can.").ConfigureAwait(false);
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// internal async Task Start()
|
|
||||||
// {
|
|
||||||
// while (true)
|
|
||||||
// {
|
|
||||||
// if (IsActive) return; // can't start running game
|
|
||||||
// IsActive = true;
|
|
||||||
// CurrentSentence = SentencesProvider.GetRandomSentence();
|
|
||||||
// var i = (int)(CurrentSentence.Length / WORD_VALUE * 1.7f);
|
|
||||||
// await channel.SendMessageAsync($":clock2: Next contest will last for {i} seconds. Type the bolded text as fast as you can.").ConfigureAwait(false);
|
|
||||||
|
|
||||||
|
|
||||||
// var msg = await channel.SendMessageAsync("Starting new typing contest in **3**...").ConfigureAwait(false);
|
var msg = await channel.SendMessageAsync("Starting new typing contest in **3**...").ConfigureAwait(false);
|
||||||
// await Task.Delay(1000).ConfigureAwait(false);
|
await Task.Delay(1000).ConfigureAwait(false);
|
||||||
// await msg.Edit("Starting new typing contest in **2**...").ConfigureAwait(false);
|
await msg.ModifyAsync(m => m.Content = "Starting new typing contest in **2**...").ConfigureAwait(false);
|
||||||
// await Task.Delay(1000).ConfigureAwait(false);
|
await Task.Delay(1000).ConfigureAwait(false);
|
||||||
// await msg.Edit("Starting new typing contest in **1**...").ConfigureAwait(false);
|
await msg.ModifyAsync(m => m.Content = "Starting new typing contest in **1**...").ConfigureAwait(false);
|
||||||
// await Task.Delay(1000).ConfigureAwait(false);
|
await Task.Delay(1000).ConfigureAwait(false);
|
||||||
// await msg.Edit($":book:**{CurrentSentence.Replace(" ", " \x200B")}**:book:").ConfigureAwait(false);
|
await msg.ModifyAsync(m => m.Content = $":book:**{CurrentSentence.Replace(" ", " \x200B")}**:book:").ConfigureAwait(false);
|
||||||
// sw.Start();
|
sw.Start();
|
||||||
// HandleAnswers();
|
HandleAnswers();
|
||||||
|
|
||||||
// while (i > 0)
|
while (i > 0)
|
||||||
// {
|
{
|
||||||
// await Task.Delay(1000).ConfigureAwait(false);
|
await Task.Delay(1000).ConfigureAwait(false);
|
||||||
// i--;
|
i--;
|
||||||
// if (!IsActive)
|
if (!IsActive)
|
||||||
// return;
|
return;
|
||||||
// }
|
}
|
||||||
|
|
||||||
// await Stop().ConfigureAwait(false);
|
await Stop().ConfigureAwait(false);
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
|
|
||||||
// private void HandleAnswers()
|
public string GetRandomSentence()
|
||||||
// {
|
{
|
||||||
// NadekoBot.Client.MessageReceived += AnswerReceived;
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
// }
|
{
|
||||||
|
return uow.TypingArticles.GetRandom()?.Text ?? "No typing articles found. Use `>typeadd` command to add a new article for typing.";
|
||||||
|
}
|
||||||
|
|
||||||
// private async void AnswerReceived(object sender, MessageEventArgs e)
|
}
|
||||||
// {
|
|
||||||
// try
|
|
||||||
// {
|
|
||||||
// if (e.Channel == null || e.Channel.Id != channel.Id || umsg.Author.Id == NadekoBot.Client.CurrentUser.Id) return;
|
|
||||||
|
|
||||||
// var guess = e.Message.RawText;
|
private void HandleAnswers()
|
||||||
|
{
|
||||||
|
NadekoBot.Client.MessageReceived += AnswerReceived;
|
||||||
|
}
|
||||||
|
|
||||||
// var distance = CurrentSentence.LevenshteinDistance(guess);
|
private async Task AnswerReceived(IMessage imsg)
|
||||||
// var decision = Judge(distance, guess.Length);
|
{
|
||||||
// if (decision && !finishedUserIds.Contains(umsg.Author.Id))
|
var msg = imsg as IUserMessage;
|
||||||
// {
|
if (msg == null)
|
||||||
// finishedUserIds.Add(umsg.Author.Id);
|
return;
|
||||||
// await channel.Send($"{umsg.Author.Mention} finished in **{sw.Elapsed.Seconds}** seconds with { distance } errors, **{ CurrentSentence.Length / WORD_VALUE / sw.Elapsed.Seconds * 60 }** WPM!").ConfigureAwait(false);
|
try
|
||||||
// if (finishedUserIds.Count % 2 == 0)
|
{
|
||||||
// {
|
if (channel== null || channel.Id != channel.Id || msg.Author.Id == NadekoBot.Client.GetCurrentUser().Id) return;
|
||||||
// await channel.SendMessageAsync($":exclamation: `A lot of people finished, here is the text for those still typing:`\n\n:book:**{CurrentSentence}**:book:").ConfigureAwait(false);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// catch { }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// private bool Judge(int errors, int textLength) => errors <= textLength / 25;
|
var guess = msg.Content;
|
||||||
|
|
||||||
// }
|
var distance = CurrentSentence.LevenshteinDistance(guess);
|
||||||
|
var decision = Judge(distance, guess.Length);
|
||||||
|
if (decision && !finishedUserIds.Contains(msg.Author.Id))
|
||||||
|
{
|
||||||
|
finishedUserIds.Add(msg.Author.Id);
|
||||||
|
await channel.SendMessageAsync($"{msg.Author.Mention} finished in **{sw.Elapsed.Seconds}** seconds with { distance } errors, **{ CurrentSentence.Length / WORD_VALUE / sw.Elapsed.Seconds * 60 }** WPM!").ConfigureAwait(false);
|
||||||
|
if (finishedUserIds.Count % 2 == 0)
|
||||||
|
{
|
||||||
|
await channel.SendMessageAsync($":exclamation: `A lot of people finished, here is the text for those still typing:`\n\n:book:**{CurrentSentence}**:book:").ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
|
|
||||||
// internal class SpeedTyping : DiscordCommand
|
private bool Judge(int errors, int textLength) => errors <= textLength / 25;
|
||||||
// {
|
|
||||||
|
|
||||||
// public static ConcurrentDictionary<ulong, TypingGame> RunningContests;
|
}
|
||||||
|
|
||||||
// public SpeedTyping(DiscordModule module) : base(module)
|
[Group]
|
||||||
// {
|
public class SpeedTypingCommands
|
||||||
// RunningContests = new ConcurrentDictionary<ulong, TypingGame>();
|
{
|
||||||
// }
|
|
||||||
|
|
||||||
// public Func<CommandEventArgs, Task> DoFunc() =>
|
public static ConcurrentDictionary<ulong, TypingGame> RunningContests;
|
||||||
// async e =>
|
|
||||||
// {
|
|
||||||
// var game = RunningContests.GetOrAdd(umsg.Author.Server.Id, id => new TypingGame(e.Channel));
|
|
||||||
|
|
||||||
// if (game.IsActive)
|
public SpeedTypingCommands()
|
||||||
// {
|
{
|
||||||
// await channel.SendMessageAsync(
|
RunningContests = new ConcurrentDictionary<ulong, TypingGame>();
|
||||||
// $"Contest already running in " +
|
}
|
||||||
// $"{game.Channell.Mention} channel.")
|
|
||||||
// .ConfigureAwait(false);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// await game.Start().ConfigureAwait(false);
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
|
|
||||||
// private Func<CommandEventArgs, Task> QuitFunc() =>
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
// async e =>
|
[RequireContext(ContextType.Guild)]
|
||||||
// {
|
public async Task TypeStart(IUserMessage msg)
|
||||||
// TypingGame game;
|
{
|
||||||
// if (RunningContests.TryRemove(umsg.Author.Server.Id, out game))
|
var channel = (ITextChannel)msg.Channel;
|
||||||
// {
|
|
||||||
// await game.Stop().ConfigureAwait(false);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// await channel.SendMessageAsync("No contest to stop on this channel.").ConfigureAwait(false);
|
|
||||||
// };
|
|
||||||
|
|
||||||
// internal override void Init(CommandGroupBuilder cgb)
|
var game = RunningContests.GetOrAdd(channel.Guild.Id, id => new TypingGame(channel));
|
||||||
// {
|
|
||||||
// cgb.CreateCommand(Module.Prefix + "typestart")
|
|
||||||
// .Description($"Starts a typing contest. | `{Prefix}typestart`")
|
|
||||||
// .Do(DoFunc());
|
|
||||||
|
|
||||||
// cgb.CreateCommand(Module.Prefix + "typestop")
|
if (game.IsActive)
|
||||||
// .Description($"Stops a typing contest on the current channel. | `{Prefix}typestop`")
|
{
|
||||||
// .Do(QuitFunc());
|
await channel.SendMessageAsync(
|
||||||
|
$"Contest already running in " +
|
||||||
|
$"{game.Channel.Mention} channel.")
|
||||||
|
.ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await game.Start().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// cgb.CreateCommand(Module.Prefix + "typeadd")
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
// .Description($"Adds a new article to the typing contest. Owner only. | `{Prefix}typeadd wordswords`")
|
[RequireContext(ContextType.Guild)]
|
||||||
// .Parameter("text", ParameterType.Unparsed)
|
public async Task TypeStop(IUserMessage imsg)
|
||||||
// .Do(async e =>
|
{
|
||||||
// {
|
var channel = (ITextChannel)imsg.Channel;
|
||||||
// if (!NadekoBot.IsOwner(umsg.Author.Id) || string.IsNullOrWhiteSpace(text)) return;
|
TypingGame game;
|
||||||
|
if (RunningContests.TryRemove(channel.Guild.Id, out game))
|
||||||
|
{
|
||||||
|
await game.Stop().ConfigureAwait(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await channel.SendMessageAsync("No contest to stop on this channel.").ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
// DbHandler.Instance.Connection.Insert(new TypingArticle
|
////todo owner only
|
||||||
// {
|
//[LocalizedCommand, LocalizedDescription, LocalizedSummary]
|
||||||
// Text = text,
|
//[RequireContext(ContextType.Guild)]
|
||||||
// DateAdded = DateTime.Now
|
//public async Task Typeadd(IUserMessage imsg, [Remainder] string text)
|
||||||
// });
|
//{
|
||||||
|
// var channel = (ITextChannel)imsg.Channel;
|
||||||
|
|
||||||
// await channel.SendMessageAsync("Added new article for typing game.").ConfigureAwait(false);
|
// using (var uow = DbHandler.UnitOfWork())
|
||||||
// });
|
// {
|
||||||
// }
|
// uow.TypingArticles.Add(new Services.Database.Models.TypingArticle
|
||||||
// }
|
// {
|
||||||
//}
|
// Author = imsg.Author.Username,
|
||||||
|
// Text = text
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// await channel.SendMessageAsync("Added new article for typing game.").ConfigureAwait(false);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -27,7 +27,7 @@ namespace NadekoBot.Modules.Games.Trivia
|
|||||||
return list[rand];
|
return list[rand];
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void Reload()
|
public void Reload()
|
||||||
{
|
{
|
||||||
var arr = JArray.Parse(File.ReadAllText("data/triviaquestions.json"));
|
var arr = JArray.Parse(File.ReadAllText("data/triviaquestions.json"));
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ namespace NadekoBot.Modules.Music.Classes
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void ClearQueue()
|
public void ClearQueue()
|
||||||
{
|
{
|
||||||
actionQueue.Enqueue(() =>
|
actionQueue.Enqueue(() =>
|
||||||
{
|
{
|
||||||
@ -256,7 +256,7 @@ namespace NadekoBot.Modules.Music.Classes
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Task MoveToVoiceChannel(IVoiceChannel voiceChannel)
|
public Task MoveToVoiceChannel(IVoiceChannel voiceChannel)
|
||||||
{
|
{
|
||||||
if (audioClient?.ConnectionState != ConnectionState.Connected)
|
if (audioClient?.ConnectionState != ConnectionState.Connected)
|
||||||
throw new InvalidOperationException("Can't move while bot is not connected to voice channel.");
|
throw new InvalidOperationException("Can't move while bot is not connected to voice channel.");
|
||||||
@ -264,13 +264,13 @@ namespace NadekoBot.Modules.Music.Classes
|
|||||||
return PlaybackVoiceChannel.ConnectAsync();
|
return PlaybackVoiceChannel.ConnectAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal bool ToggleRepeatSong() => this.RepeatSong = !this.RepeatSong;
|
public bool ToggleRepeatSong() => this.RepeatSong = !this.RepeatSong;
|
||||||
|
|
||||||
internal bool ToggleRepeatPlaylist() => this.RepeatPlaylist = !this.RepeatPlaylist;
|
public bool ToggleRepeatPlaylist() => this.RepeatPlaylist = !this.RepeatPlaylist;
|
||||||
|
|
||||||
internal bool ToggleAutoplay() => this.Autoplay = !this.Autoplay;
|
public bool ToggleAutoplay() => this.Autoplay = !this.Autoplay;
|
||||||
|
|
||||||
internal void ThrowIfQueueFull()
|
public void ThrowIfQueueFull()
|
||||||
{
|
{
|
||||||
if (MaxQueueSize == 0)
|
if (MaxQueueSize == 0)
|
||||||
return;
|
return;
|
||||||
|
@ -16,18 +16,18 @@ namespace NadekoBot.Modules.Music.Classes
|
|||||||
{
|
{
|
||||||
public class SongInfo
|
public class SongInfo
|
||||||
{
|
{
|
||||||
public string Provider { get; internal set; }
|
public string Provider { get; set; }
|
||||||
public MusicType ProviderType { get; internal set; }
|
public MusicType ProviderType { get; set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Will be set only if the providertype is normal
|
/// Will be set only if the providertype is normal
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Query { get; internal set; }
|
public string Query { get; set; }
|
||||||
public string Title { get; internal set; }
|
public string Title { get; set; }
|
||||||
public string Uri { get; internal set; }
|
public string Uri { get; set; }
|
||||||
}
|
}
|
||||||
public class Song
|
public class Song
|
||||||
{
|
{
|
||||||
public StreamState State { get; internal set; }
|
public StreamState State { get; set; }
|
||||||
public string PrettyName =>
|
public string PrettyName =>
|
||||||
$"**【 {SongInfo.Title.TrimTo(55)} 】**`{(SongInfo.Provider ?? "-")}` `by {QueuerName}`";
|
$"**【 {SongInfo.Title.TrimTo(55)} 】**`{(SongInfo.Provider ?? "-")}` `by {QueuerName}`";
|
||||||
public SongInfo SongInfo { get; }
|
public SongInfo SongInfo { get; }
|
||||||
@ -80,7 +80,7 @@ namespace NadekoBot.Modules.Music.Classes
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal async Task Play(IAudioClient voiceClient, CancellationToken cancelToken)
|
public async Task Play(IAudioClient voiceClient, CancellationToken cancelToken)
|
||||||
{
|
{
|
||||||
var filename = Path.Combine(Music.MusicDataPath, DateTime.Now.UnixTimestamp().ToString());
|
var filename = Path.Combine(Music.MusicDataPath, DateTime.Now.UnixTimestamp().ToString());
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ namespace NadekoBot.Modules.Music.Classes
|
|||||||
public bool IsSoundCloudLink(string url) =>
|
public bool IsSoundCloudLink(string url) =>
|
||||||
System.Text.RegularExpressions.Regex.IsMatch(url, "(.*)(soundcloud.com|snd.sc)(.*)");
|
System.Text.RegularExpressions.Regex.IsMatch(url, "(.*)(soundcloud.com|snd.sc)(.*)");
|
||||||
|
|
||||||
internal async Task<SoundCloudVideo> GetVideoByQueryAsync(string query)
|
public async Task<SoundCloudVideo> GetVideoByQueryAsync(string query)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(query))
|
if (string.IsNullOrWhiteSpace(query))
|
||||||
throw new ArgumentNullException(nameof(query));
|
throw new ArgumentNullException(nameof(query));
|
||||||
|
@ -204,7 +204,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal static async Task<string> GetE621ImageLink(string tags)
|
public static async Task<string> GetE621ImageLink(string tags)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
// internal override void Init(CommandGroupBuilder cgb)
|
// public override void Init(CommandGroupBuilder cgb)
|
||||||
// {
|
// {
|
||||||
// cgb.CreateCommand(Module.Prefix + "convert")
|
// cgb.CreateCommand(Module.Prefix + "convert")
|
||||||
// .Description($"Convert quantities from>to. | `{Prefix}convert m>km 1000`")
|
// .Description($"Convert quantities from>to. | `{Prefix}convert m>km 1000`")
|
||||||
|
@ -113,7 +113,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
// public float StatScore { get; set; }
|
// public float StatScore { get; set; }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// internal override void Init(CommandGroupBuilder cgb)
|
// public override void Init(CommandGroupBuilder cgb)
|
||||||
// {
|
// {
|
||||||
// cgb.CreateCommand(Module.Prefix + "lolchamp")
|
// cgb.CreateCommand(Module.Prefix + "lolchamp")
|
||||||
// .Description($"Shows League Of Legends champion statistics. If there are spaces/apostrophes or in the name - omit them. Optional second parameter is a role. |`{Prefix}lolchamp Riven` or `{Prefix}lolchamp Annie sup`")
|
// .Description($"Shows League Of Legends champion statistics. If there are spaces/apostrophes or in the name - omit them. Optional second parameter is a role. |`{Prefix}lolchamp Riven` or `{Prefix}lolchamp Annie sup`")
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
////todo rewrite
|
////todo rewrite
|
||||||
//namespace NadekoBot.Modules.Trello
|
//namespace NadekoBot.Modules.Trello
|
||||||
//{
|
//{
|
||||||
// internal class Trello : DiscordModule
|
// public class Trello : DiscordModule
|
||||||
// {
|
// {
|
||||||
// private readonly Timer t = new Timer { Interval = 2000 };
|
// private readonly Timer t = new Timer { Interval = 2000 };
|
||||||
// public override string Prefix { get; } = NadekoBot.Config.CommandPrefixes.Trello;
|
// public override string Prefix { get; } = NadekoBot.Config.CommandPrefixes.Trello;
|
||||||
|
@ -28,7 +28,7 @@ namespace NadekoBot.Resources {
|
|||||||
|
|
||||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
internal CommandStrings() {
|
public CommandStrings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -28,7 +28,7 @@ namespace NadekoBot.Resources {
|
|||||||
|
|
||||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
internal ResponseStrings() {
|
public ResponseStrings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -29,7 +29,7 @@ namespace NadekoBot.Services.Database.Models
|
|||||||
public ulong ChannelId { get; set; }
|
public ulong ChannelId { get; set; }
|
||||||
|
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public ITextChannel Channel { get; internal set; }
|
public ITextChannel Channel { get; set; }
|
||||||
|
|
||||||
public List<ClashCaller> Bases { get; set; }
|
public List<ClashCaller> Bases { get; set; }
|
||||||
}
|
}
|
||||||
|
14
src/NadekoBot/Services/Database/Models/TypingArticle.cs
Normal file
14
src/NadekoBot/Services/Database/Models/TypingArticle.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NadekoBot.Services.Database.Models
|
||||||
|
{
|
||||||
|
public class TypingArticle : DbEntity
|
||||||
|
{
|
||||||
|
public string Author { get; set; }
|
||||||
|
public string Text { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -20,6 +20,7 @@ namespace NadekoBot.Services.Database
|
|||||||
public DbSet<BotConfig> BotConfig { get; set; }
|
public DbSet<BotConfig> BotConfig { get; set; }
|
||||||
public DbSet<Repeater> Repeaters { get; set; }
|
public DbSet<Repeater> Repeaters { get; set; }
|
||||||
public DbSet<Currency> Currency { get; set; }
|
public DbSet<Currency> Currency { get; set; }
|
||||||
|
public DbSet<TypingArticle> TypingArticles { get; set; }
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
using NadekoBot.Services.Database.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NadekoBot.Services.Database.Repositories
|
||||||
|
{
|
||||||
|
public interface ITypingArticlesRepository : IRepository <TypingArticle>
|
||||||
|
{
|
||||||
|
TypingArticle GetRandom();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
using NadekoBot.Services.Database.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace NadekoBot.Services.Database.Repositories.Impl
|
||||||
|
{
|
||||||
|
public class TypingArticlesRepository : Repository<TypingArticle>, ITypingArticlesRepository
|
||||||
|
{
|
||||||
|
private Random _rand = null;
|
||||||
|
private Random rand => _rand ?? (_rand = new Random());
|
||||||
|
public TypingArticlesRepository(DbContext context) : base(context)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypingArticle GetRandom()
|
||||||
|
{
|
||||||
|
var skip = (int)(rand.NextDouble() * _set.Count());
|
||||||
|
return _set.Skip(skip).FirstOrDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -39,6 +39,9 @@ namespace NadekoBot.Services.Database
|
|||||||
private ICurrencyRepository _currency;
|
private ICurrencyRepository _currency;
|
||||||
public ICurrencyRepository Currency => _currency ?? (_currency = new CurrencyRepository(_context));
|
public ICurrencyRepository Currency => _currency ?? (_currency = new CurrencyRepository(_context));
|
||||||
|
|
||||||
|
private ITypingArticlesRepository _typingArticles;
|
||||||
|
public ITypingArticlesRepository TypingArticles => _typingArticles ?? (_typingArticles = new TypingArticlesRepository(_context));
|
||||||
|
|
||||||
public UnitOfWork(NadekoContext context)
|
public UnitOfWork(NadekoContext context)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
|
@ -11,7 +11,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace NadekoBot.Classes
|
namespace NadekoBot.Classes
|
||||||
{
|
{
|
||||||
internal class SpecificConfigurations
|
public class SpecificConfigurations
|
||||||
{
|
{
|
||||||
public static SpecificConfigurations Default { get; } = new SpecificConfigurations();
|
public static SpecificConfigurations Default { get; } = new SpecificConfigurations();
|
||||||
public static bool Instantiated { get; private set; }
|
public static bool Instantiated { get; private set; }
|
||||||
@ -73,7 +73,7 @@ namespace NadekoBot.Classes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class ServerSpecificConfig : INotifyPropertyChanged
|
public class ServerSpecificConfig : INotifyPropertyChanged
|
||||||
{
|
{
|
||||||
[JsonProperty("VoicePlusTextEnabled")]
|
[JsonProperty("VoicePlusTextEnabled")]
|
||||||
private bool voicePlusTextEnabled;
|
private bool voicePlusTextEnabled;
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
using Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace NadekoBot.DataModels
|
|
||||||
{
|
|
||||||
internal class Announcement : IDataModel
|
|
||||||
{
|
|
||||||
public long ServerId { get; set; } = 0;
|
|
||||||
public bool Greet { get; set; } = false;
|
|
||||||
public bool GreetPM { get; set; } = false;
|
|
||||||
[JsonProperty("greetChannel")]
|
|
||||||
public long GreetChannelId { get; set; } = 0;
|
|
||||||
public string GreetText { get; set; } = "Welcome %user%!";
|
|
||||||
public bool Bye { get; set; } = false;
|
|
||||||
public bool ByePM { get; set; } = false;
|
|
||||||
[JsonProperty("byeChannel")]
|
|
||||||
public long ByeChannelId { get; set; } = 0;
|
|
||||||
public string ByeText { get; set; } = "%user% has left the server.";
|
|
||||||
public bool DeleteGreetMessages { get; set; } = true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,11 +0,0 @@
|
|||||||
namespace NadekoBot.DataModels {
|
|
||||||
internal class Command : IDataModel {
|
|
||||||
public long UserId { get; set; }
|
|
||||||
public string UserName { get; set; }
|
|
||||||
public long ServerId { get; set; }
|
|
||||||
public string ServerName { get; set; }
|
|
||||||
public long ChannelId { get; set; }
|
|
||||||
public string ChannelName { get; set; }
|
|
||||||
public string CommandName { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
namespace NadekoBot.DataModels {
|
|
||||||
internal class CurrencyState : IDataModel {
|
|
||||||
public long Value { get; set; }
|
|
||||||
[SQLite.Unique]
|
|
||||||
public long UserId { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
namespace NadekoBot.DataModels {
|
|
||||||
internal class CurrencyTransaction : IDataModel {
|
|
||||||
public string Reason { get; set; }
|
|
||||||
public int Value { get; set; }
|
|
||||||
public long UserId { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
namespace NadekoBot.DataModels {
|
|
||||||
internal class Donator : IDataModel {
|
|
||||||
public long UserId { get; set; }
|
|
||||||
public string UserName { get; set; }
|
|
||||||
public int Amount { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
using SQLite;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace NadekoBot.DataModels
|
|
||||||
{
|
|
||||||
internal abstract class IDataModel
|
|
||||||
{
|
|
||||||
[PrimaryKey, AutoIncrement]
|
|
||||||
public int? Id { get; set; }
|
|
||||||
[Newtonsoft.Json.JsonProperty("createdAt")]
|
|
||||||
public DateTime DateAdded { get; set; } = DateTime.Now;
|
|
||||||
public IDataModel() { }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
namespace NadekoBot.DataModels
|
|
||||||
{
|
|
||||||
class Incident : IDataModel
|
|
||||||
{
|
|
||||||
public long ServerId { get; set; }
|
|
||||||
public long ChannelId { get; set; }
|
|
||||||
public string Text { get; set; }
|
|
||||||
public bool Read { get; set; } = false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
namespace NadekoBot.DataModels
|
|
||||||
{
|
|
||||||
internal class MusicPlaylist : IDataModel
|
|
||||||
{
|
|
||||||
public string Name { get; set; }
|
|
||||||
public long CreatorId { get; set; }
|
|
||||||
public string CreatorName { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
namespace NadekoBot.DataModels
|
|
||||||
{
|
|
||||||
internal class PlaylistSongInfo : IDataModel
|
|
||||||
{
|
|
||||||
public int PlaylistId { get; set; }
|
|
||||||
public int SongInfoId { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.DataModels
|
|
||||||
{
|
|
||||||
class UserPokeTypes : IDataModel
|
|
||||||
{
|
|
||||||
public long UserId { get; set; }
|
|
||||||
public string type { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
namespace NadekoBot.DataModels {
|
|
||||||
internal class Request : IDataModel {
|
|
||||||
public string UserName { get; set; }
|
|
||||||
public long UserId { get; set; }
|
|
||||||
public string ServerName { get; set; }
|
|
||||||
public long ServerId { get; set; }
|
|
||||||
[Newtonsoft.Json.JsonProperty("Request")]
|
|
||||||
public string RequestText { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
using SQLite;
|
|
||||||
|
|
||||||
namespace NadekoBot.DataModels
|
|
||||||
{
|
|
||||||
internal class SongInfo : IDataModel
|
|
||||||
{
|
|
||||||
public string Provider { get; internal set; }
|
|
||||||
public int ProviderType { get; internal set; }
|
|
||||||
public string Title { get; internal set; }
|
|
||||||
public string Uri { get; internal set; }
|
|
||||||
[Unique]
|
|
||||||
public string Query { get; internal set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace NadekoBot.DataModels {
|
|
||||||
internal class Stats : IDataModel {
|
|
||||||
public int ConnectedServers { get; set; }
|
|
||||||
public int OnlineUsers { get; set; }
|
|
||||||
public TimeSpan Uptime { get; set; }
|
|
||||||
public int RealOnlineUsers { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
namespace NadekoBot.DataModels
|
|
||||||
{
|
|
||||||
internal class TestDataModel : IDataModel
|
|
||||||
{
|
|
||||||
public long TestNumber { get; set; }
|
|
||||||
public string TestString { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
namespace NadekoBot.DataModels {
|
|
||||||
internal class TypingArticle : IDataModel {
|
|
||||||
public string Text { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
namespace NadekoBot.DataModels {
|
|
||||||
internal class UserQuote : IDataModel {
|
|
||||||
public string UserName { get; set; }
|
|
||||||
public string Keyword { get; set; }
|
|
||||||
public string Text { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
namespace NadekoBot.Classes.JSONModels
|
|
||||||
{
|
|
||||||
public class AnimeResult
|
|
||||||
{
|
|
||||||
public int id;
|
|
||||||
public string airing_status;
|
|
||||||
public string title_english;
|
|
||||||
public int total_episodes;
|
|
||||||
public string description;
|
|
||||||
public string image_url_lge;
|
|
||||||
|
|
||||||
public override string ToString() =>
|
|
||||||
"`Title:` **" + title_english +
|
|
||||||
"**\n`Status:` " + airing_status +
|
|
||||||
"\n`Episodes:` " + total_episodes +
|
|
||||||
"\n`Link:` http://anilist.co/anime/" + id +
|
|
||||||
"\n`Synopsis:` " + description.Substring(0, description.Length > 500 ? 500 : description.Length) + "..." +
|
|
||||||
"\n`img:` " + image_url_lge;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,246 +0,0 @@
|
|||||||
using Discord;
|
|
||||||
using NadekoBot.Extensions;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Runtime.Serialization;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Classes.JSONModels
|
|
||||||
{
|
|
||||||
public class Configuration
|
|
||||||
{
|
|
||||||
[JsonIgnore]
|
|
||||||
public static readonly Dictionary<string, List<string>> DefaultCustomReactions = new Dictionary<string, List<string>>
|
|
||||||
{
|
|
||||||
{@"\o\", new List<string>()
|
|
||||||
{ "/o/" } },
|
|
||||||
{"/o/", new List<string>()
|
|
||||||
{ @"\o\" } },
|
|
||||||
{"moveto", new List<string>() {
|
|
||||||
@"(👉 ͡° ͜ʖ ͡°)👉 %target%" } },
|
|
||||||
{"comeatmebro", new List<string>() {
|
|
||||||
"%target% (ง’̀-‘́)ง" } },
|
|
||||||
{"e", new List<string>() {
|
|
||||||
"%user% did it 😒 🔫",
|
|
||||||
"%target% did it 😒 🔫" } },
|
|
||||||
{"%mention% insult", new List<string>() {
|
|
||||||
"%target% You are a poop.",
|
|
||||||
"%target% You're a jerk.",
|
|
||||||
"%target% I will eat you when I get my powers back."
|
|
||||||
} },
|
|
||||||
{"%mention% praise", new List<string>()
|
|
||||||
{
|
|
||||||
"%target% You are cool.",
|
|
||||||
"%target% You are nice!",
|
|
||||||
"%target% You did a good job.",
|
|
||||||
"%target% You did something nice.",
|
|
||||||
"%target% is awesome!",
|
|
||||||
"%target% Wow."
|
|
||||||
} },
|
|
||||||
{"%mention% pat", new List<string>() {
|
|
||||||
"http://i.imgur.com/IiQwK12.gif",
|
|
||||||
"http://i.imgur.com/JCXj8yD.gif",
|
|
||||||
"http://i.imgur.com/qqBl2bm.gif",
|
|
||||||
"http://i.imgur.com/eOJlnwP.gif",
|
|
||||||
"https://45.media.tumblr.com/229ec0458891c4dcd847545c81e760a5/tumblr_mpfy232F4j1rxrpjzo1_r2_500.gif",
|
|
||||||
"https://media.giphy.com/media/KZQlfylo73AMU/giphy.gif",
|
|
||||||
"https://media.giphy.com/media/12hvLuZ7uzvCvK/giphy.gif",
|
|
||||||
"http://gallery1.anivide.com/_full/65030_1382582341.gif",
|
|
||||||
"https://49.media.tumblr.com/8e8a099c4eba22abd3ec0f70fd087cce/tumblr_nxovj9oY861ur1mffo1_500.gif ",
|
|
||||||
} },
|
|
||||||
{"%mention% cry", new List<string>()
|
|
||||||
{
|
|
||||||
"http://i.imgur.com/Xg3i1Qy.gif",
|
|
||||||
"http://i.imgur.com/3K8DRrU.gif",
|
|
||||||
"http://i.imgur.com/k58BcAv.gif",
|
|
||||||
"http://i.imgur.com/I2fLXwo.gif"
|
|
||||||
} },
|
|
||||||
{"%mention% are you real?", new List<string>()
|
|
||||||
{
|
|
||||||
"%user%, I will be soon."
|
|
||||||
} },
|
|
||||||
{"%mention% are you there?", new List<string>()
|
|
||||||
{
|
|
||||||
"Yes. :)"
|
|
||||||
} },
|
|
||||||
{"%mention% draw", new List<string>() {
|
|
||||||
"Sorry, I don't gamble, type $draw for that function."
|
|
||||||
} },
|
|
||||||
{"%mention% bb", new List<string>()
|
|
||||||
{
|
|
||||||
"Bye %target%"
|
|
||||||
} },
|
|
||||||
{"%mention% call", new List<string>() {
|
|
||||||
"Calling %target%"
|
|
||||||
} },
|
|
||||||
{"%mention% disguise", new List<string>() {
|
|
||||||
"https://cdn.discordapp.com/attachments/140007341880901632/156721710458994690/Cc5mixjUYAADgBs.jpg",
|
|
||||||
"https://cdn.discordapp.com/attachments/140007341880901632/156721715831898113/hqdefault.jpg",
|
|
||||||
"https://cdn.discordapp.com/attachments/140007341880901632/156721724430352385/okawari_01_haruka_weird_mask.jpg",
|
|
||||||
"https://cdn.discordapp.com/attachments/140007341880901632/156721728763068417/mustache-best-girl.png"
|
|
||||||
|
|
||||||
} },
|
|
||||||
{"%mention% inv", new List<string>() {
|
|
||||||
"To invite your bot, click on this link -> <https://discordapp.com/oauth2/authorize?client_id=%target%&scope=bot&permissions=66186303>"
|
|
||||||
} },
|
|
||||||
{ "%mention% threaten", new List<string>() {
|
|
||||||
"You wanna die, %target%?"
|
|
||||||
} },
|
|
||||||
{ "%mention% archer", new List<string>() {
|
|
||||||
"http://i.imgur.com/Bha9NhL.jpg"
|
|
||||||
} }
|
|
||||||
};
|
|
||||||
|
|
||||||
public bool DontJoinServers { get; set; } = false;
|
|
||||||
public bool ForwardMessages { get; set; } = true;
|
|
||||||
public bool ForwardToAllOwners { get; set; } = false;
|
|
||||||
public bool IsRotatingStatus { get; set; } = false;
|
|
||||||
public int BufferSize { get; set; } = 4.MiB();
|
|
||||||
|
|
||||||
public string[] RaceAnimals { get; internal set; } = {
|
|
||||||
"🐼",
|
|
||||||
"🐻",
|
|
||||||
"🐧",
|
|
||||||
"🐨",
|
|
||||||
"🐬",
|
|
||||||
"🐞",
|
|
||||||
"🦀",
|
|
||||||
"🦄" };
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public List<Quote> Quotes { get; set; } = new List<Quote>();
|
|
||||||
|
|
||||||
[JsonIgnore]
|
|
||||||
public List<PokemonType> PokemonTypes { get; set; } = new List<PokemonType>();
|
|
||||||
|
|
||||||
public string RemindMessageFormat { get; set; } = "❗⏰**I've been told to remind you to '%message%' now by %user%.**⏰❗";
|
|
||||||
|
|
||||||
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
|
|
||||||
public Dictionary<string, List<string>> CustomReactions { get; set; }
|
|
||||||
|
|
||||||
public List<string> RotatingStatuses { get; set; } = new List<string>();
|
|
||||||
public CommandPrefixesModel CommandPrefixes { get; set; } = new CommandPrefixesModel();
|
|
||||||
public HashSet<ulong> ServerBlacklist { get; set; } = new HashSet<ulong>();
|
|
||||||
public HashSet<ulong> ChannelBlacklist { get; set; } = new HashSet<ulong>();
|
|
||||||
|
|
||||||
public HashSet<ulong> UserBlacklist { get; set; } = new HashSet<ulong>() {
|
|
||||||
105309315895693312,
|
|
||||||
119174277298782216,
|
|
||||||
143515953525817344
|
|
||||||
};
|
|
||||||
|
|
||||||
[OnDeserialized]
|
|
||||||
internal void OnDeserialized(StreamingContext context)
|
|
||||||
{
|
|
||||||
if (CustomReactions == null)
|
|
||||||
{
|
|
||||||
CustomReactions = DefaultCustomReactions;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[OnSerializing]
|
|
||||||
internal void OnSerializing(StreamingContext context)
|
|
||||||
{
|
|
||||||
if (CustomReactions == null)
|
|
||||||
{
|
|
||||||
CustomReactions = DefaultCustomReactions;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public string[] _8BallResponses { get; set; } =
|
|
||||||
{
|
|
||||||
"Most definitely yes",
|
|
||||||
"For sure",
|
|
||||||
"As I see it, yes",
|
|
||||||
"My sources say yes",
|
|
||||||
"Yes",
|
|
||||||
"Most likely",
|
|
||||||
"Perhaps",
|
|
||||||
"Maybe",
|
|
||||||
"Not sure",
|
|
||||||
"It is uncertain",
|
|
||||||
"Ask me again later",
|
|
||||||
"Don't count on it",
|
|
||||||
"Probably not",
|
|
||||||
"Very doubtful",
|
|
||||||
"Most likely no",
|
|
||||||
"Nope",
|
|
||||||
"No",
|
|
||||||
"My sources say no",
|
|
||||||
"Dont even think about it",
|
|
||||||
"Definitely no",
|
|
||||||
"NO - It may cause disease contraction"
|
|
||||||
};
|
|
||||||
|
|
||||||
public string CurrencySign { get; set; } = "🌸";
|
|
||||||
public string CurrencyName { get; set; } = "NadekoFlower";
|
|
||||||
public string DMHelpString { get; set; } = "Type `-h` for help.";
|
|
||||||
public string HelpString { get; set; } = @"You can use `{0}modules` command to see a list of all modules.
|
|
||||||
You can use `{0}commands ModuleName`
|
|
||||||
(for example `{0}commands Administration`) to see a list of all of the commands in that module.
|
|
||||||
For a specific command help, use `{0}h ""Command name""` (for example `-h ""!m q""`)
|
|
||||||
|
|
||||||
|
|
||||||
**LIST OF COMMANDS CAN BE FOUND ON THIS LINK**
|
|
||||||
<https://github.com/Kwoth/NadekoBot/blob/master/commandlist.md>
|
|
||||||
|
|
||||||
|
|
||||||
Nadeko Support Server: <https://discord.gg/0ehQwTK2RBjAxzEY>";
|
|
||||||
}
|
|
||||||
|
|
||||||
public class CommandPrefixesModel
|
|
||||||
{
|
|
||||||
public string Administration { get; set; } = ".";
|
|
||||||
public string Searches { get; set; } = "~";
|
|
||||||
public string NSFW { get; set; } = "~";
|
|
||||||
public string Conversations { get; set; } = "<@{0}>";
|
|
||||||
public string ClashOfClans { get; set; } = ",";
|
|
||||||
public string Help { get; set; } = "-";
|
|
||||||
public string Music { get; set; } = "!!";
|
|
||||||
public string Trello { get; set; } = "trello ";
|
|
||||||
public string Games { get; set; } = ">";
|
|
||||||
public string Gambling { get; set; } = "$";
|
|
||||||
public string Permissions { get; set; } = ";";
|
|
||||||
public string Programming { get; set; } = "%";
|
|
||||||
public string Pokemon { get; set; } = ">";
|
|
||||||
public string Utility { get; set; } = ".";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ConfigHandler
|
|
||||||
{
|
|
||||||
private static readonly SemaphoreSlim configLock = new SemaphoreSlim(1, 1);
|
|
||||||
public static async Task SaveConfig()
|
|
||||||
{
|
|
||||||
await configLock.WaitAsync();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
File.WriteAllText("data/config.json", JsonConvert.SerializeObject(NadekoBot.Config, Formatting.Indented));
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
configLock.Release();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static bool IsBlackListed(MessageEventArgs evArgs) => IsUserBlacklisted(evArgs.User.Id) ||
|
|
||||||
(!evArgs.Channel.IsPrivate &&
|
|
||||||
(IsChannelBlacklisted(evArgs.Channel.Id) || IsServerBlacklisted(evArgs.Server.Id)));
|
|
||||||
|
|
||||||
public static bool IsServerBlacklisted(ulong id) => NadekoBot.Config.ServerBlacklist.Contains(id);
|
|
||||||
|
|
||||||
public static bool IsChannelBlacklisted(ulong id) => NadekoBot.Config.ChannelBlacklist.Contains(id);
|
|
||||||
|
|
||||||
public static bool IsUserBlacklisted(ulong id) => NadekoBot.Config.UserBlacklist.Contains(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Quote
|
|
||||||
{
|
|
||||||
public string Author { get; set; }
|
|
||||||
public string Text { get; set; }
|
|
||||||
|
|
||||||
public override string ToString() =>
|
|
||||||
$"{Text}\n\t*-{Author}*";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,50 +0,0 @@
|
|||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace NadekoBot.Classes.JSONModels {
|
|
||||||
public class LocalizedStrings {
|
|
||||||
public string[] Insults { get; set; } = {
|
|
||||||
" You are a poop.", " You're a jerk.",
|
|
||||||
" I will eat you when I get my powers back."
|
|
||||||
};
|
|
||||||
|
|
||||||
public string[] Praises { get; set; } = {
|
|
||||||
" You are cool.",
|
|
||||||
" You are nice!",
|
|
||||||
" You did a good job.",
|
|
||||||
" You did something nice.",
|
|
||||||
" is awesome!",
|
|
||||||
" Wow."
|
|
||||||
};
|
|
||||||
|
|
||||||
public static string[] GetAvailableLocales() {
|
|
||||||
Directory.CreateDirectory("data/locales");
|
|
||||||
return Directory.GetFiles("data/locales");
|
|
||||||
}
|
|
||||||
|
|
||||||
//public static void HandleLocalization() {
|
|
||||||
// var locales = LocalizedStrings.GetAvailableLocales();
|
|
||||||
|
|
||||||
|
|
||||||
// Console.WriteLine("Pick a language:\n" +
|
|
||||||
// "1. English");
|
|
||||||
// for (var i = 0; i < locales.Length; i++) {
|
|
||||||
// Console.WriteLine((i + 2) + ". " + Path.GetFileNameWithoutExtension(locales[i]));
|
|
||||||
// }
|
|
||||||
// File.WriteAllText("data/locales/english.json", JsonConvert.SerializeObject(new LocalizedStrings(), Formatting.Indented));
|
|
||||||
// try {
|
|
||||||
// Console.WriteLine($"Type in a number from {1} to {locales.Length + 1}\n");
|
|
||||||
// var input = Console.ReadLine();
|
|
||||||
// if (input != "1")
|
|
||||||
// Locale = LocalizedStrings.LoadLocale(locales[int.Parse(input) - 2]);
|
|
||||||
// } catch (Exception ex) {
|
|
||||||
// Console.ForegroundColor = ConsoleColor.Red;
|
|
||||||
// Console.WriteLine(ex);
|
|
||||||
// Console.ReadKey();
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
public static LocalizedStrings LoadLocale(string localeFile) =>
|
|
||||||
Newtonsoft.Json.JsonConvert.DeserializeObject<LocalizedStrings>(File.ReadAllText(localeFile));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Classes.JSONModels
|
|
||||||
{
|
|
||||||
class MagicItem
|
|
||||||
{
|
|
||||||
public string Name { get; set; }
|
|
||||||
public string Description { get; set; }
|
|
||||||
public override string ToString() =>
|
|
||||||
$"✨`{Name}`\n\t*{Description}*";
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace NadekoBot.Classes.JSONModels
|
|
||||||
{
|
|
||||||
public class PokemonType
|
|
||||||
{
|
|
||||||
public PokemonType(string n, string i, string[] m, List<PokemonMultiplier> multi)
|
|
||||||
{
|
|
||||||
Name = n;
|
|
||||||
Icon = i;
|
|
||||||
Moves = m;
|
|
||||||
Multipliers = multi;
|
|
||||||
}
|
|
||||||
public string Name { get; set; }
|
|
||||||
public List<PokemonMultiplier> Multipliers { get; set; }
|
|
||||||
public string Icon { get; set; }
|
|
||||||
public string[] Moves { get; set; }
|
|
||||||
}
|
|
||||||
public class PokemonMultiplier
|
|
||||||
{
|
|
||||||
public PokemonMultiplier(string t, double m)
|
|
||||||
{
|
|
||||||
Type = t;
|
|
||||||
Multiplication = m;
|
|
||||||
}
|
|
||||||
public string Type { get; set; }
|
|
||||||
public double Multiplication { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,155 +0,0 @@
|
|||||||
// ReSharper disable InconsistentNaming
|
|
||||||
|
|
||||||
using System.Diagnostics;
|
|
||||||
|
|
||||||
namespace NadekoBot.Classes.JSONModels
|
|
||||||
{
|
|
||||||
public class Credentials
|
|
||||||
{
|
|
||||||
public string Token { get; set; } = "";
|
|
||||||
public string ClientId { get; set; } = "170254782546575360";
|
|
||||||
public ulong BotId { get; set; } = 1231231231231;
|
|
||||||
public ulong[] OwnerIds { get; set; } = { 123123123123, 5675675679845 };
|
|
||||||
public string GoogleAPIKey { get; set; } = "";
|
|
||||||
public string SoundCloudClientID { get; set; } = "";
|
|
||||||
public string MashapeKey { get; set; } = "";
|
|
||||||
public string LOLAPIKey { get; set; } = "";
|
|
||||||
public string TrelloAppKey { get; set; } = "";
|
|
||||||
public string CarbonKey { get; set; } = "";
|
|
||||||
public string OsuAPIKey { get; set; } = "";
|
|
||||||
}
|
|
||||||
[DebuggerDisplay("{items[0].id.playlistId}")]
|
|
||||||
public class YoutubePlaylistSearch
|
|
||||||
{
|
|
||||||
public YtPlaylistItem[] items { get; set; }
|
|
||||||
}
|
|
||||||
public class YtPlaylistItem
|
|
||||||
{
|
|
||||||
public YtPlaylistId id { get; set; }
|
|
||||||
}
|
|
||||||
public class YtPlaylistId
|
|
||||||
{
|
|
||||||
public string kind { get; set; }
|
|
||||||
public string playlistId { get; set; }
|
|
||||||
}
|
|
||||||
[DebuggerDisplay("{items[0].id.videoId}")]
|
|
||||||
public class YoutubeVideoSearch
|
|
||||||
{
|
|
||||||
public YtVideoItem[] items { get; set; }
|
|
||||||
}
|
|
||||||
public class YtVideoItem
|
|
||||||
{
|
|
||||||
public YtVideoId id { get; set; }
|
|
||||||
}
|
|
||||||
public class YtVideoId
|
|
||||||
{
|
|
||||||
public string kind { get; set; }
|
|
||||||
public string videoId { get; set; }
|
|
||||||
}
|
|
||||||
public class PlaylistItemsSearch
|
|
||||||
{
|
|
||||||
public string nextPageToken { get; set; }
|
|
||||||
public PlaylistItem[] items { get; set; }
|
|
||||||
}
|
|
||||||
public class PlaylistItem
|
|
||||||
{
|
|
||||||
public YtVideoId contentDetails { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#region wikpedia example
|
|
||||||
// {
|
|
||||||
// "batchcomplete": true,
|
|
||||||
// "query": {
|
|
||||||
// "normalized": [
|
|
||||||
// {
|
|
||||||
// "from": "u3fn92fb32f9yb329f32",
|
|
||||||
// "to": "U3fn92fb32f9yb329f32"
|
|
||||||
// }
|
|
||||||
// ],
|
|
||||||
// "pages": [
|
|
||||||
// {
|
|
||||||
// "ns": 0,
|
|
||||||
// "title": "U3fn92fb32f9yb329f32",
|
|
||||||
// "missing": true,
|
|
||||||
// "contentmodel": "wikitext",
|
|
||||||
// "pagelanguage": "en",
|
|
||||||
// "pagelanguagehtmlcode": "en",
|
|
||||||
// "pagelanguagedir": "ltr",
|
|
||||||
// "fullurl": "https://en.wikipedia.org/wiki/U3fn92fb32f9yb329f32",
|
|
||||||
// "editurl": "https://en.wikipedia.org/w/index.php?title=U3fn92fb32f9yb329f32&action=edit",
|
|
||||||
// "canonicalurl": "https://en.wikipedia.org/wiki/U3fn92fb32f9yb329f32"
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public class WikipediaApiModel
|
|
||||||
{
|
|
||||||
public WikipediaQuery Query { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class WikipediaQuery
|
|
||||||
{
|
|
||||||
public WikipediaPage[] Pages { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class WikipediaPage
|
|
||||||
{
|
|
||||||
public bool Missing { get; set; } = false;
|
|
||||||
public string FullUrl { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class WoWJoke
|
|
||||||
{
|
|
||||||
public string Question { get; set; }
|
|
||||||
public string Answer { get; set; }
|
|
||||||
public override string ToString() => $"`{Question}`\n\n**{Answer}**";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//{
|
|
||||||
// "kind": "youtube#searchListResponse",
|
|
||||||
// "etag": "\"kiOs9cZLH2FUp6r6KJ8eyq_LIOk/hCJTmyH_v57mh_MvnUFSTHfjzBs\"",
|
|
||||||
// "nextPageToken": "CAEQAA",
|
|
||||||
// "regionCode": "RS",
|
|
||||||
// "pageInfo": {
|
|
||||||
// "totalResults": 4603,
|
|
||||||
// "resultsPerPage": 1
|
|
||||||
// },
|
|
||||||
// "items": [
|
|
||||||
// {
|
|
||||||
// "kind": "youtube#searchResult",
|
|
||||||
// "etag": "\"kiOs9cZLH2FUp6r6KJ8eyq_LIOk/iD1S35mk0xOfwTB_8lpPZ9u-Vzc\"",
|
|
||||||
// "id": {
|
|
||||||
// "kind": "youtube#playlist",
|
|
||||||
// "playlistId": "PLs_KC2CCxJVMfOBnIyW5Kbu_GciNiYNAI"
|
|
||||||
// },
|
|
||||||
// "snippet": {
|
|
||||||
// "publishedAt": "2016-04-14T11:35:29.000Z",
|
|
||||||
// "channelId": "UCMLwm18Qa20L2L-HGpgC3jQ",
|
|
||||||
// "title": "Popular Videos - Otorimonogatari & mousou express",
|
|
||||||
// "description": "",
|
|
||||||
// "thumbnails": {
|
|
||||||
// "default": {
|
|
||||||
// "url": "https://i.ytimg.com/vi/2FeptLky2mU/default.jpg",
|
|
||||||
// "width": 120,
|
|
||||||
// "height": 90
|
|
||||||
// },
|
|
||||||
// "medium": {
|
|
||||||
// "url": "https://i.ytimg.com/vi/2FeptLky2mU/mqdefault.jpg",
|
|
||||||
// "width": 320,
|
|
||||||
// "height": 180
|
|
||||||
// },
|
|
||||||
// "high": {
|
|
||||||
// "url": "https://i.ytimg.com/vi/2FeptLky2mU/hqdefault.jpg",
|
|
||||||
// "width": 480,
|
|
||||||
// "height": 360
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
// "channelTitle": "Otorimonogatari - Topic",
|
|
||||||
// "liveBroadcastContent": "none"
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// ]
|
|
||||||
//}
|
|
@ -9,7 +9,7 @@ using System.Text.RegularExpressions;
|
|||||||
|
|
||||||
namespace NadekoBot.Modules.CustomReactions
|
namespace NadekoBot.Modules.CustomReactions
|
||||||
{
|
{
|
||||||
internal class CustomReactionsModule : DiscordModule
|
public class CustomReactionsModule : DiscordModule
|
||||||
{
|
{
|
||||||
public override string Prefix { get; } = "";
|
public override string Prefix { get; } = "";
|
||||||
|
|
||||||
|
@ -34,6 +34,6 @@ namespace NadekoBot.Classes
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes the CommandBuilder with values using CommandGroupBuilder
|
/// Initializes the CommandBuilder with values using CommandGroupBuilder
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal abstract void Init(CommandGroupBuilder cgb);
|
public abstract void Init(CommandGroupBuilder cgb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ using System.Threading.Tasks;
|
|||||||
namespace NadekoBot.Modules.Permissions.Classes
|
namespace NadekoBot.Modules.Permissions.Classes
|
||||||
{
|
{
|
||||||
|
|
||||||
internal class PermissionChecker : IPermissionChecker
|
public class PermissionChecker : IPermissionChecker
|
||||||
{
|
{
|
||||||
public static PermissionChecker Instance { get; } = new PermissionChecker();
|
public static PermissionChecker Instance { get; } = new PermissionChecker();
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ using System.Linq;
|
|||||||
|
|
||||||
namespace NadekoBot.Modules.Permissions.Classes
|
namespace NadekoBot.Modules.Permissions.Classes
|
||||||
{
|
{
|
||||||
internal static class PermissionHelper
|
public static class PermissionHelper
|
||||||
{
|
{
|
||||||
public static bool ValidateBool(string passedArg)
|
public static bool ValidateBool(string passedArg)
|
||||||
{
|
{
|
||||||
@ -37,7 +37,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static string ValidateModule(string mod)
|
public static string ValidateModule(string mod)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(mod))
|
if (string.IsNullOrWhiteSpace(mod))
|
||||||
throw new ArgumentNullException(nameof(mod));
|
throw new ArgumentNullException(nameof(mod));
|
||||||
@ -50,7 +50,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
throw new ArgumentException("That module does not exist.");
|
throw new ArgumentException("That module does not exist.");
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static string ValidateCommand(string commandText)
|
public static string ValidateCommand(string commandText)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(commandText))
|
if (string.IsNullOrWhiteSpace(commandText))
|
||||||
throw new ArgumentNullException(nameof(commandText));
|
throw new ArgumentNullException(nameof(commandText));
|
||||||
@ -65,7 +65,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
throw new NullReferenceException("That command does not exist.");
|
throw new NullReferenceException("That command does not exist.");
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Role ValidateRole(Server server, string roleName)
|
public static Role ValidateRole(Server server, string roleName)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(roleName))
|
if (string.IsNullOrWhiteSpace(roleName))
|
||||||
throw new ArgumentNullException(nameof(roleName));
|
throw new ArgumentNullException(nameof(roleName));
|
||||||
@ -78,7 +78,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
return role;
|
return role;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Channel ValidateChannel(Server server, string channelName)
|
public static Channel ValidateChannel(Server server, string channelName)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(channelName))
|
if (string.IsNullOrWhiteSpace(channelName))
|
||||||
throw new ArgumentNullException(nameof(channelName));
|
throw new ArgumentNullException(nameof(channelName));
|
||||||
@ -88,7 +88,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
return channel;
|
return channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static User ValidateUser(Server server, string userName)
|
public static User ValidateUser(Server server, string userName)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(userName))
|
if (string.IsNullOrWhiteSpace(userName))
|
||||||
throw new ArgumentNullException(nameof(userName));
|
throw new ArgumentNullException(nameof(userName));
|
||||||
|
@ -41,7 +41,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
Console.WriteLine("Permission initialization complete.");
|
Console.WriteLine("Permission initialization complete.");
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Permissions GetRolePermissionsById(Server server, ulong id)
|
public static Permissions GetRolePermissionsById(Server server, ulong id)
|
||||||
{
|
{
|
||||||
ServerPermissions serverPerms;
|
ServerPermissions serverPerms;
|
||||||
if (!PermissionsDict.TryGetValue(server.Id, out serverPerms))
|
if (!PermissionsDict.TryGetValue(server.Id, out serverPerms))
|
||||||
@ -52,7 +52,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Permissions GetUserPermissionsById(Server server, ulong id)
|
public static Permissions GetUserPermissionsById(Server server, ulong id)
|
||||||
{
|
{
|
||||||
ServerPermissions serverPerms;
|
ServerPermissions serverPerms;
|
||||||
if (!PermissionsDict.TryGetValue(server.Id, out serverPerms))
|
if (!PermissionsDict.TryGetValue(server.Id, out serverPerms))
|
||||||
@ -63,7 +63,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Permissions GetChannelPermissionsById(Server server, ulong id)
|
public static Permissions GetChannelPermissionsById(Server server, ulong id)
|
||||||
{
|
{
|
||||||
ServerPermissions serverPerms;
|
ServerPermissions serverPerms;
|
||||||
if (!PermissionsDict.TryGetValue(server.Id, out serverPerms))
|
if (!PermissionsDict.TryGetValue(server.Id, out serverPerms))
|
||||||
@ -74,13 +74,13 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
return toReturn;
|
return toReturn;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Permissions GetServerPermissions(Server server)
|
public static Permissions GetServerPermissions(Server server)
|
||||||
{
|
{
|
||||||
ServerPermissions serverPerms;
|
ServerPermissions serverPerms;
|
||||||
return !PermissionsDict.TryGetValue(server.Id, out serverPerms) ? null : serverPerms.Permissions;
|
return !PermissionsDict.TryGetValue(server.Id, out serverPerms) ? null : serverPerms.Permissions;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static PermissionBanType GetPermissionBanType(Command command, User user, Channel channel)
|
public static PermissionBanType GetPermissionBanType(Command command, User user, Channel channel)
|
||||||
{
|
{
|
||||||
var server = user.Server;
|
var server = user.Server;
|
||||||
ServerPermissions serverPerms = PermissionsDict.GetOrAdd(server.Id, id => new ServerPermissions(id, server.Name));
|
ServerPermissions serverPerms = PermissionsDict.GetOrAdd(server.Id, id => new ServerPermissions(id, server.Name));
|
||||||
@ -174,7 +174,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
return serverPerms.PermissionsControllerRole;
|
return serverPerms.PermissionsControllerRole;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task SetPermissionsRole(Server server, string roleName)
|
public static async Task SetPermissionsRole(Server server, string roleName)
|
||||||
{
|
{
|
||||||
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
|
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
|
||||||
new ServerPermissions(server.Id, server.Name));
|
new ServerPermissions(server.Id, server.Name));
|
||||||
@ -183,7 +183,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
await WriteServerToJson(serverPerms).ConfigureAwait(false);
|
await WriteServerToJson(serverPerms).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task SetVerbosity(Server server, bool val)
|
public static async Task SetVerbosity(Server server, bool val)
|
||||||
{
|
{
|
||||||
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
|
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
|
||||||
new ServerPermissions(server.Id, server.Name));
|
new ServerPermissions(server.Id, server.Name));
|
||||||
@ -192,7 +192,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
await WriteServerToJson(serverPerms).ConfigureAwait(false);
|
await WriteServerToJson(serverPerms).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task CopyRolePermissions(Role fromRole, Role toRole)
|
public static async Task CopyRolePermissions(Role fromRole, Role toRole)
|
||||||
{
|
{
|
||||||
var server = fromRole.Server;
|
var server = fromRole.Server;
|
||||||
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
|
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
|
||||||
@ -210,7 +210,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
await WriteServerToJson(serverPerms).ConfigureAwait(false);
|
await WriteServerToJson(serverPerms).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task CopyChannelPermissions(Channel fromChannel, Channel toChannel)
|
public static async Task CopyChannelPermissions(Channel fromChannel, Channel toChannel)
|
||||||
{
|
{
|
||||||
var server = fromChannel.Server;
|
var server = fromChannel.Server;
|
||||||
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
|
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
|
||||||
@ -228,7 +228,7 @@ namespace NadekoBot.Modules.Permissions.Classes
|
|||||||
await WriteServerToJson(serverPerms).ConfigureAwait(false);
|
await WriteServerToJson(serverPerms).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task CopyUserPermissions(User fromUser, User toUser)
|
public static async Task CopyUserPermissions(User fromUser, User toUser)
|
||||||
{
|
{
|
||||||
var server = fromUser.Server;
|
var server = fromUser.Server;
|
||||||
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
|
var serverPerms = PermissionsDict.GetOrAdd(server.Id,
|
||||||
|
@ -7,7 +7,7 @@ using System.Text.RegularExpressions;
|
|||||||
|
|
||||||
namespace NadekoBot.Modules.Permissions
|
namespace NadekoBot.Modules.Permissions
|
||||||
{
|
{
|
||||||
internal class FilterInvitesCommand : DiscordCommand
|
public class FilterInvitesCommand : DiscordCommand
|
||||||
{
|
{
|
||||||
private readonly Regex filterRegex = new Regex(@"(?:discord(?:\.gg|app\.com\/invite)\/(?<id>([\w]{16}|(?:[\w]+-?){3})))");
|
private readonly Regex filterRegex = new Regex(@"(?:discord(?:\.gg|app\.com\/invite)\/(?<id>([\w]{16}|(?:[\w]+-?){3})))");
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
return serverPerms.ChannelPermissions.TryGetValue(channel.Id, out perms) && perms.FilterInvites;
|
return serverPerms.ChannelPermissions.TryGetValue(channel.Id, out perms) && perms.FilterInvites;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override void Init(CommandGroupBuilder cgb)
|
public override void Init(CommandGroupBuilder cgb)
|
||||||
{
|
{
|
||||||
cgb.CreateCommand(Module.Prefix + "chnlfilterinv")
|
cgb.CreateCommand(Module.Prefix + "chnlfilterinv")
|
||||||
.Alias(Module.Prefix + "cfi")
|
.Alias(Module.Prefix + "cfi")
|
||||||
|
@ -7,7 +7,7 @@ using System.Linq;
|
|||||||
|
|
||||||
namespace NadekoBot.Modules.Permissions
|
namespace NadekoBot.Modules.Permissions
|
||||||
{
|
{
|
||||||
internal class FilterWords : DiscordCommand
|
public class FilterWords : DiscordCommand
|
||||||
{
|
{
|
||||||
public FilterWords(DiscordModule module) : base(module)
|
public FilterWords(DiscordModule module) : base(module)
|
||||||
{
|
{
|
||||||
@ -47,7 +47,7 @@ namespace NadekoBot.Modules.Permissions
|
|||||||
return serverPerms.ChannelPermissions.TryGetValue(channel.Id, out perms) && perms.FilterWords;
|
return serverPerms.ChannelPermissions.TryGetValue(channel.Id, out perms) && perms.FilterWords;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override void Init(CommandGroupBuilder cgb)
|
public override void Init(CommandGroupBuilder cgb)
|
||||||
{
|
{
|
||||||
cgb.CreateCommand(Module.Prefix + "chnlfilterwords")
|
cgb.CreateCommand(Module.Prefix + "chnlfilterwords")
|
||||||
.Alias(Module.Prefix + "cfw")
|
.Alias(Module.Prefix + "cfw")
|
||||||
|
@ -12,7 +12,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace NadekoBot.Modules.Permissions
|
namespace NadekoBot.Modules.Permissions
|
||||||
{
|
{
|
||||||
internal class PermissionModule : DiscordModule
|
public class PermissionModule : DiscordModule
|
||||||
{
|
{
|
||||||
public override string Prefix { get; } = NadekoBot.Config.CommandPrefixes.Permissions;
|
public override string Prefix { get; } = NadekoBot.Config.CommandPrefixes.Permissions;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user