Added default stuff to db. Added NadekoRandom class. Cleanup.
This commit is contained in:
parent
92c98545e3
commit
5d08e0f14c
52
src/NadekoBot/Attributes/NadekoModule.cs
Normal file
52
src/NadekoBot/Attributes/NadekoModule.cs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
using Discord.Commands;
|
||||||
|
using NadekoBot.Services;
|
||||||
|
using NadekoBot.Services.Database;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NadekoBot.Attributes
|
||||||
|
{
|
||||||
|
[System.AttributeUsage(AttributeTargets.Class)]
|
||||||
|
sealed class NadekoModuleAttribute : ModuleAttribute
|
||||||
|
{
|
||||||
|
//modulename / prefix
|
||||||
|
private static Dictionary<string, string> modulePrefixes = null;
|
||||||
|
public static Dictionary<string, string> ModulePrefixes {
|
||||||
|
get {
|
||||||
|
if (modulePrefixes != null)
|
||||||
|
return modulePrefixes;
|
||||||
|
|
||||||
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
|
{
|
||||||
|
return (modulePrefixes = uow.BotConfig
|
||||||
|
.GetOrCreate()
|
||||||
|
.ModulePrefixes
|
||||||
|
.ToDictionary(p => p.ModuleName, p => p.Prefix));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public NadekoModuleAttribute(string moduleName, string defaultPrefix) : base(GetModulePrefix(moduleName) ?? defaultPrefix)
|
||||||
|
{
|
||||||
|
AppendSpace = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetModulePrefix(string moduleName)
|
||||||
|
{
|
||||||
|
string prefix;
|
||||||
|
if (ModulePrefixes.TryGetValue(moduleName, out prefix))
|
||||||
|
{
|
||||||
|
Console.WriteLine("Cache hit");
|
||||||
|
return prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine("Cache not hit for " + moduleName);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -8,7 +8,7 @@ using NadekoBot.Services.Database.Impl;
|
|||||||
namespace NadekoBot.Migrations
|
namespace NadekoBot.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(NadekoSqliteContext))]
|
[DbContext(typeof(NadekoSqliteContext))]
|
||||||
[Migration("20160908202817_first")]
|
[Migration("20160910180231_first")]
|
||||||
partial class first
|
partial class first
|
||||||
{
|
{
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
@ -173,7 +173,7 @@ namespace NadekoBot.Migrations
|
|||||||
|
|
||||||
b.HasIndex("BotConfigId");
|
b.HasIndex("BotConfigId");
|
||||||
|
|
||||||
b.ToTable("EightBallResponse");
|
b.ToTable("EightBallResponses");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.FollowedStream", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.FollowedStream", b =>
|
||||||
@ -336,7 +336,7 @@ namespace NadekoBot.Migrations
|
|||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
.ValueGeneratedOnAdd();
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
b.Property<int?>("BotConfigId");
|
b.Property<int>("BotConfigId");
|
||||||
|
|
||||||
b.Property<string>("ModuleName");
|
b.Property<string>("ModuleName");
|
||||||
|
|
||||||
@ -346,7 +346,7 @@ namespace NadekoBot.Migrations
|
|||||||
|
|
||||||
b.HasIndex("BotConfigId");
|
b.HasIndex("BotConfigId");
|
||||||
|
|
||||||
b.ToTable("ModulePrefix");
|
b.ToTable("ModulePrefixes");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b =>
|
||||||
@ -403,7 +403,7 @@ namespace NadekoBot.Migrations
|
|||||||
|
|
||||||
b.HasIndex("BotConfigId");
|
b.HasIndex("BotConfigId");
|
||||||
|
|
||||||
b.ToTable("RaceAnimal");
|
b.ToTable("RaceAnimals");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.Reminder", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.Reminder", b =>
|
||||||
@ -532,9 +532,10 @@ namespace NadekoBot.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.ModulePrefix", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.ModulePrefix", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("NadekoBot.Services.Database.Models.BotConfig")
|
b.HasOne("NadekoBot.Services.Database.Models.BotConfig", "BotConfig")
|
||||||
.WithMany("ModulePrefixes")
|
.WithMany("ModulePrefixes")
|
||||||
.HasForeignKey("BotConfigId");
|
.HasForeignKey("BotConfigId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b =>
|
@ -222,7 +222,7 @@ namespace NadekoBot.Migrations
|
|||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "EightBallResponse",
|
name: "EightBallResponses",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<int>(nullable: false)
|
Id = table.Column<int>(nullable: false)
|
||||||
@ -232,9 +232,9 @@ namespace NadekoBot.Migrations
|
|||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_EightBallResponse", x => x.Id);
|
table.PrimaryKey("PK_EightBallResponses", x => x.Id);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_EightBallResponse_BotConfig_BotConfigId",
|
name: "FK_EightBallResponses_BotConfig_BotConfigId",
|
||||||
column: x => x.BotConfigId,
|
column: x => x.BotConfigId,
|
||||||
principalTable: "BotConfig",
|
principalTable: "BotConfig",
|
||||||
principalColumn: "Id",
|
principalColumn: "Id",
|
||||||
@ -242,24 +242,24 @@ namespace NadekoBot.Migrations
|
|||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "ModulePrefix",
|
name: "ModulePrefixes",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<int>(nullable: false)
|
Id = table.Column<int>(nullable: false)
|
||||||
.Annotation("Autoincrement", true),
|
.Annotation("Autoincrement", true),
|
||||||
BotConfigId = table.Column<int>(nullable: true),
|
BotConfigId = table.Column<int>(nullable: false),
|
||||||
ModuleName = table.Column<string>(nullable: true),
|
ModuleName = table.Column<string>(nullable: true),
|
||||||
Prefix = table.Column<string>(nullable: true)
|
Prefix = table.Column<string>(nullable: true)
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_ModulePrefix", x => x.Id);
|
table.PrimaryKey("PK_ModulePrefixes", x => x.Id);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_ModulePrefix_BotConfig_BotConfigId",
|
name: "FK_ModulePrefixes_BotConfig_BotConfigId",
|
||||||
column: x => x.BotConfigId,
|
column: x => x.BotConfigId,
|
||||||
principalTable: "BotConfig",
|
principalTable: "BotConfig",
|
||||||
principalColumn: "Id",
|
principalColumn: "Id",
|
||||||
onDelete: ReferentialAction.Restrict);
|
onDelete: ReferentialAction.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
@ -283,7 +283,7 @@ namespace NadekoBot.Migrations
|
|||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "RaceAnimal",
|
name: "RaceAnimals",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
Id = table.Column<int>(nullable: false)
|
Id = table.Column<int>(nullable: false)
|
||||||
@ -294,9 +294,9 @@ namespace NadekoBot.Migrations
|
|||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_RaceAnimal", x => x.Id);
|
table.PrimaryKey("PK_RaceAnimals", x => x.Id);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_RaceAnimal_BotConfig_BotConfigId",
|
name: "FK_RaceAnimals_BotConfig_BotConfigId",
|
||||||
column: x => x.BotConfigId,
|
column: x => x.BotConfigId,
|
||||||
principalTable: "BotConfig",
|
principalTable: "BotConfig",
|
||||||
principalColumn: "Id",
|
principalColumn: "Id",
|
||||||
@ -451,8 +451,8 @@ namespace NadekoBot.Migrations
|
|||||||
unique: true);
|
unique: true);
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_EightBallResponse_BotConfigId",
|
name: "IX_EightBallResponses_BotConfigId",
|
||||||
table: "EightBallResponse",
|
table: "EightBallResponses",
|
||||||
column: "BotConfigId");
|
column: "BotConfigId");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
@ -482,8 +482,8 @@ namespace NadekoBot.Migrations
|
|||||||
column: "LogSettingId");
|
column: "LogSettingId");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_ModulePrefix_BotConfigId",
|
name: "IX_ModulePrefixes_BotConfigId",
|
||||||
table: "ModulePrefix",
|
table: "ModulePrefixes",
|
||||||
column: "BotConfigId");
|
column: "BotConfigId");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
@ -492,8 +492,8 @@ namespace NadekoBot.Migrations
|
|||||||
column: "BotConfigId");
|
column: "BotConfigId");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_RaceAnimal_BotConfigId",
|
name: "IX_RaceAnimals_BotConfigId",
|
||||||
table: "RaceAnimal",
|
table: "RaceAnimals",
|
||||||
column: "BotConfigId");
|
column: "BotConfigId");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
@ -527,7 +527,7 @@ namespace NadekoBot.Migrations
|
|||||||
name: "Donators");
|
name: "Donators");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "EightBallResponse");
|
name: "EightBallResponses");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "FollowedStream");
|
name: "FollowedStream");
|
||||||
@ -539,7 +539,7 @@ namespace NadekoBot.Migrations
|
|||||||
name: "IgnoredVoicePresenceCHannels");
|
name: "IgnoredVoicePresenceCHannels");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "ModulePrefix");
|
name: "ModulePrefixes");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "PlayingStatus");
|
name: "PlayingStatus");
|
||||||
@ -548,7 +548,7 @@ namespace NadekoBot.Migrations
|
|||||||
name: "Quotes");
|
name: "Quotes");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "RaceAnimal");
|
name: "RaceAnimals");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Reminders");
|
name: "Reminders");
|
@ -172,7 +172,7 @@ namespace NadekoBot.Migrations
|
|||||||
|
|
||||||
b.HasIndex("BotConfigId");
|
b.HasIndex("BotConfigId");
|
||||||
|
|
||||||
b.ToTable("EightBallResponse");
|
b.ToTable("EightBallResponses");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.FollowedStream", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.FollowedStream", b =>
|
||||||
@ -335,7 +335,7 @@ namespace NadekoBot.Migrations
|
|||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
.ValueGeneratedOnAdd();
|
.ValueGeneratedOnAdd();
|
||||||
|
|
||||||
b.Property<int?>("BotConfigId");
|
b.Property<int>("BotConfigId");
|
||||||
|
|
||||||
b.Property<string>("ModuleName");
|
b.Property<string>("ModuleName");
|
||||||
|
|
||||||
@ -345,7 +345,7 @@ namespace NadekoBot.Migrations
|
|||||||
|
|
||||||
b.HasIndex("BotConfigId");
|
b.HasIndex("BotConfigId");
|
||||||
|
|
||||||
b.ToTable("ModulePrefix");
|
b.ToTable("ModulePrefixes");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b =>
|
||||||
@ -402,7 +402,7 @@ namespace NadekoBot.Migrations
|
|||||||
|
|
||||||
b.HasIndex("BotConfigId");
|
b.HasIndex("BotConfigId");
|
||||||
|
|
||||||
b.ToTable("RaceAnimal");
|
b.ToTable("RaceAnimals");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.Reminder", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.Reminder", b =>
|
||||||
@ -531,9 +531,10 @@ namespace NadekoBot.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.ModulePrefix", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.ModulePrefix", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("NadekoBot.Services.Database.Models.BotConfig")
|
b.HasOne("NadekoBot.Services.Database.Models.BotConfig", "BotConfig")
|
||||||
.WithMany("ModulePrefixes")
|
.WithMany("ModulePrefixes")
|
||||||
.HasForeignKey("BotConfigId");
|
.HasForeignKey("BotConfigId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b =>
|
modelBuilder.Entity("NadekoBot.Services.Database.Models.PlayingStatus", b =>
|
||||||
|
@ -61,7 +61,7 @@ namespace NadekoBot.Modules.Administration
|
|||||||
//public async Task Scsc(IUserMessage msg)
|
//public async Task Scsc(IUserMessage msg)
|
||||||
//{
|
//{
|
||||||
// var channel = (ITextChannel)msg.Channel;
|
// var channel = (ITextChannel)msg.Channel;
|
||||||
// var token = new Random().Next();
|
// var token = new NadekoRandom().Next();
|
||||||
// var set = new HashSet<ITextChannel>();
|
// var set = new HashSet<ITextChannel>();
|
||||||
// if (Subscribers.TryAdd(token, set))
|
// if (Subscribers.TryAdd(token, set))
|
||||||
// {
|
// {
|
||||||
|
@ -1,220 +0,0 @@
|
|||||||
//using Discord;
|
|
||||||
//using Discord.Commands;
|
|
||||||
//using NadekoBot.Classes;
|
|
||||||
//using NadekoBot.Extensions;
|
|
||||||
//using NadekoBot.Modules.Permissions.Classes;
|
|
||||||
//using System;
|
|
||||||
//using System.Collections.Concurrent;
|
|
||||||
//using System.Collections.Generic;
|
|
||||||
//using System.Linq;
|
|
||||||
//using System.Threading.Tasks;
|
|
||||||
|
|
||||||
////todo DB
|
|
||||||
////todo Add flags for every event
|
|
||||||
//namespace NadekoBot.Modules.Administration
|
|
||||||
//{
|
|
||||||
// public class LogCommand : DiscordCommand
|
|
||||||
// {
|
|
||||||
// private string prettyCurrentTime => $"【{DateTime.Now:HH:mm:ss}】";
|
|
||||||
|
|
||||||
// private ConcurrentBag<KeyValuePair<Channel, string>> voicePresenceUpdates = new ConcurrentBag<KeyValuePair<Channel, string>>();
|
|
||||||
|
|
||||||
// public LogCommand(DiscordModule module) : base(module)
|
|
||||||
// {
|
|
||||||
// NadekoBot.Client.MessageReceived += MsgRecivd;
|
|
||||||
// NadekoBot.Client.MessageDeleted += MsgDltd;
|
|
||||||
// NadekoBot.Client.MessageUpdated += MsgUpdtd;
|
|
||||||
// NadekoBot.Client.UserUpdated += UsrUpdtd;
|
|
||||||
// NadekoBot.Client.UserBanned += UsrBanned;
|
|
||||||
// NadekoBot.Client.UserLeft += UsrLeft;
|
|
||||||
// NadekoBot.Client.UserJoined += UsrJoined;
|
|
||||||
// NadekoBot.Client.UserUnbanned += UsrUnbanned;
|
|
||||||
// NadekoBot.Client.ChannelCreated += ChannelCreated;
|
|
||||||
// NadekoBot.Client.ChannelDestroyed += ChannelDestroyed;
|
|
||||||
// NadekoBot.Client.ChannelUpdated += ChannelUpdated;
|
|
||||||
|
|
||||||
// // start the userpresence queue
|
|
||||||
|
|
||||||
|
|
||||||
// private async void MsgRecivd(object sender, MessageEventArgs e)
|
|
||||||
// {
|
|
||||||
// try
|
|
||||||
// {
|
|
||||||
// if (e.Server == null || e.Channel.IsPrivate || umsg.Author.Id == NadekoBot.Client.CurrentUser.Id)
|
|
||||||
// return;
|
|
||||||
// var config = SpecificConfigurations.Default.Of(e.Server.Id);
|
|
||||||
// var chId = config.LogServerChannel;
|
|
||||||
// if (chId == null || e.Channel.Id == chId || config.LogserverIgnoreChannels.Contains(e.Channel.Id))
|
|
||||||
// return;
|
|
||||||
// Channel ch;
|
|
||||||
// if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) == null)
|
|
||||||
// return;
|
|
||||||
// if (!string.IsNullOrWhiteSpace(e.Message.Text))
|
|
||||||
// {
|
|
||||||
// await ch.SendMessageAsync(
|
|
||||||
// $@"🕔`{prettyCurrentTime}` **New Message** `#{e.Channel.Name}`
|
|
||||||
//👤`{umsg.Author?.ToString() ?? ("NULL")}` {e.Message.Text.Unmention()}").ConfigureAwait(false);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// await ch.SendMessageAsync(
|
|
||||||
// $@"🕔`{prettyCurrentTime}` **File Uploaded** `#{e.Channel.Name}`
|
|
||||||
//👤`{umsg.Author?.ToString() ?? ("NULL")}` {e.Message.Attachments.FirstOrDefault()?.ProxyUrl}").ConfigureAwait(false);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
// catch { }
|
|
||||||
|
|
||||||
// private async void UsrUpdtd(object sender, UserUpdatedEventArgs e)
|
|
||||||
// {
|
|
||||||
// try
|
|
||||||
// {
|
|
||||||
// var chId = SpecificConfigurations.Default.Of(e.Server.Id).LogServerChannel;
|
|
||||||
// if (chId == null)
|
|
||||||
// return;
|
|
||||||
// Channel ch;
|
|
||||||
// if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) == null)
|
|
||||||
// return;
|
|
||||||
// string str = $"🕔`{prettyCurrentTime}`";
|
|
||||||
// if (e.Before.Name != e.After.Name)
|
|
||||||
// str += $"**Name Changed**👤`{e.Before?.ToString()}`\n\t\t`New:`{e.After.ToString()}`";
|
|
||||||
// else if (e.Before.Nickname != e.After.Nickname)
|
|
||||||
// str += $"**Nickname Changed**👤`{e.Before?.ToString()}`\n\t\t`Old:` {e.Before.Nickname}#{e.Before.Discriminator}\n\t\t`New:` {e.After.Nickname}#{e.After.Discriminator}";
|
|
||||||
// else if (e.Before.AvatarUrl != e.After.AvatarUrl)
|
|
||||||
// str += $"**Avatar Changed**👤`{e.Before?.ToString()}`\n\t {await e.Before.AvatarUrl.ShortenUrl()} `=>` {await e.After.AvatarUrl.ShortenUrl()}";
|
|
||||||
// else if (!e.Before.Roles.SequenceEqual(e.After.Roles))
|
|
||||||
// {
|
|
||||||
// if (e.Before.Roles.Count() < e.After.Roles.Count())
|
|
||||||
// {
|
|
||||||
// var diffRoles = e.After.Roles.Where(r => !e.Before.Roles.Contains(r)).Select(r => "`" + r.Name + "`");
|
|
||||||
// str += $"**User's Roles changed ⚔➕**👤`{e.Before?.ToString()}`\n\tNow has {string.Join(", ", diffRoles)} role.";
|
|
||||||
// }
|
|
||||||
// else if (e.Before.Roles.Count() > e.After.Roles.Count())
|
|
||||||
// {
|
|
||||||
// var diffRoles = e.Before.Roles.Where(r => !e.After.Roles.Contains(r)).Select(r => "`" + r.Name + "`");
|
|
||||||
// str += $"**User's Roles changed ⚔➖**👤`{e.Before?.ToString()}`\n\tNo longer has {string.Join(", ", diffRoles)} role.";
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// Console.WriteLine("SEQUENCE NOT EQUAL BUT NO DIFF ROLES - REPORT TO KWOTH on #NADEKOLOG server");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// return;
|
|
||||||
// await ch.SendMessageAsync(str).ConfigureAwait(false);
|
|
||||||
// }
|
|
||||||
// catch { }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// public override void Init(CommandGroupBuilder cgb)
|
|
||||||
// {
|
|
||||||
|
|
||||||
// cgb.CreateCommand(Module.Prefix + "spmom")
|
|
||||||
// .Description($"Toggles whether mentions of other offline users on your server will send a pm to them. **Needs Manage Server Permissions.**| `{Prefix}spmom`")
|
|
||||||
// .AddCheck(SimpleCheckers.ManageServer())
|
|
||||||
// .Do(async e =>
|
|
||||||
// {
|
|
||||||
// var specificConfig = SpecificConfigurations.Default.Of(e.Server.Id);
|
|
||||||
// specificConfig.SendPrivateMessageOnMention =
|
|
||||||
// !specificConfig.SendPrivateMessageOnMention;
|
|
||||||
// if (specificConfig.SendPrivateMessageOnMention)
|
|
||||||
// await channel.SendMessageAsync(":ok: I will send private messages " +
|
|
||||||
// "to mentioned offline users.").ConfigureAwait(false);
|
|
||||||
// else
|
|
||||||
// await channel.SendMessageAsync(":ok: I won't send private messages " +
|
|
||||||
// "to mentioned offline users anymore.").ConfigureAwait(false);
|
|
||||||
// });
|
|
||||||
|
|
||||||
// cgb.CreateCommand(Module.Prefix + "logserver")
|
|
||||||
// .Description($"Toggles logging in this channel. Logs every message sent/deleted/edited on the server. **Bot Owner Only!** | `{Prefix}logserver`")
|
|
||||||
// .AddCheck(SimpleCheckers.OwnerOnly())
|
|
||||||
// .AddCheck(SimpleCheckers.ManageServer())
|
|
||||||
// .Do(async e =>
|
|
||||||
// {
|
|
||||||
// var chId = SpecificConfigurations.Default.Of(e.Server.Id).LogServerChannel;
|
|
||||||
// if (chId == null)
|
|
||||||
// {
|
|
||||||
// SpecificConfigurations.Default.Of(e.Server.Id).LogServerChannel = e.Channel.Id;
|
|
||||||
// await channel.SendMessageAsync($"❗**I WILL BEGIN LOGGING SERVER ACTIVITY IN THIS CHANNEL**❗").ConfigureAwait(false);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// Channel ch;
|
|
||||||
// if ((ch = e.Server.TextChannels.Where(tc => tc.Id == chId).FirstOrDefault()) == null)
|
|
||||||
// return;
|
|
||||||
|
|
||||||
// SpecificConfigurations.Default.Of(e.Server.Id).LogServerChannel = null;
|
|
||||||
// await channel.SendMessageAsync($"❗**NO LONGER LOGGING IN {ch.Mention} CHANNEL**❗").ConfigureAwait(false);
|
|
||||||
// });
|
|
||||||
|
|
||||||
|
|
||||||
// cgb.CreateCommand(Prefix + "logignore")
|
|
||||||
// .Description($"Toggles whether the {Prefix}logserver command ignores this channel. Useful if you have hidden admin channel and public log channel. **Bot Owner Only!**| `{Prefix}logignore`")
|
|
||||||
// .AddCheck(SimpleCheckers.OwnerOnly())
|
|
||||||
// .AddCheck(SimpleCheckers.ManageServer())
|
|
||||||
// .Do(async e =>
|
|
||||||
// {
|
|
||||||
// var config = SpecificConfigurations.Default.Of(e.Server.Id);
|
|
||||||
// if (config.LogserverIgnoreChannels.Remove(e.Channel.Id))
|
|
||||||
// {
|
|
||||||
// await channel.SendMessageAsync($"`{Prefix}logserver will stop ignoring this channel.`");
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// config.LogserverIgnoreChannels.Add(e.Channel.Id);
|
|
||||||
// await channel.SendMessageAsync($"`{Prefix}logserver will ignore this channel.`");
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
|
|
||||||
// cgb.CreateCommand(Module.Prefix + "userpresence")
|
|
||||||
// .Description($"Starts logging to this channel when someone from the server goes online/offline/idle. **Needs Manage Server Permissions.**| `{Prefix}userpresence`")
|
|
||||||
// .AddCheck(SimpleCheckers.ManageServer())
|
|
||||||
// .Do(async e =>
|
|
||||||
// {
|
|
||||||
// var chId = SpecificConfigurations.Default.Of(e.Server.Id).LogPresenceChannel;
|
|
||||||
// if (chId == null)
|
|
||||||
// {
|
|
||||||
// SpecificConfigurations.Default.Of(e.Server.Id).LogPresenceChannel = e.Channel.Id;
|
|
||||||
// await channel.SendMessageAsync($"**User presence notifications enabled.**").ConfigureAwait(false);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// SpecificConfigurations.Default.Of(e.Server.Id).LogPresenceChannel = null;
|
|
||||||
// await channel.SendMessageAsync($"**User presence notifications disabled.**").ConfigureAwait(false);
|
|
||||||
// });
|
|
||||||
|
|
||||||
// cgb.CreateCommand(Module.Prefix + "voicepresence")
|
|
||||||
// .Description($"Toggles logging to this channel whenever someone joins or leaves a voice channel you are in right now. **Needs Manage Server Permissions.**| `{Prefix}voicerpresence`")
|
|
||||||
// .Parameter("all", ParameterType.Optional)
|
|
||||||
// .AddCheck(SimpleCheckers.ManageServer())
|
|
||||||
// .Do(async e =>
|
|
||||||
// {
|
|
||||||
|
|
||||||
// var config = SpecificConfigurations.Default.Of(e.Server.Id);
|
|
||||||
// if (all?.ToLower() == "all")
|
|
||||||
// {
|
|
||||||
// foreach (var voiceChannel in e.Server.VoiceChannels)
|
|
||||||
// {
|
|
||||||
// config.VoiceChannelLog.TryAdd(voiceChannel.Id, e.Channel.Id);
|
|
||||||
// }
|
|
||||||
// await channel.SendMessageAsync("Started logging user presence for **ALL** voice channels!").ConfigureAwait(false);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (umsg.Author.VoiceChannel == null)
|
|
||||||
// {
|
|
||||||
// await channel.SendMessageAsync("💢 You are not in a voice channel right now. If you are, please rejoin it.").ConfigureAwait(false);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// ulong throwaway;
|
|
||||||
// if (!config.VoiceChannelLog.TryRemove(umsg.Author.VoiceChannel.Id, out throwaway))
|
|
||||||
// {
|
|
||||||
// config.VoiceChannelLog.TryAdd(umsg.Author.VoiceChannel.Id, e.Channel.Id);
|
|
||||||
// await channel.SendMessageAsync($"`Logging user updates for` {umsg.Author.VoiceChannel.Mention} `voice channel.`").ConfigureAwait(false);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// await channel.SendMessageAsync($"`Stopped logging user updates for` {umsg.Author.VoiceChannel.Mention} `voice channel.`").ConfigureAwait(false);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
@ -49,12 +49,14 @@ namespace NadekoBot.Modules.Administration
|
|||||||
t = new Timer(async (state) =>
|
t = new Timer(async (state) =>
|
||||||
{
|
{
|
||||||
var keys = UserPresenceUpdates.Keys.ToList();
|
var keys = UserPresenceUpdates.Keys.ToList();
|
||||||
foreach (var key in keys)
|
|
||||||
|
await Task.WhenAll(keys.Select(key =>
|
||||||
{
|
{
|
||||||
List<string> messages;
|
List<string> messages;
|
||||||
if (UserPresenceUpdates.TryRemove(key, out messages))
|
if (UserPresenceUpdates.TryRemove(key, out messages))
|
||||||
try { await key.SendMessageAsync(string.Join(Environment.NewLine, messages)); } catch { } //502/403
|
try { return key.SendMessageAsync(string.Join(Environment.NewLine, messages)); } catch { } //502/403
|
||||||
}
|
return Task.CompletedTask;
|
||||||
|
}));
|
||||||
}, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10));
|
}, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10));
|
||||||
|
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
private async Task StartRace()
|
private async Task StartRace()
|
||||||
{
|
{
|
||||||
var rng = new Random();
|
var rng = new NadekoRandom();
|
||||||
Participant winner = null;
|
Participant winner = null;
|
||||||
IUserMessage msg = null;
|
IUserMessage msg = null;
|
||||||
int place = 1;
|
int place = 1;
|
||||||
@ -194,14 +194,15 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task Client_MessageReceived(IMessage imsg)
|
private Task Client_MessageReceived(IMessage imsg)
|
||||||
{
|
{
|
||||||
var msg = imsg as IUserMessage;
|
var msg = imsg as IUserMessage;
|
||||||
if (msg == null)
|
if (msg == null)
|
||||||
return;
|
return Task.CompletedTask;
|
||||||
if (msg.IsAuthor() || !(imsg.Channel is ITextChannel) || imsg.Channel != raceChannel)
|
if (msg.IsAuthor() || !(imsg.Channel is ITextChannel) || imsg.Channel != raceChannel)
|
||||||
return;
|
return Task.CompletedTask;
|
||||||
messagesSinceGameStarted++;
|
messagesSinceGameStarted++;
|
||||||
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task CheckForFullGameAsync(CancellationToken cancelToken)
|
private async Task CheckForFullGameAsync(CancellationToken cancelToken)
|
||||||
|
@ -2,6 +2,7 @@ using Discord;
|
|||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
|
using NadekoBot.Services;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -27,7 +28,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
private async Task publicRoll(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 NadekoRandom();
|
||||||
//if (string.IsNullOrWhiteSpace(arg))
|
//if (string.IsNullOrWhiteSpace(arg))
|
||||||
//{
|
//{
|
||||||
// var gen = r.Next(0, 101);
|
// var gen = r.Next(0, 101);
|
||||||
@ -124,11 +125,11 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
.ToArray();
|
.ToArray();
|
||||||
if (arr[0] > arr[1])
|
if (arr[0] > arr[1])
|
||||||
throw new ArgumentException("First argument should be bigger than the second one.");
|
throw new ArgumentException("First argument should be bigger than the second one.");
|
||||||
rolled = new Random().Next(arr[0], arr[1] + 1);
|
rolled = new NadekoRandom().Next(arr[0], arr[1] + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rolled = new Random().Next(0, int.Parse(range) + 1);
|
rolled = new NadekoRandom().Next(0, int.Parse(range) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
await channel.SendMessageAsync($"{umsg.Author.Mention} rolled **{rolled}**.").ConfigureAwait(false);
|
await channel.SendMessageAsync($"{umsg.Author.Mention} rolled **{rolled}**.").ConfigureAwait(false);
|
||||||
|
@ -66,7 +66,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
// var isHeads = guessStr == "HEADS" || guessStr == "H";
|
// var isHeads = guessStr == "HEADS" || guessStr == "H";
|
||||||
// bool result = false;
|
// bool result = false;
|
||||||
// var rng = new Random();
|
// var rng = new NadekoRandom();
|
||||||
// if (rng.Next(0, 2) == 1)
|
// if (rng.Next(0, 2) == 1)
|
||||||
// {
|
// {
|
||||||
// await channel.SendFileAsync("heads.png", Properties.Resources.heads.ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false);
|
// await channel.SendFileAsync("heads.png", Properties.Resources.heads.ToStream(System.Drawing.Imaging.ImageFormat.Png)).ConfigureAwait(false);
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
using System;
|
using NadekoBot.Extensions;
|
||||||
|
using NadekoBot.Services;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
@ -114,7 +116,7 @@ namespace NadekoBot.Modules.Gambling.Models
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private Random r = new Random();
|
private Random r = new NadekoRandom();
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Take a card from the pool, you either take it from the top if the deck is shuffled, or from a random place if the deck is in the default order.
|
/// Take a card from the pool, you either take it from the top if the deck is shuffled, or from a random place if the deck is in the default order.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -143,7 +145,7 @@ namespace NadekoBot.Modules.Gambling.Models
|
|||||||
private void Shuffle()
|
private void Shuffle()
|
||||||
{
|
{
|
||||||
if (cardPool.Count <= 1) return;
|
if (cardPool.Count <= 1) return;
|
||||||
var orderedPool = cardPool.OrderBy(x => r.Next());
|
var orderedPool = cardPool.Shuffle();
|
||||||
cardPool = cardPool as List<Card> ?? orderedPool.ToList();
|
cardPool = cardPool as List<Card> ?? orderedPool.ToList();
|
||||||
}
|
}
|
||||||
public override string ToString() => string.Concat(cardPool.Select(c => c.ToString())) + Environment.NewLine;
|
public override string ToString() => string.Concat(cardPool.Select(c => c.ToString())) + Environment.NewLine;
|
||||||
|
@ -43,7 +43,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
var members = role.Members().Where(u => u.Status == UserStatus.Online);
|
var members = role.Members().Where(u => u.Status == UserStatus.Online);
|
||||||
var membersArray = members as IUser[] ?? members.ToArray();
|
var membersArray = members as IUser[] ?? members.ToArray();
|
||||||
var usr = membersArray[new Random().Next(0, membersArray.Length)];
|
var usr = membersArray[new NadekoRandom().Next(0, membersArray.Length)];
|
||||||
await channel.SendMessageAsync($"**Raffled user:** {usr.Username} (id: {usr.Id})").ConfigureAwait(false);
|
await channel.SendMessageAsync($"**Raffled user:** {usr.Username} (id: {usr.Id})").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ namespace NadekoBot.Modules.Gambling
|
|||||||
|
|
||||||
await CurrencyHandler.RemoveCurrencyAsync(guildUser, "Betroll Gamble", amount, false).ConfigureAwait(false);
|
await CurrencyHandler.RemoveCurrencyAsync(guildUser, "Betroll Gamble", amount, false).ConfigureAwait(false);
|
||||||
|
|
||||||
var rng = new Random().Next(0, 101);
|
var rng = new NadekoRandom().Next(0, 101);
|
||||||
var str = $"{guildUser.Mention} `You rolled {rng}.` ";
|
var str = $"{guildUser.Mention} `You rolled {rng}.` ";
|
||||||
if (rng < 67)
|
if (rng < 67)
|
||||||
{
|
{
|
||||||
|
@ -44,7 +44,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
public PlantPickCommands()
|
public PlantPickCommands()
|
||||||
{
|
{
|
||||||
NadekoBot.Client.MessageReceived += PotentialFlowerGeneration;
|
NadekoBot.Client.MessageReceived += PotentialFlowerGeneration;
|
||||||
rng = new Random();
|
rng = new NadekoRandom();
|
||||||
|
|
||||||
using (var uow = DbHandler.UnitOfWork())
|
using (var uow = DbHandler.UnitOfWork())
|
||||||
{
|
{
|
||||||
|
@ -100,11 +100,11 @@ namespace NadekoBot.Modules.Games.Trivia
|
|||||||
ShouldStopGame = true;
|
ShouldStopGame = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task PotentialGuess(IMessage imsg)
|
private Task PotentialGuess(IMessage imsg)
|
||||||
{
|
{
|
||||||
var umsg = imsg as IUserMessage;
|
var umsg = imsg as IUserMessage;
|
||||||
if (umsg == null)
|
if (umsg == null)
|
||||||
return;
|
return Task.CompletedTask;
|
||||||
var t = Task.Run(async () =>
|
var t = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -135,6 +135,7 @@ namespace NadekoBot.Modules.Games.Trivia
|
|||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
});
|
});
|
||||||
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetLeaderboard()
|
public string GetLeaderboard()
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using Newtonsoft.Json.Linq;
|
using NadekoBot.Services;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@ -11,7 +12,7 @@ namespace NadekoBot.Modules.Games.Trivia
|
|||||||
public static TriviaQuestionPool Instance { get; } = new TriviaQuestionPool();
|
public static TriviaQuestionPool Instance { get; } = new TriviaQuestionPool();
|
||||||
public HashSet<TriviaQuestion> pool = new HashSet<TriviaQuestion>();
|
public HashSet<TriviaQuestion> pool = new HashSet<TriviaQuestion>();
|
||||||
|
|
||||||
private Random rng { get; } = new Random();
|
private Random rng { get; } = new NadekoRandom();
|
||||||
|
|
||||||
static TriviaQuestionPool() { }
|
static TriviaQuestionPool() { }
|
||||||
|
|
||||||
@ -36,7 +37,7 @@ namespace NadekoBot.Modules.Games.Trivia
|
|||||||
var tq = new TriviaQuestion(item["Question"].ToString(), item["Answer"].ToString(), item["Category"]?.ToString());
|
var tq = new TriviaQuestion(item["Question"].ToString(), item["Answer"].ToString(), item["Category"]?.ToString());
|
||||||
pool.Add(tq);
|
pool.Add(tq);
|
||||||
}
|
}
|
||||||
var r = new Random();
|
var r = new NadekoRandom();
|
||||||
pool = new HashSet<TriviaQuestion>(pool.OrderBy(x => r.Next()));
|
pool = new HashSet<TriviaQuestion>(pool.OrderBy(x => r.Next()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
var listArr = list.Split(';');
|
var listArr = list.Split(';');
|
||||||
if (listArr.Count() < 2)
|
if (listArr.Count() < 2)
|
||||||
return;
|
return;
|
||||||
var rng = new Random();
|
var rng = new NadekoRandom();
|
||||||
await channel.SendMessageAsync(listArr[rng.Next(0, listArr.Length)]).ConfigureAwait(false);
|
await channel.SendMessageAsync(listArr[rng.Next(0, listArr.Length)]).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(question))
|
if (string.IsNullOrWhiteSpace(question))
|
||||||
return;
|
return;
|
||||||
var rng = new Random();
|
var rng = new NadekoRandom();
|
||||||
await channel.SendMessageAsync($@":question: `Question` __**{question}**__
|
await channel.SendMessageAsync($@":question: `Question` __**{question}**__
|
||||||
🎱 `8Ball Answers` __**{_8BallResponses.Shuffle().FirstOrDefault()}**__").ConfigureAwait(false);
|
🎱 `8Ball Answers` __**{_8BallResponses.Shuffle().FirstOrDefault()}**__").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -90,7 +90,7 @@ namespace NadekoBot.Modules.Games
|
|||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var nadekoPick = new Random().Next(0, 3);
|
var nadekoPick = new NadekoRandom().Next(0, 3);
|
||||||
var msg = "";
|
var msg = "";
|
||||||
if (pick == nadekoPick)
|
if (pick == nadekoPick)
|
||||||
msg = $"It's a draw! Both picked :{GetRPSPick(pick)}:";
|
msg = $"It's a draw! Both picked :{GetRPSPick(pick)}:";
|
||||||
|
@ -37,41 +37,44 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Next(IUserMessage umsg)
|
public Task Next(IUserMessage umsg)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)umsg.Channel;
|
||||||
|
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return;
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask;
|
||||||
if (musicPlayer.PlaybackVoiceChannel == ((IGuildUser)umsg.Author).VoiceChannel)
|
if (musicPlayer.PlaybackVoiceChannel == ((IGuildUser)umsg.Author).VoiceChannel)
|
||||||
musicPlayer.Next();
|
musicPlayer.Next();
|
||||||
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Stop(IUserMessage umsg)
|
public Task Stop(IUserMessage umsg)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)umsg.Channel;
|
||||||
|
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return;
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask;
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel == musicPlayer.PlaybackVoiceChannel)
|
if (((IGuildUser)umsg.Author).VoiceChannel == musicPlayer.PlaybackVoiceChannel)
|
||||||
{
|
{
|
||||||
musicPlayer.Autoplay = false;
|
musicPlayer.Autoplay = false;
|
||||||
musicPlayer.Stop();
|
musicPlayer.Stop();
|
||||||
}
|
}
|
||||||
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Destroy(IUserMessage umsg)
|
public Task Destroy(IUserMessage umsg)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)umsg.Channel;
|
||||||
|
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryRemove(channel.Guild.Id, out musicPlayer)) return;
|
if (!MusicPlayers.TryRemove(channel.Guild.Id, out musicPlayer)) return Task.CompletedTask;
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel == musicPlayer.PlaybackVoiceChannel)
|
if (((IGuildUser)umsg.Author).VoiceChannel == musicPlayer.PlaybackVoiceChannel)
|
||||||
musicPlayer.Destroy();
|
musicPlayer.Destroy();
|
||||||
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
@ -204,28 +207,30 @@ namespace NadekoBot.Modules.Music
|
|||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Mute(IUserMessage umsg)
|
public Task Mute(IUserMessage umsg)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)umsg.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
return;
|
return Task.CompletedTask;
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
||||||
return;
|
return Task.CompletedTask;
|
||||||
musicPlayer.SetVolume(0);
|
musicPlayer.SetVolume(0);
|
||||||
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
[RequireContext(ContextType.Guild)]
|
[RequireContext(ContextType.Guild)]
|
||||||
public async Task Max(IUserMessage umsg)
|
public Task Max(IUserMessage umsg)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)umsg.Channel;
|
||||||
MusicPlayer musicPlayer;
|
MusicPlayer musicPlayer;
|
||||||
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (!MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
return;
|
return Task.CompletedTask;
|
||||||
if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
if (((IGuildUser)umsg.Author).VoiceChannel != musicPlayer.PlaybackVoiceChannel)
|
||||||
return;
|
return Task.CompletedTask;
|
||||||
musicPlayer.SetVolume(100);
|
musicPlayer.SetVolume(100);
|
||||||
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
@ -395,7 +400,7 @@ namespace NadekoBot.Modules.Music
|
|||||||
var voiceChannel = ((IGuildUser)umsg.Author).VoiceChannel;
|
var voiceChannel = ((IGuildUser)umsg.Author).VoiceChannel;
|
||||||
if (voiceChannel == null || voiceChannel.Guild != channel.Guild || !MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
if (voiceChannel == null || voiceChannel.Guild != channel.Guild || !MusicPlayers.TryGetValue(channel.Guild.Id, out musicPlayer))
|
||||||
return;
|
return;
|
||||||
musicPlayer.MoveToVoiceChannel(voiceChannel);
|
await musicPlayer.MoveToVoiceChannel(voiceChannel);
|
||||||
}
|
}
|
||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
|
@ -116,7 +116,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
JToken obj;
|
JToken obj;
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
obj = JArray.Parse(await http.GetStringAsync($"http://api.oboobs.ru/boobs/{ new Random().Next(0, 9880) }").ConfigureAwait(false))[0];
|
obj = JArray.Parse(await http.GetStringAsync($"http://api.oboobs.ru/boobs/{ new NadekoRandom().Next(0, 9880) }").ConfigureAwait(false))[0];
|
||||||
}
|
}
|
||||||
await channel.SendMessageAsync($"http://media.oboobs.ru/{ obj["preview"].ToString() }").ConfigureAwait(false);
|
await channel.SendMessageAsync($"http://media.oboobs.ru/{ obj["preview"].ToString() }").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -137,7 +137,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
JToken obj;
|
JToken obj;
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
obj = JArray.Parse(await http.GetStringAsync($"http://api.obutts.ru/butts/{ new Random().Next(0, 3873) }").ConfigureAwait(false))[0];
|
obj = JArray.Parse(await http.GetStringAsync($"http://api.obutts.ru/butts/{ new NadekoRandom().Next(0, 3873) }").ConfigureAwait(false))[0];
|
||||||
}
|
}
|
||||||
await channel.SendMessageAsync($"http://media.obutts.ru/{ obj["preview"].ToString() }").ConfigureAwait(false);
|
await channel.SendMessageAsync($"http://media.obutts.ru/{ obj["preview"].ToString() }").ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@ -149,7 +149,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
|
|
||||||
public static async Task<string> GetDanbooruImageLink(string tag)
|
public static async Task<string> GetDanbooruImageLink(string tag)
|
||||||
{
|
{
|
||||||
var rng = new Random();
|
var rng = new NadekoRandom();
|
||||||
|
|
||||||
if (tag == "loli") //loli doesn't work for some reason atm
|
if (tag == "loli") //loli doesn't work for some reason atm
|
||||||
tag = "flat_chest";
|
tag = "flat_chest";
|
||||||
@ -181,7 +181,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
if (matches.Count == 0)
|
if (matches.Count == 0)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var rng = new Random();
|
var rng = new NadekoRandom();
|
||||||
var match = matches[rng.Next(0, matches.Count)];
|
var match = matches[rng.Next(0, matches.Count)];
|
||||||
return matches[rng.Next(0, matches.Count)].Groups["url"].Value;
|
return matches[rng.Next(0, matches.Count)].Groups["url"].Value;
|
||||||
}
|
}
|
||||||
@ -189,7 +189,7 @@ namespace NadekoBot.Modules.NSFW
|
|||||||
|
|
||||||
public static async Task<string> GetRule34ImageLink(string tag)
|
public static async Task<string> GetRule34ImageLink(string tag)
|
||||||
{
|
{
|
||||||
var rng = new Random();
|
var rng = new NadekoRandom();
|
||||||
var url =
|
var url =
|
||||||
$"http://rule34.xxx/index.php?page=dapi&s=post&q=index&limit=100&tags={tag.Replace(" ", "_")}";
|
$"http://rule34.xxx/index.php?page=dapi&s=post&q=index&limit=100&tags={tag.Replace(" ", "_")}";
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Modules.Searches.Models;
|
using NadekoBot.Modules.Searches.Models;
|
||||||
|
using NadekoBot.Services;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using NLog;
|
using NLog;
|
||||||
@ -86,7 +87,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
if (!wowJokes.Any())
|
if (!wowJokes.Any())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
await channel.SendMessageAsync(wowJokes[new Random().Next(0, wowJokes.Count)].ToString());
|
await channel.SendMessageAsync(wowJokes[new NadekoRandom().Next(0, wowJokes.Count)].ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
[LocalizedCommand, LocalizedDescription, LocalizedSummary, LocalizedAlias]
|
||||||
@ -94,7 +95,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
public async Task MagicItem(IUserMessage umsg)
|
public async Task MagicItem(IUserMessage umsg)
|
||||||
{
|
{
|
||||||
var channel = (ITextChannel)umsg.Channel;
|
var channel = (ITextChannel)umsg.Channel;
|
||||||
var rng = new Random();
|
var rng = new NadekoRandom();
|
||||||
var item = magicItems[rng.Next(0, magicItems.Count)].ToString();
|
var item = magicItems[rng.Next(0, magicItems.Count)].ToString();
|
||||||
|
|
||||||
await channel.SendMessageAsync(item).ConfigureAwait(false);
|
await channel.SendMessageAsync(item).ConfigureAwait(false);
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using NadekoBot.Attributes;
|
using NadekoBot.Attributes;
|
||||||
using NadekoBot.Extensions;
|
using NadekoBot.Extensions;
|
||||||
|
using NadekoBot.Services;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -52,7 +53,7 @@ namespace NadekoBot.Modules.Searches
|
|||||||
var dataList = data.Distinct(new ChampionNameComparer()).Take(showCount).ToList();
|
var dataList = data.Distinct(new ChampionNameComparer()).Take(showCount).ToList();
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
sb.AppendLine($"**Showing {dataList.Count} top banned champions.**");
|
sb.AppendLine($"**Showing {dataList.Count} top banned champions.**");
|
||||||
sb.AppendLine($"`{trashTalk[new Random().Next(0, trashTalk.Length)]}`");
|
sb.AppendLine($"`{trashTalk[new NadekoRandom().Next(0, trashTalk.Length)]}`");
|
||||||
for (var i = 0; i < dataList.Count; i++)
|
for (var i = 0; i < dataList.Count; i++)
|
||||||
{
|
{
|
||||||
if (i % 2 == 0 && i != 0)
|
if (i % 2 == 0 && i != 0)
|
||||||
|
@ -152,7 +152,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】
|
|||||||
{
|
{
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
{
|
{
|
||||||
var rng = new Random();
|
var rng = new NadekoRandom();
|
||||||
var reqString = $"https://www.googleapis.com/customsearch/v1?q={Uri.EscapeDataString(query)}&cx=018084019232060951019%3Ahs5piey28-e&num=1&searchType=image&start={ rng.Next(1, 50) }&fields=items%2Flink&key={NadekoBot.Credentials.GoogleApiKey}";
|
var reqString = $"https://www.googleapis.com/customsearch/v1?q={Uri.EscapeDataString(query)}&cx=018084019232060951019%3Ahs5piey28-e&num=1&searchType=image&start={ rng.Next(1, 50) }&fields=items%2Flink&key={NadekoBot.Credentials.GoogleApiKey}";
|
||||||
var obj = JObject.Parse(await http.GetStringAsync(reqString).ConfigureAwait(false));
|
var obj = JObject.Parse(await http.GetStringAsync(reqString).ConfigureAwait(false));
|
||||||
var items = obj["items"] as JArray;
|
var items = obj["items"] as JArray;
|
||||||
@ -428,7 +428,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】
|
|||||||
var allUsrs = umsg.MentionedUsers.Append(umsg.Author);
|
var allUsrs = umsg.MentionedUsers.Append(umsg.Author);
|
||||||
var allUsrsArray = allUsrs.ToArray();
|
var allUsrsArray = allUsrs.ToArray();
|
||||||
var str = allUsrsArray.Aggregate("http://appear.in/", (current, usr) => current + Uri.EscapeUriString(usr.Username[0].ToString()));
|
var str = allUsrsArray.Aggregate("http://appear.in/", (current, usr) => current + Uri.EscapeUriString(usr.Username[0].ToString()));
|
||||||
str += new Random().Next();
|
str += new NadekoRandom().Next();
|
||||||
foreach (var usr in allUsrsArray)
|
foreach (var usr in allUsrsArray)
|
||||||
{
|
{
|
||||||
await (await (usr as IGuildUser).CreateDMChannelAsync()).SendMessageAsync(str).ConfigureAwait(false);
|
await (await (usr as IGuildUser).CreateDMChannelAsync()).SendMessageAsync(str).ConfigureAwait(false);
|
||||||
@ -457,7 +457,7 @@ $@"🌍 **Weather for** 【{obj["target"]}】
|
|||||||
|
|
||||||
public static async Task<string> GetSafebooruImageLink(string tag)
|
public static async Task<string> GetSafebooruImageLink(string tag)
|
||||||
{
|
{
|
||||||
var rng = new Random();
|
var rng = new NadekoRandom();
|
||||||
var url =
|
var url =
|
||||||
$"http://safebooru.org/index.php?page=dapi&s=post&q=index&limit=100&tags={tag.Replace(" ", "_")}";
|
$"http://safebooru.org/index.php?page=dapi&s=post&q=index&limit=100&tags={tag.Replace(" ", "_")}";
|
||||||
using (var http = new HttpClient())
|
using (var http = new HttpClient())
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using Discord.Commands;
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using NadekoBot.Services;
|
using NadekoBot.Services;
|
||||||
|
using NadekoBot.Services.Database;
|
||||||
using NadekoBot.Services.Impl;
|
using NadekoBot.Services.Impl;
|
||||||
using NLog;
|
using NLog;
|
||||||
using NLog.Config;
|
using NLog.Config;
|
||||||
@ -31,6 +32,12 @@ namespace NadekoBot
|
|||||||
{
|
{
|
||||||
SetupLogger();
|
SetupLogger();
|
||||||
|
|
||||||
|
for (int i = 0; i < 100; i++)
|
||||||
|
{
|
||||||
|
var rnd = new NadekoRandom();
|
||||||
|
Console.WriteLine(rnd.Next(-10, -1));
|
||||||
|
}
|
||||||
|
|
||||||
//create client
|
//create client
|
||||||
Client = new DiscordSocketClient(new DiscordSocketConfig
|
Client = new DiscordSocketClient(new DiscordSocketConfig
|
||||||
{
|
{
|
||||||
@ -48,6 +55,12 @@ namespace NadekoBot
|
|||||||
Stats = new StatsService(Client, CommandHandler);
|
Stats = new StatsService(Client, CommandHandler);
|
||||||
_log = LogManager.GetCurrentClassLogger();
|
_log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
//init db
|
||||||
|
using (var context = DbHandler.Instance.GetDbContext())
|
||||||
|
{
|
||||||
|
context.EnsureSeedData();
|
||||||
|
}
|
||||||
|
|
||||||
//setup DI
|
//setup DI
|
||||||
var depMap = new DependencyMap();
|
var depMap = new DependencyMap();
|
||||||
depMap.Add<ILocalization>(Localizer);
|
depMap.Add<ILocalization>(Localizer);
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
{
|
{
|
||||||
public class Program
|
public class Program
|
||||||
{
|
{
|
||||||
public static void Main(string[] args) => new NadekoBot().RunAsync(args).GetAwaiter().GetResult();
|
public static void Main(string[] args) =>
|
||||||
|
new NadekoBot().RunAsync(args).GetAwaiter().GetResult();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -18,21 +19,7 @@ namespace NadekoBot.Services.Database.Models
|
|||||||
public float CurrencyGenerationChance { get; set; } = 0.02f;
|
public float CurrencyGenerationChance { get; set; } = 0.02f;
|
||||||
public int CurrencyGenerationCooldown { get; set; } = 10;
|
public int CurrencyGenerationCooldown { get; set; } = 10;
|
||||||
|
|
||||||
public List<ModulePrefix> ModulePrefixes { get; set; } = new List<ModulePrefix>()
|
public List<ModulePrefix> ModulePrefixes { get; set; } = new List<ModulePrefix>();
|
||||||
{
|
|
||||||
new ModulePrefix() { ModuleName="Administration", Prefix="." },
|
|
||||||
new ModulePrefix() { ModuleName="Searches", Prefix="~" },
|
|
||||||
new ModulePrefix() { ModuleName="NSFW", Prefix="~" },
|
|
||||||
new ModulePrefix() { ModuleName="ClashOfClans", Prefix="," },
|
|
||||||
new ModulePrefix() { ModuleName="Help", Prefix="-" },
|
|
||||||
new ModulePrefix() { ModuleName="Music", Prefix="!!" },
|
|
||||||
new ModulePrefix() { ModuleName="Trello", Prefix="trello" },
|
|
||||||
new ModulePrefix() { ModuleName="Games", Prefix=">" },
|
|
||||||
new ModulePrefix() { ModuleName="Gambling", Prefix="$" },
|
|
||||||
new ModulePrefix() { ModuleName="Permissions", Prefix=";" },
|
|
||||||
new ModulePrefix() { ModuleName="Pokemon", Prefix=">" },
|
|
||||||
new ModulePrefix() { ModuleName="Utility", Prefix="." }
|
|
||||||
};
|
|
||||||
|
|
||||||
public List<PlayingStatus> RotatingStatusMessages { get; set; } = new List<PlayingStatus>();
|
public List<PlayingStatus> RotatingStatusMessages { get; set; } = new List<PlayingStatus>();
|
||||||
|
|
||||||
@ -44,43 +31,8 @@ namespace NadekoBot.Services.Database.Models
|
|||||||
public string CurrencyName { get; set; } = "Nadeko Flower";
|
public string CurrencyName { get; set; } = "Nadeko Flower";
|
||||||
public string CurrencyPluralName { get; set; } = "Nadeko Flowers";
|
public string CurrencyPluralName { get; set; } = "Nadeko Flowers";
|
||||||
|
|
||||||
public List<EightBallResponse> EightBallResponses { get; set; } = new List<EightBallResponse>
|
public List<EightBallResponse> EightBallResponses { get; set; } = new List<EightBallResponse>();
|
||||||
{
|
public List<RaceAnimal> RaceAnimals { get; set; } = new List<RaceAnimal>();
|
||||||
new EightBallResponse() { Text = "Most definitely yes" },
|
|
||||||
new EightBallResponse() { Text = "For sure" },
|
|
||||||
new EightBallResponse() { Text = "Totally!" },
|
|
||||||
new EightBallResponse() { Text = "As I see it, yes" },
|
|
||||||
new EightBallResponse() { Text = "My sources say yes" },
|
|
||||||
new EightBallResponse() { Text = "Yes" },
|
|
||||||
new EightBallResponse() { Text = "Most likely" },
|
|
||||||
new EightBallResponse() { Text = "Perhaps" },
|
|
||||||
new EightBallResponse() { Text = "Maybe" },
|
|
||||||
new EightBallResponse() { Text = "Not sure" },
|
|
||||||
new EightBallResponse() { Text = "It is uncertain" },
|
|
||||||
new EightBallResponse() { Text = "Ask me again later" },
|
|
||||||
new EightBallResponse() { Text = "Don't count on it" },
|
|
||||||
new EightBallResponse() { Text = "Probably not" },
|
|
||||||
new EightBallResponse() { Text = "Very doubtful" },
|
|
||||||
new EightBallResponse() { Text = "Most likely no" },
|
|
||||||
new EightBallResponse() { Text = "Nope" },
|
|
||||||
new EightBallResponse() { Text = "No" },
|
|
||||||
new EightBallResponse() { Text = "My sources say no" },
|
|
||||||
new EightBallResponse() { Text = "Dont even think about it" },
|
|
||||||
new EightBallResponse() { Text = "Definitely no" },
|
|
||||||
new EightBallResponse() { Text = "NO - It may cause disease contraction" }
|
|
||||||
};
|
|
||||||
|
|
||||||
public List<RaceAnimal> RaceAnimals { get; set; } = new List<RaceAnimal>
|
|
||||||
{
|
|
||||||
new RaceAnimal { Icon = "🐼", Name = "Panda" },
|
|
||||||
new RaceAnimal { Icon = "🐻", Name = "Bear" },
|
|
||||||
new RaceAnimal { Icon = "🐧", Name = "Pengu" },
|
|
||||||
new RaceAnimal { Icon = "🐨", Name = "Koala" },
|
|
||||||
new RaceAnimal { Icon = "🐬", Name = "Dolphin" },
|
|
||||||
new RaceAnimal { Icon = "🐞", Name = "Ladybird" },
|
|
||||||
new RaceAnimal { Icon = "🦀", Name = "Crab" },
|
|
||||||
new RaceAnimal { Icon = "🦄", Name = "Unicorn" }
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PlayingStatus :DbEntity
|
public class PlayingStatus :DbEntity
|
||||||
@ -102,17 +54,59 @@ namespace NadekoBot.Services.Database.Models
|
|||||||
public class EightBallResponse : DbEntity
|
public class EightBallResponse : DbEntity
|
||||||
{
|
{
|
||||||
public string Text { get; set; }
|
public string Text { get; set; }
|
||||||
|
|
||||||
|
public override int GetHashCode()
|
||||||
|
{
|
||||||
|
return Text.GetHashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Equals(object obj)
|
||||||
|
{
|
||||||
|
if (!(obj is EightBallResponse))
|
||||||
|
return base.Equals(obj);
|
||||||
|
|
||||||
|
return ((EightBallResponse)obj).Text == Text;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RaceAnimal : DbEntity
|
public class RaceAnimal : DbEntity
|
||||||
{
|
{
|
||||||
public string Icon { get; set; }
|
public string Icon { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public override int GetHashCode()
|
||||||
|
{
|
||||||
|
return Icon.GetHashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Equals(object obj)
|
||||||
|
{
|
||||||
|
if (!(obj is RaceAnimal))
|
||||||
|
return base.Equals(obj);
|
||||||
|
|
||||||
|
return ((RaceAnimal)obj).Icon == Icon;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ModulePrefix : DbEntity
|
public class ModulePrefix : DbEntity
|
||||||
{
|
{
|
||||||
public string ModuleName { get; set; }
|
public string ModuleName { get; set; }
|
||||||
public string Prefix { get; set; }
|
public string Prefix { get; set; }
|
||||||
|
|
||||||
|
public int BotConfigId { get; set; } = 1;
|
||||||
|
public BotConfig BotConfig { get; set; }
|
||||||
|
|
||||||
|
public override int GetHashCode()
|
||||||
|
{
|
||||||
|
return ModuleName.GetHashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Equals(object obj)
|
||||||
|
{
|
||||||
|
if(!(obj is ModulePrefix))
|
||||||
|
return base.Equals(obj);
|
||||||
|
|
||||||
|
return ((ModulePrefix)obj).ModuleName == ModuleName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,80 @@ namespace NadekoBot.Services.Database
|
|||||||
public DbSet<IgnoredLogChannel> IgnoredLogChannels { get; set; }
|
public DbSet<IgnoredLogChannel> IgnoredLogChannels { get; set; }
|
||||||
public DbSet<IgnoredVoicePresenceChannel> IgnoredVoicePresenceCHannels { get; set; }
|
public DbSet<IgnoredVoicePresenceChannel> IgnoredVoicePresenceCHannels { get; set; }
|
||||||
|
|
||||||
|
//orphans xD
|
||||||
|
public DbSet<EightBallResponse> EightBallResponses { get; set; }
|
||||||
|
public DbSet<RaceAnimal> RaceAnimals { get; set; }
|
||||||
|
public DbSet<ModulePrefix> ModulePrefixes { get; set; }
|
||||||
|
|
||||||
|
public void EnsureSeedData()
|
||||||
|
{
|
||||||
|
if (!BotConfig.Any())
|
||||||
|
{
|
||||||
|
var bc = new BotConfig();
|
||||||
|
|
||||||
|
bc.ModulePrefixes.AddRange(new HashSet<ModulePrefix>()
|
||||||
|
{
|
||||||
|
new ModulePrefix() { ModuleName = "Administration", Prefix = "." },
|
||||||
|
new ModulePrefix() { ModuleName = "Searches", Prefix = "~" },
|
||||||
|
new ModulePrefix() { ModuleName = "NSFW", Prefix = "~" },
|
||||||
|
new ModulePrefix() { ModuleName = "ClashOfClans", Prefix = "," },
|
||||||
|
new ModulePrefix() { ModuleName = "Help", Prefix = "-" },
|
||||||
|
new ModulePrefix() { ModuleName = "Music", Prefix = "!!" },
|
||||||
|
new ModulePrefix() { ModuleName = "Trello", Prefix = "trello" },
|
||||||
|
new ModulePrefix() { ModuleName = "Games", Prefix = ">" },
|
||||||
|
new ModulePrefix() { ModuleName = "Gambling", Prefix = "$" },
|
||||||
|
new ModulePrefix() { ModuleName = "Permissions", Prefix = ";" },
|
||||||
|
new ModulePrefix() { ModuleName = "Pokemon", Prefix = ">" },
|
||||||
|
new ModulePrefix() { ModuleName = "Utility", Prefix = "." }
|
||||||
|
});
|
||||||
|
bc.RaceAnimals.AddRange(new HashSet<RaceAnimal>
|
||||||
|
{
|
||||||
|
new RaceAnimal { Icon = "🐼", Name = "Panda" },
|
||||||
|
new RaceAnimal { Icon = "🐻", Name = "Bear" },
|
||||||
|
new RaceAnimal { Icon = "🐧", Name = "Pengu" },
|
||||||
|
new RaceAnimal { Icon = "🐨", Name = "Koala" },
|
||||||
|
new RaceAnimal { Icon = "🐬", Name = "Dolphin" },
|
||||||
|
new RaceAnimal { Icon = "🐞", Name = "Ladybird" },
|
||||||
|
new RaceAnimal { Icon = "🦀", Name = "Crab" },
|
||||||
|
new RaceAnimal { Icon = "🦄", Name = "Unicorn" }
|
||||||
|
});
|
||||||
|
bc.EightBallResponses.AddRange(new HashSet<EightBallResponse>
|
||||||
|
{
|
||||||
|
new EightBallResponse() { Text = "Most definitely yes" },
|
||||||
|
new EightBallResponse() { Text = "For sure" },
|
||||||
|
new EightBallResponse() { Text = "Totally!" },
|
||||||
|
new EightBallResponse() { Text = "Of course!" },
|
||||||
|
new EightBallResponse() { Text = "As I see it, yes" },
|
||||||
|
new EightBallResponse() { Text = "My sources say yes" },
|
||||||
|
new EightBallResponse() { Text = "Yes" },
|
||||||
|
new EightBallResponse() { Text = "Most likely" },
|
||||||
|
new EightBallResponse() { Text = "Perhaps" },
|
||||||
|
new EightBallResponse() { Text = "Maybe" },
|
||||||
|
new EightBallResponse() { Text = "Not sure" },
|
||||||
|
new EightBallResponse() { Text = "It is uncertain" },
|
||||||
|
new EightBallResponse() { Text = "Ask me again later" },
|
||||||
|
new EightBallResponse() { Text = "Don't count on it" },
|
||||||
|
new EightBallResponse() { Text = "Probably not" },
|
||||||
|
new EightBallResponse() { Text = "Very doubtful" },
|
||||||
|
new EightBallResponse() { Text = "Most likely no" },
|
||||||
|
new EightBallResponse() { Text = "Nope" },
|
||||||
|
new EightBallResponse() { Text = "No" },
|
||||||
|
new EightBallResponse() { Text = "My sources say no" },
|
||||||
|
new EightBallResponse() { Text = "Dont even think about it" },
|
||||||
|
new EightBallResponse() { Text = "Definitely no" },
|
||||||
|
new EightBallResponse() { Text = "NO - It may cause disease contraction" }
|
||||||
|
});
|
||||||
|
|
||||||
|
BotConfig.Add(bc);
|
||||||
|
|
||||||
|
this.SaveChanges();
|
||||||
|
}
|
||||||
|
if (!TypingArticles.Any())
|
||||||
|
{
|
||||||
|
//todo load default typing articles
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
#region QUOTES
|
#region QUOTES
|
||||||
@ -45,7 +119,7 @@ namespace NadekoBot.Services.Database
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Config
|
#region GuildConfig
|
||||||
|
|
||||||
var configEntity = modelBuilder.Entity<GuildConfig>();
|
var configEntity = modelBuilder.Entity<GuildConfig>();
|
||||||
configEntity
|
configEntity
|
||||||
@ -54,6 +128,15 @@ namespace NadekoBot.Services.Database
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region BotConfig
|
||||||
|
var botConfigEntity = modelBuilder.Entity<BotConfig>();
|
||||||
|
//botConfigEntity
|
||||||
|
// .HasMany(c => c.ModulePrefixes)
|
||||||
|
// .WithOne(mp => mp.BotConfig)
|
||||||
|
// .HasForeignKey(mp => mp.BotConfigId);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region ClashOfClans
|
#region ClashOfClans
|
||||||
|
|
||||||
var callersEntity = modelBuilder.Entity<ClashCaller>();
|
var callersEntity = modelBuilder.Entity<ClashCaller>();
|
||||||
|
@ -20,7 +20,7 @@ namespace NadekoBot.Services.Database.Repositories.Impl
|
|||||||
|
|
||||||
public Task<Quote> GetRandomQuoteByKeywordAsync(ulong guildId, string keyword)
|
public Task<Quote> GetRandomQuoteByKeywordAsync(ulong guildId, string keyword)
|
||||||
{
|
{
|
||||||
var rng = new Random();
|
var rng = new NadekoRandom();
|
||||||
return _set.Where(q => q.Keyword == keyword).OrderBy(q => rng.Next()).FirstOrDefaultAsync();
|
return _set.Where(q => q.Keyword == keyword).OrderBy(q => rng.Next()).FirstOrDefaultAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ namespace NadekoBot.Services.Database.Repositories.Impl
|
|||||||
public class TypingArticlesRepository : Repository<TypingArticle>, ITypingArticlesRepository
|
public class TypingArticlesRepository : Repository<TypingArticle>, ITypingArticlesRepository
|
||||||
{
|
{
|
||||||
private Random _rand = null;
|
private Random _rand = null;
|
||||||
private Random rand => _rand ?? (_rand = new Random());
|
private Random rand => _rand ?? (_rand = new NadekoRandom());
|
||||||
public TypingArticlesRepository(DbContext context) : base(context)
|
public TypingArticlesRepository(DbContext context) : base(context)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
72
src/NadekoBot/Services/NadekoRandom.cs
Normal file
72
src/NadekoBot/Services/NadekoRandom.cs
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NadekoBot.Services
|
||||||
|
{
|
||||||
|
public class NadekoRandom : Random
|
||||||
|
{
|
||||||
|
RandomNumberGenerator rng;
|
||||||
|
|
||||||
|
public NadekoRandom() : base()
|
||||||
|
{
|
||||||
|
rng = RandomNumberGenerator.Create();
|
||||||
|
}
|
||||||
|
|
||||||
|
private NadekoRandom(int Seed) : base(Seed)
|
||||||
|
{
|
||||||
|
rng = RandomNumberGenerator.Create();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int Next()
|
||||||
|
{
|
||||||
|
var bytes = new byte[sizeof(int)];
|
||||||
|
rng.GetBytes(bytes);
|
||||||
|
return Math.Abs(BitConverter.ToInt32(bytes, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int Next(int maxValue)
|
||||||
|
{
|
||||||
|
if (maxValue <= 0)
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
var bytes = new byte[sizeof(int)];
|
||||||
|
rng.GetBytes(bytes);
|
||||||
|
return Math.Abs(BitConverter.ToInt32(bytes, 0)) % maxValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int Next(int minValue, int maxValue)
|
||||||
|
{
|
||||||
|
if (minValue > maxValue)
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
if (minValue == maxValue)
|
||||||
|
return minValue;
|
||||||
|
var bytes = new byte[sizeof(int)];
|
||||||
|
rng.GetBytes(bytes);
|
||||||
|
var num = BitConverter.ToInt32(bytes, 0);
|
||||||
|
var sign = Math.Sign(BitConverter.ToInt32(bytes, 0));
|
||||||
|
return (sign * BitConverter.ToInt32(bytes, 0)) % (maxValue - minValue) + minValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void NextBytes(byte[] buffer)
|
||||||
|
{
|
||||||
|
rng.GetBytes(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override double Sample()
|
||||||
|
{
|
||||||
|
var bytes = new byte[sizeof(double)];
|
||||||
|
rng.GetBytes(bytes);
|
||||||
|
return Math.Abs(BitConverter.ToDouble(bytes, 0) / double.MaxValue + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override double NextDouble()
|
||||||
|
{
|
||||||
|
var bytes = new byte[sizeof(double)];
|
||||||
|
rng.GetBytes(bytes);
|
||||||
|
return BitConverter.ToDouble(bytes, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user