summaryrefslogtreecommitdiff
path: root/dsa/DiscoBot
diff options
context:
space:
mode:
Diffstat (limited to 'dsa/DiscoBot')
-rw-r--r--dsa/DiscoBot/App.config42
-rw-r--r--dsa/DiscoBot/Auxiliary/CommandExtension.cs98
-rw-r--r--dsa/DiscoBot/Auxiliary/Dice.cs31
-rw-r--r--dsa/DiscoBot/Auxiliary/Permissions.cs32
-rw-r--r--dsa/DiscoBot/Auxiliary/RandomMisc.cs36
-rw-r--r--dsa/DiscoBot/Auxiliary/SpellCorrect.cs105
-rw-r--r--dsa/DiscoBot/Commands/CommandExtension.cs119
-rw-r--r--dsa/DiscoBot/Commands/FileHandler.cs25
-rw-r--r--dsa/DiscoBot/Commands/MiscCommands.cs189
-rw-r--r--dsa/DiscoBot/DiscoBot.csproj149
-rw-r--r--dsa/DiscoBot/Help.json120
-rw-r--r--dsa/DiscoBot/Program.cs113
-rw-r--r--dsa/DiscoBot/Properties.json129
-rw-r--r--dsa/DiscoBot/Properties/AssemblyInfo.cs35
-rw-r--r--dsa/DiscoBot/Properties/DiscoBot-Audio-Sound.json7
-rw-r--r--dsa/DiscoBot/Properties/DiscoBot-Auxiliary-CommandInfo.json101
-rw-r--r--dsa/DiscoBot/Properties/DiscoBot-DSA_Game-Characters-Character.json290
-rw-r--r--dsa/DiscoBot/Properties/Settings.Designer.cs38
-rw-r--r--dsa/DiscoBot/Properties/Settings.settings9
-rw-r--r--dsa/DiscoBot/Rework/Permissions.cs43
-rw-r--r--dsa/DiscoBot/Token1
-rw-r--r--dsa/DiscoBot/packages.config63
-rw-r--r--dsa/DiscoBot/session.json6
-rw-r--r--dsa/DiscoBot/sessions/TheCrew/TheCrew-0.json83
-rw-r--r--dsa/DiscoBot/sessions/copy/copy-0.json79
-rw-r--r--dsa/DiscoBot/sessions/test/test-0.json79
-rw-r--r--dsa/DiscoBot/sessions/test/test-1.json79
-rw-r--r--dsa/DiscoBot/sessions/test/test-2.json81
-rw-r--r--dsa/DiscoBot/sessions/test/test-3.json81
-rw-r--r--dsa/DiscoBot/sessions/test/test-4.json81
30 files changed, 2344 insertions, 0 deletions
diff --git a/dsa/DiscoBot/App.config b/dsa/DiscoBot/App.config
new file mode 100644
index 0000000..c862b4e
--- /dev/null
+++ b/dsa/DiscoBot/App.config
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <configSections>
+ <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <section name="DiscoBot.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+ </sectionGroup>
+ </configSections>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+ </startup>
+ <runtime>
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+ <dependentAssembly>
+ <assemblyIdentity name="System.Interactive.Async" publicKeyToken="94bc3704cddfc263" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-1.2.3.0" newVersion="1.2.3.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
+ </dependentAssembly>
+ </assemblyBinding>
+ </runtime>
+ <userSettings>
+ <DiscoBot.Properties.Settings>
+ <setting name="Token" serializeAs="String">
+ <value>Mjk0NTU0MDU4Nzg4NzAwMTYx.DOzDcQ.J-nCikbZdZtdrug0E8TwwV_2ITw</value>
+ </setting>
+ </DiscoBot.Properties.Settings>
+ </userSettings>
+</configuration>
diff --git a/dsa/DiscoBot/Auxiliary/CommandExtension.cs b/dsa/DiscoBot/Auxiliary/CommandExtension.cs
new file mode 100644
index 0000000..ad9f323
--- /dev/null
+++ b/dsa/DiscoBot/Auxiliary/CommandExtension.cs
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Discord;
+using Discord.Commands;
+
+namespace DiscoBot.Auxiliary
+{
+ public static class CommandExtension
+ {
+ private static WebClient _client;
+
+ public static async Task ReplyTimedAsync(this ModuleBase m, string message, TimeSpan time)
+ {
+ var token = message.GetHashCode();
+ var send = m.Context.Channel.SendMessageAsync($"#{token}\n```xl\n{message}```");
+
+ var barInvoker = new BackgroundWorker();
+ barInvoker.DoWork += delegate
+ {
+ Thread.Sleep(time);
+ Delete(token, m);
+ };
+
+ await send;
+ barInvoker.RunWorkerAsync();
+ }
+
+ private static void Delete(int token, ModuleBase m)
+ {
+ var messagesAsync = m.Context.Channel.GetMessagesAsync();
+ Task.WaitAll(messagesAsync.ToArray());
+ var list = messagesAsync.ToEnumerable().ToList();
+ var messages = new List<IMessage>();
+ foreach (var task in list) messages.AddRange(task.ToList());
+
+ var test = messages.Where(x => x.Content.StartsWith($"#{token}\n") && x.Author.IsBot).Select(c => c);
+ Task.WaitAll(test.Select(message => (message as IUserMessage)?.DeleteAsync()).ToArray());
+ }
+
+ public static async Task ReplyAsync(this ModuleBase m, IEnumerable<string> message, bool directMessage = false)
+ {
+ var sb = new StringBuilder();
+ foreach (var re in message)
+ {
+ if (sb.Length + re.Length > 1798)
+ {
+ if (directMessage)
+ await m.Context.User.SendMessageAsync("```xl\n" + sb + "\n```");
+ else
+ await m.Context.Channel.SendMessageAsync("```xl\n" + sb + "\n```");
+
+ sb.Clear();
+ }
+
+ sb.AppendLine(re);
+ }
+
+ if (directMessage)
+ await m.Context.User.SendMessageAsync("```xl\n" + sb + "\n```");
+ else
+ await m.Context.Channel.SendMessageAsync("```xl\n" + sb + "\n```");
+ }
+
+ public static async Task ReplyAsync(this ModuleBase m, IEnumerable<string> message, TimeSpan time)
+ {
+ var sb = new StringBuilder();
+ foreach (var re in message)
+ {
+ if (sb.Length + re.Length > 1798)
+ {
+ await m.ReplyTimedAsync(sb.ToString(), time);
+
+
+ sb.Clear();
+ }
+
+ sb.AppendLine(re);
+ }
+
+ await m.ReplyTimedAsync(sb.ToString(), TimeSpan.FromSeconds(90));
+ }
+
+ public static async Task SendWebFile(this IMessageChannel channel,
+ string url = "https://i.imgur.com/0iHEycJ.png")
+ {
+ if (_client == null) _client = new WebClient();
+
+ var stream = _client.OpenRead(url);
+ await channel.SendFileAsync(stream, url.Split('/').Last());
+ }
+ }
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/Auxiliary/Dice.cs b/dsa/DiscoBot/Auxiliary/Dice.cs
new file mode 100644
index 0000000..f0f4def
--- /dev/null
+++ b/dsa/DiscoBot/Auxiliary/Dice.cs
@@ -0,0 +1,31 @@
+using System;
+
+namespace DiscoBot.Auxiliary
+{
+ public static class Dice // roll it!
+ {
+ private static readonly Random Rnd = new Random();
+
+ public static int Roll(int d = 20)
+ {
+ return Rnd.Next(d) + 1;
+ }
+
+
+ public static int Roll(int count, int d)
+ {
+ if (d <= 0) return 0;
+
+ var sum = 0;
+ for (var i = 0; i < Math.Abs(count); i++)
+ {
+ var roll = Roll(d);
+ sum += roll;
+ }
+
+ sum *= Math.Abs(count) / count;
+
+ return sum;
+ }
+ }
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/Auxiliary/Permissions.cs b/dsa/DiscoBot/Auxiliary/Permissions.cs
new file mode 100644
index 0000000..3ec4a2e
--- /dev/null
+++ b/dsa/DiscoBot/Auxiliary/Permissions.cs
@@ -0,0 +1,32 @@
+using System.Collections.Generic;
+using System.Linq;
+using Discord.Commands;
+using Discord.WebSocket;
+
+namespace DiscoBot.Auxiliary
+{
+ public static class Permissions
+ {
+ public static bool Check(ICommandContext c, string role)
+ {
+ return ((SocketGuildUser) c.User).Roles.ToList().Exists(v => v.Name.Equals(role));
+ }
+
+ public static bool Check(ICommandContext c, IEnumerable<string> roles)
+ {
+ return roles.Any(role => ((SocketGuildUser) c.User).Roles.ToList().Exists(v => v.Name.Equals(role)));
+ }
+
+ public static bool Test(ICommandContext c, string role)
+ {
+ if (Check(c, role)) return true;
+ c.Channel.SendMessageAsync("```xl\n Keine ausreichenden Berechtigungen\n```").Wait();
+ return false;
+ }
+
+ public static void Test(ICommandContext c, string[] roles)
+ {
+ if (!Check(c, roles)) c.Channel.SendMessageAsync("```xl\n Keine ausreichenden Berechtigungen\n```").Wait();
+ }
+ }
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/Auxiliary/RandomMisc.cs b/dsa/DiscoBot/Auxiliary/RandomMisc.cs
new file mode 100644
index 0000000..205b3a7
--- /dev/null
+++ b/dsa/DiscoBot/Auxiliary/RandomMisc.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Linq;
+using System.Text;
+
+namespace DiscoBot.Auxiliary
+{
+ public static class RandomMisc
+ {
+ public static string Roll(string input)
+ {
+ var output = new StringBuilder();
+ var strings = input.Split('w', 'd').ToList();
+ var count = Convert.ToInt32(strings[0]);
+ strings = strings[1].Split(' ').ToList();
+ var d = Convert.ToInt32(strings[0]);
+
+ if (strings.Count > 0)
+ {
+ }
+
+ var sum = 0;
+ for (var i = 0; i < count; i++)
+ {
+ var roll = Dice.Roll(d);
+ sum += roll;
+ output.Append("[" + roll + "] ");
+ }
+
+ if (strings.Count <= 1) return output.ToString();
+ sum += Convert.ToInt32(strings[1]);
+ output.Append("sum: " + sum);
+
+ return output.ToString();
+ }
+ }
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/Auxiliary/SpellCorrect.cs b/dsa/DiscoBot/Auxiliary/SpellCorrect.cs
new file mode 100644
index 0000000..c4bd4bf
--- /dev/null
+++ b/dsa/DiscoBot/Auxiliary/SpellCorrect.cs
@@ -0,0 +1,105 @@
+using System;
+using System.Diagnostics;
+
+namespace DiscoBot.Auxiliary
+{
+ public class SpellCorrect : StringComparer
+ {
+ public const int ErrorThreshold = 94100;
+
+ public override int Compare(string x, string y)
+ {
+ return CompareEasy(x, y);
+ }
+
+ public static int CompareEasy(string x, string y)
+ {
+ if (string.IsNullOrEmpty(x)) throw new ArgumentException("message", nameof(x));
+
+ if (string.IsNullOrEmpty(y)) throw new ArgumentException("message", nameof(y));
+
+ if (x.Equals(y)) return 0;
+
+ x = x.ToLower();
+ y = y.ToLower();
+ if (x.Equals(y)) return 1;
+
+ var subs = y.Split(' ', '/');
+ var score = subs.Length;
+ foreach (var s in subs)
+ if (s.Equals(x))
+ score--;
+
+ if (score < subs.Length) return score + 1;
+
+ return 100000 - (int) (CompareExact(x, y) * 1000.0);
+ /*if (y.Contains(x))
+ return 6;*/
+ }
+
+ public override bool Equals(string x, string y)
+ {
+ Debug.Assert(x != null, nameof(x) + " != null");
+ return x.Equals(y);
+ }
+
+ public override int GetHashCode(string obj)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static double CompareExact(string s, string q)
+ {
+ s = s.ToLower();
+ q = q.ToLower();
+
+ int i, j;
+ const double match = 3.0;
+ const double gap = -2.0;
+ const double mismatch = -2.0;
+
+ double decay;
+
+ var matrix = new double[s.Length + 1, q.Length + 1];
+ var max = 0.0;
+ matrix[0, 0] = 0.0;
+
+ for (i = 1; i < s.Length; i++)
+ // matrix[i, 0] = 0.0;
+ matrix[i, 0] = i * gap;
+
+ for (i = 1; i < q.Length; i++) matrix[0, i] = 0.0;
+
+
+ for (i = 1; i <= s.Length; i++)
+ for (j = 1; j <= q.Length; j++)
+ {
+ decay = j / (double) (s.Length * 1000);
+ var add = s[i - 1] == q[j - 1] ? match - decay : mismatch;
+ var score = matrix[i - 1, j - 1] + add;
+
+ if (score < matrix[i - 1, j] + gap) score = matrix[i - 1, j] + gap;
+
+ if (score < matrix[i, j - 1] + gap) score = matrix[i, j - 1] + gap;
+
+ if (i > 1 && j > 1)
+ if (s[i - 1] == q[j - 2] && s[i - 2] == q[j - 1])
+ {
+ add = 3 / 2.0 * match - decay;
+ if (score < matrix[i - 2, j - 2] + add) score = matrix[i - 2, j - 2] + add;
+ }
+
+ // if (score < 0)
+ // {
+ // score = 0;
+ // }
+
+ if (max < score && i == s.Length) max = score;
+
+ matrix[i, j] = score;
+ }
+
+ return max;
+ }
+ }
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/Commands/CommandExtension.cs b/dsa/DiscoBot/Commands/CommandExtension.cs
new file mode 100644
index 0000000..098e35f
--- /dev/null
+++ b/dsa/DiscoBot/Commands/CommandExtension.cs
@@ -0,0 +1,119 @@
+namespace DiscoBot.Auxiliary
+{
+ using System;
+ using System.Collections.Generic;
+ using System.ComponentModel;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Threading;
+ using System.Threading.Tasks;
+
+ using Discord;
+ using Discord.Commands;
+
+ public static class CommandExtension
+ {
+ private static WebClient client;
+
+ public static async Task ReplyTimedAsync(this ModuleBase m, string message, TimeSpan time)
+ {
+ var token = message.GetHashCode();
+ var send = m.Context.Channel.SendMessageAsync($"#{token}\n```xl\n{message}```", false);
+
+ var barInvoker = new BackgroundWorker();
+ barInvoker.DoWork += delegate
+ {
+ Thread.Sleep(time);
+ Delete(token, m);
+ };
+
+ await send;
+ barInvoker.RunWorkerAsync();
+ }
+
+ private static void Delete(int token, ModuleBase m)
+ {
+ var messagesAsync = m.Context.Channel.GetMessagesAsync();
+ Task.WaitAll(messagesAsync.ToArray());
+ var list = messagesAsync.ToEnumerable().ToList();
+ var messages = new List<IMessage>();
+ foreach (var task in list)
+ {
+ messages.AddRange(task.ToList());
+ }
+
+ var test = messages.Where(x => x.Content.StartsWith($"#{token}\n") && x.Author.IsBot).Select(c=>c );
+ var waiters = new List<Task>();
+ foreach (var message in test)
+ {
+ waiters.Add((message as IUserMessage).DeleteAsync());
+ }
+ Task.WaitAll(waiters.ToArray());
+ }
+
+ public static async Task ReplyAsync(this ModuleBase m, IEnumerable<string> message, bool directMessage = false)
+ {
+ var sb = new StringBuilder();
+ foreach (string re in message)
+ {
+ if (sb.Length + re.Length > 1798)
+ {
+ if (directMessage)
+ {
+ await m.Context.User.SendMessageAsync("```xl\n" + sb + "\n```");
+ }
+ else
+ {
+ await m.Context.Channel.SendMessageAsync("```xl\n" + sb + "\n```");
+ }
+
+ sb.Clear();
+ }
+
+ sb.AppendLine(re);
+ }
+
+ if (directMessage)
+ {
+ await m.Context.User.SendMessageAsync("```xl\n" + sb + "\n```");
+ }
+ else
+ {
+ await m.Context.Channel.SendMessageAsync("```xl\n" + sb + "\n```");
+ }
+ }
+
+ public static async Task ReplyAsync(this ModuleBase m, IEnumerable<string> message, TimeSpan time)
+ {
+ var sb = new StringBuilder();
+ foreach (string re in message)
+ {
+ if (sb.Length + re.Length > 1798)
+ {
+
+ await m.ReplyTimedAsync(sb.ToString(), time);
+
+
+ sb.Clear();
+ }
+
+ sb.AppendLine(re);
+ }
+
+ await m.ReplyTimedAsync(sb.ToString(), TimeSpan.FromSeconds(90));
+ }
+
+ public static async Task SendWebFile(this IMessageChannel channel, string url = "https://i.imgur.com/0iHEycJ.png")
+ {
+ if (client == null)
+ {
+ client = new WebClient();
+ }
+
+ Stream stream = client.OpenRead(url);
+ await channel.SendFileAsync(stream, url.Split('/').Last());
+ }
+ }
+}
diff --git a/dsa/DiscoBot/Commands/FileHandler.cs b/dsa/DiscoBot/Commands/FileHandler.cs
new file mode 100644
index 0000000..4f8a785
--- /dev/null
+++ b/dsa/DiscoBot/Commands/FileHandler.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Linq;
+using System.Threading.Tasks;
+using Discord.Commands;
+
+namespace DiscoBot.Commands
+{
+ public class FileHandler : ModuleBase
+ {
+ //[Command("send"), Summary("fügt Helden hinzu")]
+ public void AddChar()
+ {
+ var msg = Context.Message;
+ if (msg.Attachments == null) throw new ArgumentException("Es wurde keine Datei angehängt");
+
+ var attachments = msg.Attachments.ToList();
+
+ if (!attachments.Any(x => x.Filename.EndsWith(".xml")))
+ throw new ArgumentException("Es wurde kein xml Held mitgeschickt");
+
+ foreach (var attachment in attachments.Where(x => x.Filename.EndsWith(".xml")))
+ throw new NotImplementedException("send File to Server");
+ }
+ }
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/Commands/MiscCommands.cs b/dsa/DiscoBot/Commands/MiscCommands.cs
new file mode 100644
index 0000000..738796c
--- /dev/null
+++ b/dsa/DiscoBot/Commands/MiscCommands.cs
@@ -0,0 +1,189 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using DiscoBot.Auxiliary;
+using Discord;
+using Discord.Commands;
+
+namespace DiscoBot.Commands
+{
+ public class MiscCommands : ModuleBase
+ {
+ [Command("r")]
+ [Summary("Würfelt ")]
+ [Alias("R", "Roll", "roll", "Würfle")]
+ public Task RollAsync([Remainder] [Summary("Weapon")] string roll)
+ {
+ //return this.ReplyAsync("```xl\n" + new Auxiliary.Calculator.StringSolver(roll).Solve() + "\n```");
+ return ReplyAsync("```xl\n" + RandomMisc.Roll(roll) + "\n```");
+ }
+
+
+ [Command("say")]
+ [Summary("Echos a message.")]
+ [Alias("s")]
+ public Task SayAsync([Remainder] [Summary("The text to echo")]
+ string echo)
+ {
+ return ReplyAsync(echo);
+ }
+
+ [Command("liebe")]
+ [Summary("Echos a message.")]
+ [Alias("Liebe", "<3", "love")]
+ public async Task LoveAsync()
+ {
+ var rand = new Random();
+ var user = Context.Channel.GetUsersAsync().ToList().Result.ToList().First()
+ .Where(x => x.Status != UserStatus.Offline).OrderBy(x => rand.Next()).First();
+ await ReplyAsync(
+ ":heart: :heart: :heart: Verteilt die Liebe! :heart: :heart: :heart: \n Besondere Liebe geht an " +
+ user.Username);
+ //await this.ReplyAsync("!liebe");
+ }
+
+ [Command("maul")]
+ [Summary("Echos a message.")]
+ public Task MaulAsync()
+ {
+ return ReplyAsync(
+ "Maul...? Du meintest doch sicher Maulwürfe oder? \n:heart: :heart: :heart: \nGanz viel Liebe für Maulwürfe !\n:heart: :heart: :heart:");
+ }
+
+
+ [Command("match")]
+ [Summary("Tinder.")]
+ [Alias("mach", "pass", "passt")]
+ public Task TinderAsync(string s1, string s2)
+ {
+ var rand = new Random((s1 + s2).GetHashCode());
+
+ var wert = Math.Log10(Math.Floor(1000.0 * (SpellCorrect.CompareExact(s1, s2) + rand.NextDouble() * 10.0)) /
+ 1000.0);
+ wert = wert * 100.0 < 100.0 ? wert * 100.0 : 100.0 - wert;
+ wert = wert < 0 ? -wert : wert;
+ return ReplyAsync($"Ihr passt zu {Math.Floor(100.0 * wert) / 100.0}% zusammen");
+ }
+
+ [Command("reddit")]
+ [Summary("Reddit.")]
+ public Task RedditAsync()
+ {
+ return ReplyAsync(
+ "Ein Archiv der Vergangenen Aktionen findet man hier: https://www.reddit.com/r/ReconquistaInternet/");
+ }
+
+ [Command("compare")]
+ [Summary("Echos a message.")]
+ public async Task KickAsync()
+ {
+ //await this.Context.Guild.DownloadUsersAsync();
+ var users = Context.Guild.GetUsersAsync();
+ var test = File.ReadAllLines("RG.txt");
+ await users;
+ var us = users.Result.Select(x => x.Username);
+
+ var lines = test.Where(x => !x.Equals(string.Empty)).ToList();
+
+
+ var sc = new SpellCorrect();
+
+ var res = new List<string>();
+
+ foreach (var line in lines)
+ {
+ var best = us.OrderBy(user => sc.Compare(user, line)).First();
+
+ double fit = sc.Compare(best, line);
+
+ if (!(fit < SpellCorrect.ErrorThreshold - 20000)) continue;
+ res.Add(fit.Equals(0) ? $"@\t{best} !!! => {line}" : $"-\t{best} hat Ähnlichkeit mit: {line}");
+ }
+
+ var sb = new StringBuilder();
+ foreach (var re in res)
+ {
+ if (sb.Length + re.Length > 1798)
+ {
+ await this.ReplyTimedAsync(sb.ToString(), TimeSpan.FromSeconds(90));
+ sb.Clear();
+ }
+
+ sb.AppendLine(re);
+ }
+
+ if (Permissions.Check(Context, new[] {"Admin", "Mod"}))
+ await this.ReplyTimedAsync(sb.ToString(), TimeSpan.FromSeconds(90));
+
+ //await this.ReplyAsync($"{count} Duplikate gefunden");
+ }
+
+
+ [Command("clear")]
+ [Summary("Cleans up messages.")]
+ public void DeleteAsync(int count)
+ {
+ var messagesAsync = Context.Channel.GetMessagesAsync(count);
+ if (messagesAsync != null)
+ {
+ Task.WaitAll(messagesAsync.ToArray());
+ var list = messagesAsync.ToEnumerable().ToList();
+ var messages = new List<IMessage>();
+ foreach (var task in list) messages.AddRange(task.ToList());
+
+ if (Permissions.Check(Context, new[] {"Admin", "Mod", "Meister"}))
+ {
+ var waiters = new List<Task>();
+ foreach (var message in messages) waiters.Add(((IUserMessage) message).DeleteAsync());
+
+ Task.WaitAll(waiters.ToArray());
+ }
+ }
+ }
+
+ [Command("check")]
+ [Summary("Echos a message.")]
+ [Alias("Check")]
+ public async Task CheckAsync(string quarry)
+ {
+ var perm = new List<string> {"Admin", "Mod", "Privatpolizei"};
+
+ Permissions.Test(Context, perm.ToArray());
+
+ var test = File.ReadAllLines("RG.txt");
+
+ var lines = test.Where(x => !x.Equals(string.Empty)).ToList();
+
+
+ var sc = new SpellCorrect();
+ var count = lines.OrderBy(line => sc.Compare(quarry, line)).First();
+
+ var fit = sc.Compare(count, quarry);
+
+ string antwort;
+
+ antwort = fit < SpellCorrect.ErrorThreshold - 20000
+ ? $"```xl\nAuf anderem Server Match gefunden: {count}"
+ : $"```xl\nAuf anderem Server Kein Match gefunden: {quarry}";
+
+
+ var users = Context.Guild.GetUsersAsync();
+ await users;
+ var us = users.Result.Select(x => x.Username);
+
+ sc = new SpellCorrect();
+ count = us.OrderBy(line => sc.Compare(quarry, line)).First();
+
+ fit = sc.Compare(count, quarry);
+
+ antwort = fit < SpellCorrect.ErrorThreshold - 20000
+ ? $"{antwort}\nAuf unserem Server Match gefunden: {count}\n```"
+ : $"{antwort}\nAuf unserem Server Kein Match gefunden: {quarry} \n```";
+
+ await ReplyAsync(antwort);
+ }
+ }
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/DiscoBot.csproj b/dsa/DiscoBot/DiscoBot.csproj
new file mode 100644
index 0000000..09f4cfd
--- /dev/null
+++ b/dsa/DiscoBot/DiscoBot.csproj
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{1186AF1C-BC46-4B3D-BEE0-CE478B8AEAC7}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>DiscoBot</RootNamespace>
+ <AssemblyName>DiscoBot</AssemblyName>
+ <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+ <TargetFrameworkProfile />
+ <NuGetPackageImportStamp>
+ </NuGetPackageImportStamp>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Discord.Net.Commands, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\Discord.Net.Commands.2.1.0\lib\net46\Discord.Net.Commands.dll</HintPath>
+ </Reference>
+ <Reference Include="Discord.Net.Core, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\Discord.Net.Core.2.1.0\lib\net46\Discord.Net.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="Discord.Net.Rest, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\Discord.Net.Rest.2.1.0\lib\net46\Discord.Net.Rest.dll</HintPath>
+ </Reference>
+ <Reference Include="Discord.Net.Rpc, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\Discord.Net.Rpc.1.0.2\lib\net45\Discord.Net.Rpc.dll</HintPath>
+ </Reference>
+ <Reference Include="Discord.Net.Webhook, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\Discord.Net.Webhook.2.1.0\lib\netstandard1.3\Discord.Net.Webhook.dll</HintPath>
+ </Reference>
+ <Reference Include="Discord.Net.WebSocket, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\Discord.Net.WebSocket.2.1.0\lib\net46\Discord.Net.WebSocket.dll</HintPath>
+ </Reference>
+ <Reference Include="FSharp.Core, Version=4.6.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <HintPath>..\packages\FSharp.Core.4.6.2\lib\net45\FSharp.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.Extensions.DependencyInjection, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
+ <HintPath>..\packages\Microsoft.Extensions.DependencyInjection.2.2.0\lib\net461\Microsoft.Extensions.DependencyInjection.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
+ <HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
+ </Reference>
+ <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+ <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Collections.Immutable, Version=1.2.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <HintPath>..\packages\System.Collections.Immutable.1.5.0\lib\netstandard2.0\System.Collections.Immutable.dll</HintPath>
+ </Reference>
+ <Reference Include="System.ComponentModel.Composition" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.3.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+ <HintPath>..\packages\System.Diagnostics.DiagnosticSource.4.5.1\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Interactive.Async, Version=3.2.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
+ <HintPath>..\packages\System.Interactive.Async.3.2.0\lib\net46\System.Interactive.Async.dll</HintPath>
+ </Reference>
+ <Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+ <HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
+ <Private>True</Private>
+ <Private>True</Private>
+ </Reference>
+ <Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <HintPath>..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <HintPath>..\packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll</HintPath>
+ <Private>True</Private>
+ <Private>True</Private>
+ </Reference>
+ <Reference Include="System.Runtime.Extensions, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <HintPath>..\packages\System.Runtime.Extensions.4.3.1\lib\net462\System.Runtime.Extensions.dll</HintPath>
+ <Private>True</Private>
+ <Private>True</Private>
+ </Reference>
+ <Reference Include="System.Security.Cryptography.Algorithms, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net461\System.Security.Cryptography.Algorithms.dll</HintPath>
+ <Private>True</Private>
+ </Reference>
+ <Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <HintPath>..\packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll</HintPath>
+ <Private>True</Private>
+ <Private>True</Private>
+ </Reference>
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Auxiliary\CommandExtension.cs" />
+ <Compile Include="Auxiliary\Dice.cs" />
+ <Compile Include="Auxiliary\Permissions.cs" />
+ <Compile Include="Commands\MiscCommands.cs" />
+ <Compile Include="Auxiliary\SpellCorrect.cs" />
+ <Compile Include="Commands\FileHandler.cs" />
+ <Compile Include="Auxiliary\RandomMisc.cs" />
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Properties\Settings.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>
+ <DependentUpon>Settings.settings</DependentUpon>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ <None Include="Help.json" />
+ <None Include="packages.config" />
+ <None Include="Properties\Settings.settings">
+ <Generator>SettingsSingleFileGenerator</Generator>
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="ToRework\" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <Import Project="..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
+ </Target>
+</Project> \ No newline at end of file
diff --git a/dsa/DiscoBot/Help.json b/dsa/DiscoBot/Help.json
new file mode 100644
index 0000000..44ce054
--- /dev/null
+++ b/dsa/DiscoBot/Help.json
@@ -0,0 +1,120 @@
+{
+ "CommandInfos": [
+ {
+ "Name": "ich bin",
+ "Scope": "All",
+ "Brief": "Setzt den gespielten Charakter fest",
+ "Description": [
+ "Mit \"!Ich bin\" kann der gespielte Charakter definiert, bzw. gewechselt werden.\n",
+ " Die Charaktere müssen als *.xml Dateien hinterlegt sein.\n\n",
+ " !ich Zeigt an welcher Charakter zur Zeit gespielt wird\n",
+ " !ich bin Zalibius Wechsel zum Helden Zalibius\n",
+ " !ich Rhoktar Orkische Variante von !ich bin.\n",
+ " Wechselt zu Rhoktar.\n\n",
+ " !list chars Zeigt die Liste verfügbarer Charaktere.\n",
+ " \n"
+ ]
+ },
+ {
+ "Name": "List",
+ "Scope": "All",
+ "Brief": "Anzeige vonSpielrelevanten Listen",
+ "Description": [
+ "Mit \"!list\" lassen sich spielrelevante Listen ausgeben. Die Angezeigte Liste wird nach einiger Zeit wieder gelöscht.\n",
+ "\n",
+ " !list chars Liste aller verfügbaren Helden (eingelesen per *.xml)\n",
+ " und NSCs.\n",
+ " (Mit \"!ich bin\" kann der Held ausgewählt werden.)\n",
+ " !list commands Liste aller verwendbaren Bot-Kommandos.\n",
+ " !list sounds Liste der Soundeffekte." ]
+ },
+ {
+ "Name": "Held",
+ "Scope": "All",
+ "Brief": "Anzeige von Heldenwerten",
+ "Description": [
+ "Mit \"!Held\" lassen sich Heldenwerte ausgeben. Mehrere Werte können gleichzeitig angefordert werde. \"!Held LE Waffen\" liefert so z.B. Informationen zur Lebensenergie und den Kampfwerten.\n Bis auf wenige Ausnahmen wird die Angezeigte Liste nach einiger Zeit wieder gelöscht.\n",
+ "\n",
+ " !Held Zeigt den Heldenbrief an.\n",
+ " (Diese Liste wird nicht automatisch gelöscht)\n",
+ " !Held Eigenschaften Zeigt die Eigenschaften MU/KL/CH/IN/KK/GE/FF/KO.\n",
+ " !Held e Kurzform von \"!Held Eigenschaften\".\n",
+ " !Held LE Zeigt LE an.\n",
+ " !Held AE Zeigt AE an.\n",
+ " !Held stats Zeigt Eigenschaften und zusätzlich SO/LE/AE.\n",
+ " !Held Kampfwerte Zeigt AT/PA für aktivierte Waffentalente.\n",
+ " !Held Waffe/!list w Kurzformen von \"!Held Kampfwerte\".\n",
+ " !Held Vorteile Zeigt Vor- und Nachteile an.\n",
+ " !Held v Kurzform von \"!Held Vorteile\".\n",
+ " !Held Talente Zeigt die Liste aller aktivierten Talente, deren TaW,\n",
+ " sowie die Probe.\n",
+ " !Held t Kurzform von \"!Held Talente\".\n",
+ " !Held Zauber Zeigt die Liste aller aktivierten Zauber, deren ZaW,\n",
+ " sowie die Probe.\n",
+ " !Held z Kurzform von \"!Held Zauber\".\n"
+ ]
+ },
+ {
+ "Name": "LE",
+ "Scope": "All",
+ "Brief": "Ändert dein Leben - im wahrsten Sinne des Wortes",
+ "Description": [
+ "Mit !LE zeigt man die Lebensenergie an, ändert sie, oder setzt sie auf einen neuen Wert\n\n",
+ " !LE Zeigt Lebensenergie an\n",
+ " !LE 30 Setzt LE auf 30\n",
+ " !LE +5 Erhöht LE um 5 (bis zum Maximum)\n",
+ " !LE ++5 Erhöht LE um 5 (ignoriert Maximum)\n",
+ " !LE -5 Verringert LE um 5\n \n"
+ ]
+ },
+ {
+ "Name": "AE",
+ "Scope": "All",
+ "Brief": "Ändert Astralenergie",
+ "Description": [
+ "Mit !AE (oder !Asp) zeigt man die Astralenergie an, ändert sie, oder setzt sie auf einen neuen Wert\n\n",
+ " !AE Zeigt Astralenergie an\n",
+ " !AE 30 Setzt Asp auf 30\n",
+ " !AE +5 Erhöht Asp um 5 (bis zum Maximum)\n",
+ " !AE ++5 Erhöht Asp um 5 (ignoriert Maximum)\n",
+ " !AE -5 Verringert Asp um 5 (Minimum 0)\n"
+ ]
+ },
+ {
+ "Name": "Gm",
+ "Scope": "Meister",
+ "Brief": "Kontrolliere andere Charaktere",
+ "Description": [
+ "Mit !GM fürhrt man commands als eine andere Person aus.",
+ " !GM [charaktername] [command] [commandattribut] [mofifier]",
+ " Unterstützte [commands]'s:",
+ " !GM [name] LE",
+ " !GM [name] AE",
+ " !GM [name] Talent",
+ " !GM [name] Fernkampf",
+ " !GM [name] Eigenschaft",
+ " !GM [name] Zauber",
+ " !GM [name] Angriff",
+ " !GM [name] Parade"
+ ]
+ },
+ {
+ "Name": "ich bin",
+ "Scope": "All",
+ "Brief": "Kontrolliere andere Charaktere",
+ "Description": [
+ "Mit !GM fürhrt man commands als eine andere Person aus.",
+ " !GM [charaktername] [command] [commandattribut] [mofifier]",
+ " Unterstützte [commands]'s:",
+ " !GM [name] LE",
+ " !GM [name] AE",
+ " !GM [name] Talent",
+ " !GM [name] Fernkampf",
+ " !GM [name] Eigenschaft",
+ " !GM [name] Zauber",
+ " !GM [name] Angriff",
+ " !GM [name] Parade"
+ ]
+ }
+ ]
+}
diff --git a/dsa/DiscoBot/Program.cs b/dsa/DiscoBot/Program.cs
new file mode 100644
index 0000000..4314a8d
--- /dev/null
+++ b/dsa/DiscoBot/Program.cs
@@ -0,0 +1,113 @@
+using System;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Reflection;
+using System.Threading.Tasks;
+using Discord;
+using Discord.Commands;
+using Discord.WebSocket;
+
+namespace DiscoBot
+{
+ public class Program
+ {
+ private DiscordSocketClient client;
+ private CommandService commands;
+ private IServiceProvider services = null;
+
+ public static void Main(string[] args)
+ {
+ new Program().StartAsync().GetAwaiter().GetResult();
+ }
+
+ public async Task StartAsync()
+ {
+ client = new DiscordSocketClient();
+ commands = new CommandService();
+
+
+ var token = File.ReadAllText("Token");
+ //Properties.Settings.Default.Token;
+
+ AppDomain.CurrentDomain.ProcessExit += OnProcessExit;
+
+ await InstallCommandsAsync();
+
+ await client.LoginAsync(TokenType.Bot, token);
+ await client.StartAsync();
+
+ await Task.Delay(-1);
+ }
+
+ public Task InstallCommandsAsync()
+ {
+ // Hook the MessageReceived Event into our Command Handler
+ client.MessageReceived += HandleCommandAsync;
+
+ // Discover all of the commands in this assembly and load them.
+ return commands.AddModulesAsync(Assembly.GetEntryAssembly());
+ }
+
+ public async Task HandleCommandAsync(SocketMessage messageParam)
+ {
+ // Don't process the command if it was a System Message
+ if (!(messageParam is SocketUserMessage message)) return;
+
+ // Create a number to track where the prefix ends and the command begins
+ var argPos = 0;
+
+ // Determine if the message is a command, based on if it starts with '!' or a mention prefix
+ if (!(message.HasCharPrefix('!', ref argPos) ||
+ message.HasMentionPrefix(client.CurrentUser, ref argPos))) return;
+
+
+ // Create a Command Context
+ var context = new CommandContext(client, message);
+
+ // Execute the command. (result does not indicate a return value,
+ // rather an object stating if the command executed successfully)
+ var result = await commands.ExecuteAsync(context, argPos, services);
+ if (result.Error == CommandError.UnknownCommand)
+ await context.Channel.SendMessageAsync(SendCommand(message.Author.Username, message.Content,
+ "https://kobert.dev/api/dsa/commands"));
+ else if (!result.IsSuccess) await context.Channel.SendMessageAsync(result.ErrorReason);
+ }
+
+ private static string SendCommand(string name, string command, string url)
+ {
+ var httpWebRequest = (HttpWebRequest) WebRequest.Create(url);
+ httpWebRequest.ContentType = "application/json";
+ httpWebRequest.Method = "POST";
+
+ using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
+ {
+ command = command.Remove(0, 1);
+ var args = command.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
+
+ var content = string.Empty;
+ if (args.Length > 1) content = "\"" + args.Skip(1).Aggregate((s, n) => s + "\", \"" + n) + "\"";
+
+ var json = "{\"Name\":\"" + name + "\"," +
+ "\"CmdIdentifier\":\"" + args.First() + "\"," +
+ "\"CmdTexts\": [" + content + "] }";
+
+
+ streamWriter.Write(json);
+ streamWriter.Flush();
+ streamWriter.Close();
+ }
+
+ var httpResponse = (HttpWebResponse) httpWebRequest.GetResponse();
+ using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
+ {
+ return streamReader.ReadToEnd();
+ }
+ }
+
+ private static void OnProcessExit(object sender, EventArgs e)
+ {
+ Console.WriteLine("I'm out of here");
+ }
+ }
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/Properties.json b/dsa/DiscoBot/Properties.json
new file mode 100644
index 0000000..8808dbf
--- /dev/null
+++ b/dsa/DiscoBot/Properties.json
@@ -0,0 +1,129 @@
+{
+ "CommandInfos": [
+ {
+ "Name": "ich bin",
+ "Scope": "All",
+ "Brief": "Setzt den gespielten Charakter fest",
+ "Description": [
+ "Mit \"!Ich bin\" kann der gespielte Charakter definiert, bzw. gewechselt werden.\n",
+ " Die Charaktere müssen als *.xml Dateien hinterlegt sein.\n\n",
+ " !ich Zeigt an welcher Charakter zur Zeit gespielt wird\n",
+ " !ich bin Zalibius Wechsel zum Helden Zalibius\n",
+ " !ich Rhoktar Orkische Variante von !ich bin.\n",
+ " Wechselt zu Rhoktar.\n\n",
+ " !list chars Zeigt die Liste verfügbarer Charaktere.\n",
+ " \n"
+ ]
+ },
+ {
+ "Name": "List",
+ "Scope": "All",
+ "Brief": "Anzeige vonSpielrelevanten Listen",
+ "Description": [
+ "Mit \"!list\" lassen sich spielrelevante Listen ausgeben. Die Angezeigte Liste wird nach einiger Zeit wieder gelöscht.\n",
+ "\n",
+ " !list chars Liste aller verfügbaren Helden (eingelesen per *.xml)\n",
+ " und NSCs.\n",
+ " (Mit \"!ich bin\" kann der Held ausgewählt werden.)\n",
+ " !list commands Liste aller verwendbaren Bot-Kommandos.\n",
+ " !list sounds Liste der Soundeffekte."
+ ]
+ },
+ {
+ "Name": "Held",
+ "Scope": "All",
+ "Brief": "Anzeige von Heldenwerten",
+ "Description": [
+ "Mit \"!Held\" lassen sich Heldenwerte ausgeben. Mehrere Werte können gleichzeitig angefordert werde. \"!Held LE Waffen\" liefert so z.B. Informationen zur Lebensenergie und den Kampfwerten.\n Bis auf wenige Ausnahmen wird die Angezeigte Liste nach einiger Zeit wieder gelöscht.\n",
+ "\n",
+ " !Held Zeigt den Heldenbrief an.\n",
+ " (Diese Liste wird nicht automatisch gelöscht)\n",
+ " !Held Eigenschaften Zeigt die Eigenschaften MU/KL/CH/IN/KK/GE/FF/KO.\n",
+ " !Held e Kurzform von \"!Held Eigenschaften\".\n",
+ " !Held LE Zeigt LE an.\n",
+ " !Held AE Zeigt AE an.\n",
+ " !Held stats Zeigt Eigenschaften und zusätzlich SO/LE/AE.\n",
+ " !Held Kampfwerte Zeigt AT/PA für aktivierte Waffentalente.\n",
+ " !Held Waffe/!list w Kurzformen von \"!Held Kampfwerte\".\n",
+ " !Held Vorteile Zeigt Vor- und Nachteile an.\n",
+ " !Held v Kurzform von \"!Held Vorteile\".\n",
+ " !Held Talente Zeigt die Liste aller aktivierten Talente, deren TaW,\n",
+ " sowie die Probe.\n",
+ " !Held t Kurzform von \"!Held Talente\".\n",
+ " !Held Zauber Zeigt die Liste aller aktivierten Zauber, deren ZaW,\n",
+ " sowie die Probe.\n",
+ " !Held z Kurzform von \"!Held Zauber\".\n"
+ ]
+ },
+ {
+ "Name": "LE",
+ "Scope": "All",
+ "Brief": "Ändert dein Leben - im wahrsten Sinne des Wortes",
+ "Description": [
+ "Mit !LE zeigt man die Lebensenergie an, ändert sie, oder setzt sie auf einen neuen Wert\n\n",
+ " !LE Zeigt Lebensenergie an\n",
+ " !LE 30 Setzt LE auf 30\n",
+ " !LE +5 Erhöht LE um 5 (bis zum Maximum)\n",
+ " !LE ++5 Erhöht LE um 5 (ignoriert Maximum)\n",
+ " !LE -5 Verringert LE um 5\n \n"
+ ]
+ },
+ {
+ "Name": "AE",
+ "Scope": "All",
+ "Brief": "Ändert Astralenergie",
+ "Description": [
+ "Mit !AE (oder !Asp) zeigt man die Astralenergie an, ändert sie, oder setzt sie auf einen neuen Wert\n\n",
+ " !AE Zeigt Astralenergie an\n",
+ " !AE 30 Setzt Asp auf 30\n",
+ " !AE +5 Erhöht Asp um 5 (bis zum Maximum)\n",
+ " !AE ++5 Erhöht Asp um 5 (ignoriert Maximum)\n",
+ " !AE -5 Verringert Asp um 5 (Minimum 0)\n"
+ ]
+ },
+ {
+ "Name": "Gm",
+ "Scope": "Meister",
+ "Brief": "Kontrolliere andere Charaktere",
+ "Description": [
+ "Mit !GM fürhrt man commands als eine andere Person aus.",
+ " !GM [charaktername] [command] [commandattribut] [mofifier]",
+ " Unterstützte [commands]'s:",
+ " !GM [name] LE",
+ " !GM [name] AE",
+ " !GM [name] Talent",
+ " !GM [name] Fernkampf",
+ " !GM [name] Eigenschaft",
+ " !GM [name] Zauber",
+ " !GM [name] Angriff",
+ " !GM [name] Parade"
+ ]
+ },
+ {
+ "Name": "ich bin",
+ "Scope": "All",
+ "Brief": "Kontrolliere andere Charaktere",
+ "Description": [
+ "Mit !GM fürhrt man commands als eine andere Person aus.",
+ " !GM [charaktername] [command] [commandattribut] [mofifier]",
+ " Unterstützte [commands]'s:",
+ " !GM [name] LE",
+ " !GM [name] AE",
+ " !GM [name] Talent",
+ " !GM [name] Fernkampf",
+ " !GM [name] Eigenschaft",
+ " !GM [name] Zauber",
+ " !GM [name] Angriff",
+ " !GM [name] Parade"
+ ]
+ }
+ ],
+ "Sounds": [
+ {
+ "Name": "Test",
+ "Url": "http",
+ "Volume": 100
+ }
+
+ ]
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/Properties/AssemblyInfo.cs b/dsa/DiscoBot/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..b0c2901
--- /dev/null
+++ b/dsa/DiscoBot/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// Allgemeine Informationen über eine Assembly werden über die folgenden
+// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+// die einer Assembly zugeordnet sind.
+[assembly: AssemblyTitle("DiscoBot")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("DiscoBot")]
+[assembly: AssemblyCopyright("Copyright © 2017")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
+// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
+// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
+[assembly: ComVisible(false)]
+
+// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
+[assembly: Guid("1186af1c-bc46-4b3d-bee0-ce478b8aeac7")]
+
+// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+//
+// Hauptversion
+// Nebenversion
+// Buildnummer
+// Revision
+//
+// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
+// übernehmen, indem Sie "*" eingeben:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file
diff --git a/dsa/DiscoBot/Properties/DiscoBot-Audio-Sound.json b/dsa/DiscoBot/Properties/DiscoBot-Audio-Sound.json
new file mode 100644
index 0000000..87a0e6b
--- /dev/null
+++ b/dsa/DiscoBot/Properties/DiscoBot-Audio-Sound.json
@@ -0,0 +1,7 @@
+[
+ {
+ "Name": "Test",
+ "Url": "http",
+ "Volume": 100
+ }
+] \ No newline at end of file
diff --git a/dsa/DiscoBot/Properties/DiscoBot-Auxiliary-CommandInfo.json b/dsa/DiscoBot/Properties/DiscoBot-Auxiliary-CommandInfo.json
new file mode 100644
index 0000000..b9941f2
--- /dev/null
+++ b/dsa/DiscoBot/Properties/DiscoBot-Auxiliary-CommandInfo.json
@@ -0,0 +1,101 @@
+[
+ {
+ "Name": "ich bin",
+ "Scope": "All",
+ "Brief": "Setzt den gespielten Charakter fest",
+ "Description": [
+ "Mit \"!Ich bin\" kann der gespielte Charakter definiert, bzw. gewechselt werden.\n",
+ " Die Charaktere müssen als *.xml Dateien hinterlegt sein.\n\n",
+ " !ich Zeigt an welcher Charakter zur Zeit gespielt wird\n",
+ " !ich bin Zalibius Wechsel zum Helden Zalibius\n",
+ " !ich Rhoktar Orkische Variante von !ich bin.\n",
+ " Wechselt zu Rhoktar.\n\n",
+ " !list chars Zeigt die Liste verfügbarer Charaktere.\n",
+ " \n"
+ ]
+ },
+ {
+ "Name": "List",
+ "Scope": "All",
+ "Brief": "Anzeige vonSpielrelevanten Listen",
+ "Description": [
+ "Mit \"!list\" lassen sich spielrelevante Listen ausgeben. Die Angezeigte Liste wird nach einiger Zeit wieder gelöscht.\n",
+ "\n",
+ " !list chars Liste aller verfügbaren Helden (eingelesen per *.xml)\n",
+ " und NSCs.\n",
+ " (Mit \"!ich bin\" kann der Held ausgewählt werden.)\n",
+ " !list commands Liste aller verwendbaren Bot-Kommandos.\n",
+ " !list sounds Liste der Soundeffekte."
+ ]
+ },
+ {
+ "Name": "Held",
+ "Scope": "All",
+ "Brief": "Anzeige von Heldenwerten",
+ "Description": [
+ "Mit \"!Held\" lassen sich Heldenwerte ausgeben. Mehrere Werte können gleichzeitig angefordert werde. \"!Held LE Waffen\" liefert so z.B. Informationen zur Lebensenergie und den Kampfwerten.\n Bis auf wenige Ausnahmen wird die Angezeigte Liste nach einiger Zeit wieder gelöscht.\n",
+ "\n",
+ " !Held Zeigt den Heldenbrief an.\n",
+ " (Diese Liste wird nicht automatisch gelöscht)\n",
+ " !Held Eigenschaften Zeigt die Eigenschaften MU/KL/CH/IN/KK/GE/FF/KO.\n",
+ " !Held e Kurzform von \"!Held Eigenschaften\".\n",
+ " !Held LE Zeigt LE an.\n",
+ " !Held AE Zeigt AE an.\n",
+ " !Held stats Zeigt Eigenschaften und zusätzlich SO/LE/AE.\n",
+ " !Held Kampfwerte Zeigt AT/PA für aktivierte Waffentalente.\n",
+ " !Held Waffe/!list w Kurzformen von \"!Held Kampfwerte\".\n",
+ " !Held Vorteile Zeigt Vor- und Nachteile an.\n",
+ " !Held v Kurzform von \"!Held Vorteile\".\n",
+ " !Held Talente Zeigt die Liste aller aktivierten Talente, deren TaW,\n",
+ " sowie die Probe.\n",
+ " !Held t Kurzform von \"!Held Talente\".\n",
+ " !Held Zauber Zeigt die Liste aller aktivierten Zauber, deren ZaW,\n",
+ " sowie die Probe.\n",
+ " !Held z Kurzform von \"!Held Zauber\".\n"
+ ]
+ },
+ {
+ "Name": "LE",
+ "Scope": "All",
+ "Brief": "Ändert dein Leben - im wahrsten Sinne des Wortes",
+ "Description": [
+ "Mit !LE zeigt man die Lebensenergie an, ändert sie, oder setzt sie auf einen neuen Wert\n\n",
+ " !LE Zeigt Lebensenergie an\n",
+ " !LE 30 Setzt LE auf 30\n",
+ " !LE +5 Erhöht LE um 5 (bis zum Maximum)\n",
+ " !LE ++5 Erhöht LE um 5 (ignoriert Maximum)\n",
+ " !LE -5 Verringert LE um 5\n \n"
+ ]
+ },
+ {
+ "Name": "AE",
+ "Scope": "All",
+ "Brief": "Ändert Astralenergie",
+ "Description": [
+ "Mit !AE (oder !Asp) zeigt man die Astralenergie an, ändert sie, oder setzt sie auf einen neuen Wert\n\n",
+ " !AE Zeigt Astralenergie an\n",
+ " !AE 30 Setzt Asp auf 30\n",
+ " !AE +5 Erhöht Asp um 5 (bis zum Maximum)\n",
+ " !AE ++5 Erhöht Asp um 5 (ignoriert Maximum)\n",
+ " !AE -5 Verringert Asp um 5 (Minimum 0)\n"
+ ]
+ },
+ {
+ "Name": "Gm",
+ "Scope": "Meister",
+ "Brief": "Kontrolliere andere Charaktere",
+ "Description": [
+ "Mit !GM fürhrt man commands als eine andere Person aus.",
+ " !GM [charaktername] [command] [commandattribut] [mofifier]",
+ " Unterstützte [commands]'s:",
+ " !GM [name] LE",
+ " !GM [name] AE",
+ " !GM [name] Talent",
+ " !GM [name] Fernkampf",
+ " !GM [name] Eigenschaft",
+ " !GM [name] Zauber",
+ " !GM [name] Angriff",
+ " !GM [name] Parade"
+ ]
+ }
+] \ No newline at end of file
diff --git a/dsa/DiscoBot/Properties/DiscoBot-DSA_Game-Characters-Character.json b/dsa/DiscoBot/Properties/DiscoBot-DSA_Game-Characters-Character.json
new file mode 100644
index 0000000..fd387f5
--- /dev/null
+++ b/dsa/DiscoBot/Properties/DiscoBot-DSA_Game-Characters-Character.json
@@ -0,0 +1,290 @@
+[
+ {
+ "Eigenschaften": {},
+ "Talente": [],
+ "Zauber": [],
+ "Kampftalente": [],
+ "Vorteile": [],
+ "PropTable": {
+ "MU": "Mut",
+ "KL": "Klugheit",
+ "IN": "Intuition",
+ "CH": "Charisma",
+ "FF": "Fingerfertigkeit",
+ "GE": "Gewandtheit",
+ "KO": "Konstitution",
+ "KK": "Körperkraft"
+ },
+ "Lebenspunkte_Basis": 30,
+ "Lebenspunkte_Aktuell": 30,
+ "Ausdauer_Basis": 0,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Basis": 20,
+ "Astralpunkte_Aktuell": 20,
+ "Name": "Felis Exodus Schattenwald"
+ },
+ {
+ "Eigenschaften": {},
+ "Talente": [],
+ "Zauber": [],
+ "Kampftalente": [],
+ "Vorteile": [],
+ "PropTable": {
+ "MU": "Mut",
+ "KL": "Klugheit",
+ "IN": "Intuition",
+ "CH": "Charisma",
+ "FF": "Fingerfertigkeit",
+ "GE": "Gewandtheit",
+ "KO": "Konstitution",
+ "KK": "Körperkraft"
+ },
+ "Lebenspunkte_Basis": 29,
+ "Lebenspunkte_Aktuell": 29,
+ "Ausdauer_Basis": 0,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Basis": 0,
+ "Astralpunkte_Aktuell": 0,
+ "Name": "Gardist"
+ },
+ {
+ "Eigenschaften": {},
+ "Talente": [],
+ "Zauber": [],
+ "Kampftalente": [],
+ "Vorteile": [],
+ "PropTable": {
+ "MU": "Mut",
+ "KL": "Klugheit",
+ "IN": "Intuition",
+ "CH": "Charisma",
+ "FF": "Fingerfertigkeit",
+ "GE": "Gewandtheit",
+ "KO": "Konstitution",
+ "KK": "Körperkraft"
+ },
+ "Lebenspunkte_Basis": 31,
+ "Lebenspunkte_Aktuell": 31,
+ "Ausdauer_Basis": 0,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Basis": 0,
+ "Astralpunkte_Aktuell": 0,
+ "Name": "Hartmut Reiher"
+ },
+ {
+ "Eigenschaften": {},
+ "Talente": [],
+ "Zauber": [],
+ "Kampftalente": [],
+ "Vorteile": [],
+ "PropTable": {
+ "MU": "Mut",
+ "KL": "Klugheit",
+ "IN": "Intuition",
+ "CH": "Charisma",
+ "FF": "Fingerfertigkeit",
+ "GE": "Gewandtheit",
+ "KO": "Konstitution",
+ "KK": "Körperkraft"
+ },
+ "Lebenspunkte_Basis": 21,
+ "Lebenspunkte_Aktuell": 21,
+ "Ausdauer_Basis": 0,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Basis": 35,
+ "Astralpunkte_Aktuell": 35,
+ "Name": "Helga vom Drachenei, Tausendsasserin"
+ },
+ {
+ "Eigenschaften": {},
+ "Talente": [],
+ "Zauber": [],
+ "Kampftalente": [],
+ "Vorteile": [],
+ "PropTable": {
+ "MU": "Mut",
+ "KL": "Klugheit",
+ "IN": "Intuition",
+ "CH": "Charisma",
+ "FF": "Fingerfertigkeit",
+ "GE": "Gewandtheit",
+ "KO": "Konstitution",
+ "KK": "Körperkraft"
+ },
+ "Lebenspunkte_Basis": 25,
+ "Lebenspunkte_Aktuell": 25,
+ "Ausdauer_Basis": 0,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Basis": 0,
+ "Astralpunkte_Aktuell": 0,
+ "Name": "Krenko"
+ },
+ {
+ "Eigenschaften": {},
+ "Talente": [],
+ "Zauber": [],
+ "Kampftalente": [],
+ "Vorteile": [],
+ "PropTable": {
+ "MU": "Mut",
+ "KL": "Klugheit",
+ "IN": "Intuition",
+ "CH": "Charisma",
+ "FF": "Fingerfertigkeit",
+ "GE": "Gewandtheit",
+ "KO": "Konstitution",
+ "KK": "Körperkraft"
+ },
+ "Lebenspunkte_Basis": 39,
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Basis": 0,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Basis": 0,
+ "Astralpunkte_Aktuell": 0,
+ "Name": "Ledur Torfinson"
+ },
+ {
+ "Eigenschaften": {},
+ "Talente": [],
+ "Zauber": [],
+ "Kampftalente": [],
+ "Vorteile": [],
+ "PropTable": {
+ "MU": "Mut",
+ "KL": "Klugheit",
+ "IN": "Intuition",
+ "CH": "Charisma",
+ "FF": "Fingerfertigkeit",
+ "GE": "Gewandtheit",
+ "KO": "Konstitution",
+ "KK": "Körperkraft"
+ },
+ "Lebenspunkte_Basis": 26,
+ "Lebenspunkte_Aktuell": 26,
+ "Ausdauer_Basis": 0,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Basis": 13,
+ "Astralpunkte_Aktuell": 13,
+ "Name": "Morla"
+ },
+ {
+ "Eigenschaften": {},
+ "Talente": [],
+ "Zauber": [],
+ "Kampftalente": [],
+ "Vorteile": [],
+ "PropTable": {
+ "MU": "Mut",
+ "KL": "Klugheit",
+ "IN": "Intuition",
+ "CH": "Charisma",
+ "FF": "Fingerfertigkeit",
+ "GE": "Gewandtheit",
+ "KO": "Konstitution",
+ "KK": "Körperkraft"
+ },
+ "Lebenspunkte_Basis": 28,
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Basis": 0,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Basis": 40,
+ "Astralpunkte_Aktuell": 40,
+ "Name": "Numeri Illuminus"
+ },
+ {
+ "Eigenschaften": {},
+ "Talente": [],
+ "Zauber": [],
+ "Kampftalente": [],
+ "Vorteile": [],
+ "PropTable": {
+ "MU": "Mut",
+ "KL": "Klugheit",
+ "IN": "Intuition",
+ "CH": "Charisma",
+ "FF": "Fingerfertigkeit",
+ "GE": "Gewandtheit",
+ "KO": "Konstitution",
+ "KK": "Körperkraft"
+ },
+ "Lebenspunkte_Basis": 39,
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Basis": 0,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Basis": 16,
+ "Astralpunkte_Aktuell": 16,
+ "Name": "Potus"
+ },
+ {
+ "Eigenschaften": {},
+ "Talente": [],
+ "Zauber": [],
+ "Kampftalente": [],
+ "Vorteile": [],
+ "PropTable": {
+ "MU": "Mut",
+ "KL": "Klugheit",
+ "IN": "Intuition",
+ "CH": "Charisma",
+ "FF": "Fingerfertigkeit",
+ "GE": "Gewandtheit",
+ "KO": "Konstitution",
+ "KK": "Körperkraft"
+ },
+ "Lebenspunkte_Basis": 18,
+ "Lebenspunkte_Aktuell": 18,
+ "Ausdauer_Basis": 0,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Basis": 13,
+ "Astralpunkte_Aktuell": 13,
+ "Name": "Pump aus der Gosse"
+ },
+ {
+ "Eigenschaften": {},
+ "Talente": [],
+ "Zauber": [],
+ "Kampftalente": [],
+ "Vorteile": [],
+ "PropTable": {
+ "MU": "Mut",
+ "KL": "Klugheit",
+ "IN": "Intuition",
+ "CH": "Charisma",
+ "FF": "Fingerfertigkeit",
+ "GE": "Gewandtheit",
+ "KO": "Konstitution",
+ "KK": "Körperkraft"
+ },
+ "Lebenspunkte_Basis": 34,
+ "Lebenspunkte_Aktuell": 34,
+ "Ausdauer_Basis": 0,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Basis": 17,
+ "Astralpunkte_Aktuell": 17,
+ "Name": "Rhoktar4"
+ },
+ {
+ "Eigenschaften": {},
+ "Talente": [],
+ "Zauber": [],
+ "Kampftalente": [],
+ "Vorteile": [],
+ "PropTable": {
+ "MU": "Mut",
+ "KL": "Klugheit",
+ "IN": "Intuition",
+ "CH": "Charisma",
+ "FF": "Fingerfertigkeit",
+ "GE": "Gewandtheit",
+ "KO": "Konstitution",
+ "KK": "Körperkraft"
+ },
+ "Lebenspunkte_Basis": 28,
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Basis": 0,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Basis": 43,
+ "Astralpunkte_Aktuell": 43,
+ "Name": "Volant"
+ }
+] \ No newline at end of file
diff --git a/dsa/DiscoBot/Properties/Settings.Designer.cs b/dsa/DiscoBot/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..f80dfa5
--- /dev/null
+++ b/dsa/DiscoBot/Properties/Settings.Designer.cs
@@ -0,0 +1,38 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// Dieser Code wurde von einem Tool generiert.
+// Laufzeitversion:4.0.30319.42000
+//
+// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+// der Code erneut generiert wird.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace DiscoBot.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("Mjk0NTU0MDU4Nzg4NzAwMTYx.DOzDcQ.J-nCikbZdZtdrug0E8TwwV_2ITw")]
+ public string Token {
+ get {
+ return ((string)(this["Token"]));
+ }
+ set {
+ this["Token"] = value;
+ }
+ }
+ }
+}
diff --git a/dsa/DiscoBot/Properties/Settings.settings b/dsa/DiscoBot/Properties/Settings.settings
new file mode 100644
index 0000000..f3be2b7
--- /dev/null
+++ b/dsa/DiscoBot/Properties/Settings.settings
@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="DiscoBot.Properties" GeneratedClassName="Settings">
+ <Profiles />
+ <Settings>
+ <Setting Name="Token" Type="System.String" Scope="User">
+ <Value Profile="(Default)">Mjk0NTU0MDU4Nzg4NzAwMTYx.DOzDcQ.J-nCikbZdZtdrug0E8TwwV_2ITw</Value>
+ </Setting>
+ </Settings>
+</SettingsFile> \ No newline at end of file
diff --git a/dsa/DiscoBot/Rework/Permissions.cs b/dsa/DiscoBot/Rework/Permissions.cs
new file mode 100644
index 0000000..4d73146
--- /dev/null
+++ b/dsa/DiscoBot/Rework/Permissions.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DiscoBot.Auxiliary
+{
+ using Discord.Commands;
+ using Discord.WebSocket;
+
+ public static class Permissions
+ {
+ public static bool Check(ICommandContext c, string role)
+ {
+ return ((SocketGuildUser)c.User).Roles.ToList().Exists(v => v.Name.Equals(role));
+ }
+
+ public static bool Check(ICommandContext c, string[] roles)
+ {
+ return roles.Any(role => ((SocketGuildUser)c.User).Roles.ToList().Exists(v => v.Name.Equals(role)));
+ }
+
+ public static bool Test(ICommandContext c, string role)
+ {
+ if (!Check(c, role))
+ {
+ c.Channel.SendMessageAsync("```xl\n Keine ausreichenden Berechtigungen\n```").Wait();
+ return false;
+ }
+
+ return true;
+ }
+
+ public static void Test(ICommandContext c, string[] roles)
+ {
+ if (!Check(c, roles))
+ {
+ c.Channel.SendMessageAsync("```xl\n Keine ausreichenden Berechtigungen\n```").Wait();
+ }
+ }
+ }
+}
diff --git a/dsa/DiscoBot/Token b/dsa/DiscoBot/Token
new file mode 100644
index 0000000..4b78e50
--- /dev/null
+++ b/dsa/DiscoBot/Token
@@ -0,0 +1 @@
+Mjk0NTU0MDU4Nzg4NzAwMTYx.DgAvuw.amZ0Ep7-FKjToTf_wnY3h5Ep4Ow \ No newline at end of file
diff --git a/dsa/DiscoBot/packages.config b/dsa/DiscoBot/packages.config
new file mode 100644
index 0000000..75a1f83
--- /dev/null
+++ b/dsa/DiscoBot/packages.config
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Discord.Net" version="2.1.0" targetFramework="net472" />
+ <package id="Discord.Net.Commands" version="2.1.0" targetFramework="net472" />
+ <package id="Discord.Net.Core" version="2.1.0" targetFramework="net472" />
+ <package id="Discord.Net.Rest" version="2.1.0" targetFramework="net472" />
+ <package id="Discord.Net.Rpc" version="1.0.2" targetFramework="net461" />
+ <package id="Discord.Net.Webhook" version="2.1.0" targetFramework="net472" />
+ <package id="Discord.Net.WebSocket" version="2.1.0" targetFramework="net472" />
+ <package id="FSharp.Core" version="4.6.2" targetFramework="net472" />
+ <package id="Microsoft.Extensions.DependencyInjection" version="2.2.0" targetFramework="net472" />
+ <package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="2.2.0" targetFramework="net472" />
+ <package id="Microsoft.NETCore.Platforms" version="2.2.1" targetFramework="net472" />
+ <package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net461" />
+ <package id="NETStandard.Library" version="2.0.3" targetFramework="net461" />
+ <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net472" />
+ <package id="System.AppContext" version="4.3.0" targetFramework="net461" requireReinstallation="true" />
+ <package id="System.Collections" version="4.3.0" targetFramework="net461" />
+ <package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net461" />
+ <package id="System.Collections.Immutable" version="1.5.0" targetFramework="net461" />
+ <package id="System.ComponentModel" version="4.3.0" targetFramework="net461" />
+ <package id="System.Console" version="4.3.1" targetFramework="net461" />
+ <package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net461" />
+ <package id="System.Diagnostics.DiagnosticSource" version="4.5.1" targetFramework="net472" />
+ <package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net461" />
+ <package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net461" requireReinstallation="true" />
+ <package id="System.Globalization" version="4.3.0" targetFramework="net461" />
+ <package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net461" />
+ <package id="System.Interactive.Async" version="3.2.0" targetFramework="net461" />
+ <package id="System.IO" version="4.3.0" targetFramework="net461" requireReinstallation="true" />
+ <package id="System.IO.Compression" version="4.3.0" targetFramework="net461" />
+ <package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net461" />
+ <package id="System.IO.FileSystem" version="4.3.0" targetFramework="net461" />
+ <package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net461" />
+ <package id="System.Linq" version="4.3.0" targetFramework="net461" requireReinstallation="true" />
+ <package id="System.Linq.Expressions" version="4.3.0" targetFramework="net461" requireReinstallation="true" />
+ <package id="System.Net.Http" version="4.3.4" targetFramework="net472" />
+ <package id="System.Net.Primitives" version="4.3.1" targetFramework="net472" />
+ <package id="System.Net.Sockets" version="4.3.0" targetFramework="net461" />
+ <package id="System.ObjectModel" version="4.3.0" targetFramework="net461" />
+ <package id="System.Reflection" version="4.3.0" targetFramework="net461" requireReinstallation="true" />
+ <package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net461" />
+ <package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net461" />
+ <package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net461" />
+ <package id="System.Runtime" version="4.3.1" targetFramework="net472" />
+ <package id="System.Runtime.Extensions" version="4.3.1" targetFramework="net472" />
+ <package id="System.Runtime.Handles" version="4.3.0" targetFramework="net461" />
+ <package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net461" requireReinstallation="true" />
+ <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net461" />
+ <package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net461" />
+ <package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="net461" requireReinstallation="true" />
+ <package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net461" />
+ <package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net461" />
+ <package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="net461" />
+ <package id="System.Text.Encoding" version="4.3.0" targetFramework="net461" />
+ <package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net461" />
+ <package id="System.Text.RegularExpressions" version="4.3.1" targetFramework="net472" />
+ <package id="System.Threading" version="4.3.0" targetFramework="net461" />
+ <package id="System.Threading.Tasks" version="4.3.0" targetFramework="net461" />
+ <package id="System.Threading.Timer" version="4.3.0" targetFramework="net461" />
+ <package id="System.Xml.ReaderWriter" version="4.3.1" targetFramework="net461" />
+ <package id="System.Xml.XDocument" version="4.3.0" targetFramework="net461" />
+</packages> \ No newline at end of file
diff --git a/dsa/DiscoBot/session.json b/dsa/DiscoBot/session.json
new file mode 100644
index 0000000..c81cbf9
--- /dev/null
+++ b/dsa/DiscoBot/session.json
@@ -0,0 +1,6 @@
+{
+ "GeneralContext": null,
+ "Relation": {},
+ "Chars": [],
+ "SessionName": null
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/sessions/TheCrew/TheCrew-0.json b/dsa/DiscoBot/sessions/TheCrew/TheCrew-0.json
new file mode 100644
index 0000000..575cd54
--- /dev/null
+++ b/dsa/DiscoBot/sessions/TheCrew/TheCrew-0.json
@@ -0,0 +1,83 @@
+{
+ "GeneralContext": null,
+ "Relation": {
+ "Nicolas": "Hartmut Reiher",
+ "MagicBro5": "Krenko",
+ "TrueKuehli": "Ledur Torfinson"
+ },
+ "Chars": [
+ {
+ "Name": "Felis Exodus Schattenwald",
+ "Lebenspunkte_Aktuell": 30,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 20
+ },
+ {
+ "Name": "Gardist",
+ "Lebenspunkte_Aktuell": 29,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Hartmut Reiher",
+ "Lebenspunkte_Aktuell": 29,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Helga vom Drachenei, Tausendsasserin",
+ "Lebenspunkte_Aktuell": 21,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 35
+ },
+ {
+ "Name": "Krenko",
+ "Lebenspunkte_Aktuell": 22,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Ledur Torfinson",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Morla",
+ "Lebenspunkte_Aktuell": 26,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Numeri Illuminus",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 40
+ },
+ {
+ "Name": "Potus",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 16
+ },
+ {
+ "Name": "Pump aus der Gosse",
+ "Lebenspunkte_Aktuell": 18,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Rhoktar4",
+ "Lebenspunkte_Aktuell": 34,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 17
+ },
+ {
+ "Name": "Volant",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 43
+ }
+ ],
+ "SessionName": "TheCrew"
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/sessions/copy/copy-0.json b/dsa/DiscoBot/sessions/copy/copy-0.json
new file mode 100644
index 0000000..03c46f3
--- /dev/null
+++ b/dsa/DiscoBot/sessions/copy/copy-0.json
@@ -0,0 +1,79 @@
+{
+ "GeneralContext": null,
+ "Relation": {},
+ "Chars": [
+ {
+ "Name": "Felis Exodus Schattenwald",
+ "Lebenspunkte_Aktuell": 30,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 20
+ },
+ {
+ "Name": "Gardist",
+ "Lebenspunkte_Aktuell": 29,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Hartmut Reiher",
+ "Lebenspunkte_Aktuell": 31,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Helga vom Drachenei, Tausendsasserin",
+ "Lebenspunkte_Aktuell": 21,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 35
+ },
+ {
+ "Name": "Krenko",
+ "Lebenspunkte_Aktuell": 25,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Ledur Torfinson",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Morla",
+ "Lebenspunkte_Aktuell": 26,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Numeri Illuminus",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 40
+ },
+ {
+ "Name": "Potus",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 16
+ },
+ {
+ "Name": "Pump aus der Gosse",
+ "Lebenspunkte_Aktuell": 18,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Rhoktar4",
+ "Lebenspunkte_Aktuell": 34,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 17
+ },
+ {
+ "Name": "Volant",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 43
+ }
+ ],
+ "SessionName": null
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/sessions/test/test-0.json b/dsa/DiscoBot/sessions/test/test-0.json
new file mode 100644
index 0000000..03c46f3
--- /dev/null
+++ b/dsa/DiscoBot/sessions/test/test-0.json
@@ -0,0 +1,79 @@
+{
+ "GeneralContext": null,
+ "Relation": {},
+ "Chars": [
+ {
+ "Name": "Felis Exodus Schattenwald",
+ "Lebenspunkte_Aktuell": 30,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 20
+ },
+ {
+ "Name": "Gardist",
+ "Lebenspunkte_Aktuell": 29,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Hartmut Reiher",
+ "Lebenspunkte_Aktuell": 31,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Helga vom Drachenei, Tausendsasserin",
+ "Lebenspunkte_Aktuell": 21,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 35
+ },
+ {
+ "Name": "Krenko",
+ "Lebenspunkte_Aktuell": 25,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Ledur Torfinson",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Morla",
+ "Lebenspunkte_Aktuell": 26,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Numeri Illuminus",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 40
+ },
+ {
+ "Name": "Potus",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 16
+ },
+ {
+ "Name": "Pump aus der Gosse",
+ "Lebenspunkte_Aktuell": 18,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Rhoktar4",
+ "Lebenspunkte_Aktuell": 34,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 17
+ },
+ {
+ "Name": "Volant",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 43
+ }
+ ],
+ "SessionName": null
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/sessions/test/test-1.json b/dsa/DiscoBot/sessions/test/test-1.json
new file mode 100644
index 0000000..03c46f3
--- /dev/null
+++ b/dsa/DiscoBot/sessions/test/test-1.json
@@ -0,0 +1,79 @@
+{
+ "GeneralContext": null,
+ "Relation": {},
+ "Chars": [
+ {
+ "Name": "Felis Exodus Schattenwald",
+ "Lebenspunkte_Aktuell": 30,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 20
+ },
+ {
+ "Name": "Gardist",
+ "Lebenspunkte_Aktuell": 29,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Hartmut Reiher",
+ "Lebenspunkte_Aktuell": 31,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Helga vom Drachenei, Tausendsasserin",
+ "Lebenspunkte_Aktuell": 21,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 35
+ },
+ {
+ "Name": "Krenko",
+ "Lebenspunkte_Aktuell": 25,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Ledur Torfinson",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Morla",
+ "Lebenspunkte_Aktuell": 26,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Numeri Illuminus",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 40
+ },
+ {
+ "Name": "Potus",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 16
+ },
+ {
+ "Name": "Pump aus der Gosse",
+ "Lebenspunkte_Aktuell": 18,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Rhoktar4",
+ "Lebenspunkte_Aktuell": 34,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 17
+ },
+ {
+ "Name": "Volant",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 43
+ }
+ ],
+ "SessionName": null
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/sessions/test/test-2.json b/dsa/DiscoBot/sessions/test/test-2.json
new file mode 100644
index 0000000..3458c52
--- /dev/null
+++ b/dsa/DiscoBot/sessions/test/test-2.json
@@ -0,0 +1,81 @@
+{
+ "GeneralContext": null,
+ "Relation": {
+ "The Doctor": "Felis Exodus Schattenwald"
+ },
+ "Chars": [
+ {
+ "Name": "Felis Exodus Schattenwald",
+ "Lebenspunkte_Aktuell": 30,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 20
+ },
+ {
+ "Name": "Gardist",
+ "Lebenspunkte_Aktuell": 29,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Hartmut Reiher",
+ "Lebenspunkte_Aktuell": 31,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Helga vom Drachenei, Tausendsasserin",
+ "Lebenspunkte_Aktuell": 21,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 35
+ },
+ {
+ "Name": "Krenko",
+ "Lebenspunkte_Aktuell": 25,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Ledur Torfinson",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Morla",
+ "Lebenspunkte_Aktuell": 26,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Numeri Illuminus",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 40
+ },
+ {
+ "Name": "Potus",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 16
+ },
+ {
+ "Name": "Pump aus der Gosse",
+ "Lebenspunkte_Aktuell": 18,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Rhoktar4",
+ "Lebenspunkte_Aktuell": 34,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 17
+ },
+ {
+ "Name": "Volant",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 43
+ }
+ ],
+ "SessionName": null
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/sessions/test/test-3.json b/dsa/DiscoBot/sessions/test/test-3.json
new file mode 100644
index 0000000..3458c52
--- /dev/null
+++ b/dsa/DiscoBot/sessions/test/test-3.json
@@ -0,0 +1,81 @@
+{
+ "GeneralContext": null,
+ "Relation": {
+ "The Doctor": "Felis Exodus Schattenwald"
+ },
+ "Chars": [
+ {
+ "Name": "Felis Exodus Schattenwald",
+ "Lebenspunkte_Aktuell": 30,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 20
+ },
+ {
+ "Name": "Gardist",
+ "Lebenspunkte_Aktuell": 29,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Hartmut Reiher",
+ "Lebenspunkte_Aktuell": 31,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Helga vom Drachenei, Tausendsasserin",
+ "Lebenspunkte_Aktuell": 21,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 35
+ },
+ {
+ "Name": "Krenko",
+ "Lebenspunkte_Aktuell": 25,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Ledur Torfinson",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Morla",
+ "Lebenspunkte_Aktuell": 26,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Numeri Illuminus",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 40
+ },
+ {
+ "Name": "Potus",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 16
+ },
+ {
+ "Name": "Pump aus der Gosse",
+ "Lebenspunkte_Aktuell": 18,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Rhoktar4",
+ "Lebenspunkte_Aktuell": 34,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 17
+ },
+ {
+ "Name": "Volant",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 43
+ }
+ ],
+ "SessionName": null
+} \ No newline at end of file
diff --git a/dsa/DiscoBot/sessions/test/test-4.json b/dsa/DiscoBot/sessions/test/test-4.json
new file mode 100644
index 0000000..46853cf
--- /dev/null
+++ b/dsa/DiscoBot/sessions/test/test-4.json
@@ -0,0 +1,81 @@
+{
+ "GeneralContext": null,
+ "Relation": {
+ "The Doctor": "Felis Exodus Schattenwald"
+ },
+ "Chars": [
+ {
+ "Name": "Felis Exodus Schattenwald",
+ "Lebenspunkte_Aktuell": 20,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 20
+ },
+ {
+ "Name": "Gardist",
+ "Lebenspunkte_Aktuell": 29,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Hartmut Reiher",
+ "Lebenspunkte_Aktuell": 31,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Helga vom Drachenei, Tausendsasserin",
+ "Lebenspunkte_Aktuell": 21,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 35
+ },
+ {
+ "Name": "Krenko",
+ "Lebenspunkte_Aktuell": 25,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Ledur Torfinson",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 0
+ },
+ {
+ "Name": "Morla",
+ "Lebenspunkte_Aktuell": 26,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Numeri Illuminus",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 40
+ },
+ {
+ "Name": "Potus",
+ "Lebenspunkte_Aktuell": 39,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 16
+ },
+ {
+ "Name": "Pump aus der Gosse",
+ "Lebenspunkte_Aktuell": 18,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 13
+ },
+ {
+ "Name": "Rhoktar4",
+ "Lebenspunkte_Aktuell": 34,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 17
+ },
+ {
+ "Name": "Volant",
+ "Lebenspunkte_Aktuell": 28,
+ "Ausdauer_Aktuell": 0,
+ "Astralpunkte_Aktuell": 43
+ }
+ ],
+ "SessionName": null
+} \ No newline at end of file