diff options
Diffstat (limited to 'DiscoBot')
-rw-r--r-- | DiscoBot/Auxiliary/TalentEnumerableExtension.cs | 9 | ||||
-rw-r--r-- | DiscoBot/Commands/CommandExtension.cs (renamed from DiscoBot/Auxiliary/CommandExtension.cs) | 0 | ||||
-rw-r--r-- | DiscoBot/Commands/FileHandler.cs | 3 | ||||
-rw-r--r-- | DiscoBot/Commands/Gm.cs | 5 | ||||
-rw-r--r-- | DiscoBot/Commands/HeldList.cs | 2 | ||||
-rw-r--r-- | DiscoBot/Commands/Help.cs | 5 | ||||
-rw-r--r-- | DiscoBot/Commands/LebenUndAstral.cs | 5 | ||||
-rw-r--r-- | DiscoBot/Commands/List.cs | 2 | ||||
-rw-r--r-- | DiscoBot/Commands/NpcCommands.cs | 4 | ||||
-rw-r--r-- | DiscoBot/Commands/ProbenTest.cs | 12 | ||||
-rw-r--r-- | DiscoBot/DSA_Game/Characters/Character.cs | 5 | ||||
-rw-r--r-- | DiscoBot/DSA_Game/Characters/NPC.cs | 1 | ||||
-rw-r--r-- | DiscoBot/DSA_Game/Characters/SaveChar.cs | 1 | ||||
-rw-r--r-- | DiscoBot/DSA_Game/Dsa.cs | 5 | ||||
-rw-r--r-- | DiscoBot/DiscoBot.csproj | 6 | ||||
-rw-r--r-- | DiscoBot/Program.cs | 49 | ||||
-rw-r--r-- | DiscoBot/Rework/Permissions.cs (renamed from DiscoBot/Auxiliary/Permissions.cs) | 0 | ||||
-rw-r--r-- | DiscoBot/ToRework/CommandExtension.cs | 119 | ||||
-rw-r--r-- | DiscoBot/ToRework/Permissions.cs | 43 | ||||
-rw-r--r-- | DiscoBot/session.json | 54 |
20 files changed, 298 insertions, 32 deletions
diff --git a/DiscoBot/Auxiliary/TalentEnumerableExtension.cs b/DiscoBot/Auxiliary/TalentEnumerableExtension.cs index 43c917e..df01de3 100644 --- a/DiscoBot/Auxiliary/TalentEnumerableExtension.cs +++ b/DiscoBot/Auxiliary/TalentEnumerableExtension.cs @@ -1,16 +1,15 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Text; -using System.Threading.Tasks; +using DSALib; + namespace DiscoBot.Auxiliary { using DiscoBot.Audio; - using DiscoBot.Commands; - using DiscoBot.DSA_Game; using DiscoBot.DSA_Game.Characters; + public static class TalentEnumerableExtension { public static string ProbenTest(this IEnumerable<Talent> List, Character c, string talent, int erschwernis = 0) diff --git a/DiscoBot/Auxiliary/CommandExtension.cs b/DiscoBot/Commands/CommandExtension.cs index 098e35f..098e35f 100644 --- a/DiscoBot/Auxiliary/CommandExtension.cs +++ b/DiscoBot/Commands/CommandExtension.cs diff --git a/DiscoBot/Commands/FileHandler.cs b/DiscoBot/Commands/FileHandler.cs index 52c8476..0b87b15 100644 --- a/DiscoBot/Commands/FileHandler.cs +++ b/DiscoBot/Commands/FileHandler.cs @@ -9,10 +9,11 @@ using DiscoBot.DSA_Game.Characters; using Discord.Commands; + using DSALib; public class FileHandler : ModuleBase { - [Command("send"), Summary("fügt Helden hinzu")] + //[Command("send"), Summary("fügt Helden hinzu")] public async Task AddChar() { var msg = this.Context.Message; diff --git a/DiscoBot/Commands/Gm.cs b/DiscoBot/Commands/Gm.cs index 540682c..483e9d2 100644 --- a/DiscoBot/Commands/Gm.cs +++ b/DiscoBot/Commands/Gm.cs @@ -9,11 +9,12 @@ namespace DiscoBot.Commands using DiscoBot.DSA_Game; using Discord.Commands; + using DSALib.Characters; public class Iam : ModuleBase { - [Command("Iam"), Summary("Wechselt den Character")] + //[Command("Iam"), Summary("Wechselt den Character")] [Alias("iam", "I_am", "i_am", "IchBin", "ichbin", "Ichbin", "Ich_bin", "ich_bin", "Ich", "ich", "I", "i")] public Task Change_Character(params string[] givenName) // use fancy parameters { @@ -79,7 +80,7 @@ namespace DiscoBot.Commands return $"{name} verwendet {waffe}"; } - [Command("gm"), Summary("Führt eine probe aus")] + //[Command("gm"), Summary("Führt eine probe aus")] [Alias("GM", "as", "As", "als")] public async Task ProbeAsync([Summary("Fernkampfwaffe")] string name, string command, string cmdText = "", int modifier = 0) { diff --git a/DiscoBot/Commands/HeldList.cs b/DiscoBot/Commands/HeldList.cs index ab4e794..a8f26e0 100644 --- a/DiscoBot/Commands/HeldList.cs +++ b/DiscoBot/Commands/HeldList.cs @@ -15,7 +15,7 @@ public class Held : ModuleBase { - [Command("held"), Summary("gibt Heldenwerte aus")] + //[Command("held"), Summary("gibt Heldenwerte aus")] [Alias("Held", "Wert", "Werte", "werte", "char", "Char")] public async Task ListAsync([Summary("Werte")] params string[] prop_list) { diff --git a/DiscoBot/Commands/Help.cs b/DiscoBot/Commands/Help.cs index aa168fc..4c378c9 100644 --- a/DiscoBot/Commands/Help.cs +++ b/DiscoBot/Commands/Help.cs @@ -67,8 +67,9 @@ namespace DiscoBot.Commands } return res; } +/* - [Command("help"), Summary("prints the help menu.")] + //[Command("help"), Summary("prints the help menu.")] [Alias("Help", "man", "Man", "Hilfe", "hilfe", "h")] public async Task ShowHelpAsync(params string[] command_list) { @@ -93,6 +94,6 @@ namespace DiscoBot.Commands //await this.ReplyAsync("```xl\n" + com.GetDescription() + "\n```"); await this.ReplyAsync("```xl\n" + Get_Specific_Help(command) + "\n```"); - } + }*/ } } diff --git a/DiscoBot/Commands/LebenUndAstral.cs b/DiscoBot/Commands/LebenUndAstral.cs index 2b5e8f1..2406c70 100644 --- a/DiscoBot/Commands/LebenUndAstral.cs +++ b/DiscoBot/Commands/LebenUndAstral.cs @@ -9,10 +9,11 @@ using DiscoBot.DSA_Game.Characters; using Discord.Commands; + using DSALib.Characters; public class LE : ModuleBase { - [Command("LE"), Summary("Ändert aktuellen Lebenspunktestand")] + //[Command("LE"), Summary("Ändert aktuellen Lebenspunktestand")] [Alias("le", "leben", "LP", "lp", "Le", "Lp")] public async Task LEAsync([Summary("LE Modifier")] string prop = "", string s = "") @@ -40,7 +41,7 @@ public class AE : ModuleBase { - [Command("AE"), Summary("Ändert aktuellen Astralpunktestand")] + //[Command("AE"), Summary("Ändert aktuellen Astralpunktestand")] [Alias("ae", "astral", "ASP", "Asp", "asp", "Astral")] public async Task AEAsync([Summary("AE Modifier")] string prop = "", string s = "") diff --git a/DiscoBot/Commands/List.cs b/DiscoBot/Commands/List.cs index a251183..e77362e 100644 --- a/DiscoBot/Commands/List.cs +++ b/DiscoBot/Commands/List.cs @@ -15,7 +15,7 @@ public class List : ModuleBase { - [Command("list"), Summary("gibt eine Auflistung aus")] + //[Command("list"), Summary("gibt eine Auflistung aus")] public async Task ListAsync([Summary("Aktion")] string prop) { var res = new List<string>(); diff --git a/DiscoBot/Commands/NpcCommands.cs b/DiscoBot/Commands/NpcCommands.cs index 98f4589..b314494 100644 --- a/DiscoBot/Commands/NpcCommands.cs +++ b/DiscoBot/Commands/NpcCommands.cs @@ -13,7 +13,7 @@ public class NpcCommands : ModuleBase { - [Command("npc"), Summary("Erstellt ein NPC")] + //[Command("npc"), Summary("Erstellt ein NPC")] [Alias("Npc", "NPc", "NPC", "nPC")] public Task RandomAsync([Summary("Create Random")] string npcName, int mean = 9, int stDv = 1) { @@ -21,7 +21,7 @@ return this.ReplyAsync($"{npcName} wurde zufällig generiert"); } - [Command("npc"), Summary("Erstellt ein NPC")] + //[Command("npc"), Summary("Erstellt ein NPC")] [Alias("Npc", "NPc", "NPC", "nPC")] public Task CopyAsync([Summary("Create Copy")] string npcName, string source, int stDv = 1) { diff --git a/DiscoBot/Commands/ProbenTest.cs b/DiscoBot/Commands/ProbenTest.cs index 9614b7c..77a10ad 100644 --- a/DiscoBot/Commands/ProbenTest.cs +++ b/DiscoBot/Commands/ProbenTest.cs @@ -8,7 +8,7 @@ public class ProbenTest : ModuleBase { - [Command("t"), Summary("Würfelt ein Talent-/Zauberprobe")] + //[Command("t"), Summary("Würfelt ein Talent-/Zauberprobe")] [Alias("T", "Talent", "talent", "versuche")] public Task TalentAsync([Summary("Talent oder Zaubername")] string talent, int erschwernis = 0) { @@ -33,7 +33,7 @@ return this.ReplyAsync("```xl\n" + res + "\n```"); } - [Command("Zauber"), Summary("Würfelt ein Zauberprobe")] + //[Command("Zauber"), Summary("Würfelt ein Zauberprobe")] [Alias("Z", "zauber", "z")] public Task ZauberAsync([Summary("Zaubername")] string zauber, int erschwernis = 0) { @@ -58,7 +58,7 @@ return this.ReplyAsync("```xl\n" + res + "\n```"); } - [Command("e"), Summary("Würfelt eine Eigenschaftsprobe")] + //[Command("e"), Summary("Würfelt eine Eigenschaftsprobe")] [Alias("E", "Eigenschaft", "eigenschaft", "eigen")] public Task EigenschaftAsync([Summary("Eigenschaftskürzel und Erschwernis")] string talent, int erschwernis = 0) { @@ -67,21 +67,21 @@ return this.ReplyAsync("```xl\n" + res + "\n```"); } - [Command("a"), Summary("Würfelt ein Angriff")] + //[Command("a"), Summary("Würfelt ein Angriff")] [Alias("A", "At", "at", "Angriff", "angriff", "attackiere_mit", "attacke", "Attacke")] public Task AngriffAsync([Summary("Weapon")] string weapon, int erschwernis = 0) { return this.ReplyAsync("```xl\n" + Dsa.Chars.Find(x => x.Name.Equals(Dsa.Session.Relation[this.Context.User.Username])).Angriff(weapon, erschwernis) + "\n```"); } - [Command("p"), Summary("Würfelt eine Parade Probe")] + //[Command("p"), Summary("Würfelt eine Parade Probe")] [Alias("P", "Parade", "parade", "pariere_mit")] public Task ParadeAsync([Summary("Parade Weapon")] string talent, int erschwernis = 0) { return this.ReplyAsync("```xl\n" + Dsa.Chars.Find(x => x.Name.Equals(Dsa.Session.Relation[this.Context.User.Username])).Parade(talent, erschwernis) + "\n```"); } - [Command("f"), Summary("Führt eine Fernkampfprobe aus")] + //[Command("f"), Summary("Führt eine Fernkampfprobe aus")] [Alias("F", "fern", "Fern", "Schuss", "schuss", "fernkampf", "Fernkampf", "schieße", "schieße_mit")] public Task FernkampfAsync([Summary("Fernkampfwaffe")] string waffe, int erschwernis = 0) { diff --git a/DiscoBot/DSA_Game/Characters/Character.cs b/DiscoBot/DSA_Game/Characters/Character.cs index d14f28e..81c11fc 100644 --- a/DiscoBot/DSA_Game/Characters/Character.cs +++ b/DiscoBot/DSA_Game/Characters/Character.cs @@ -1,4 +1,7 @@ -namespace DiscoBot.DSA_Game.Characters +using DSALib; +using DSALib.Characters; + +namespace DiscoBot.DSA_Game.Characters { using System; using System.Collections.Generic; diff --git a/DiscoBot/DSA_Game/Characters/NPC.cs b/DiscoBot/DSA_Game/Characters/NPC.cs index c135e30..b1b8e82 100644 --- a/DiscoBot/DSA_Game/Characters/NPC.cs +++ b/DiscoBot/DSA_Game/Characters/NPC.cs @@ -4,6 +4,7 @@ using DiscoBot.Auxiliary; using DiscoBot.DSA_Game.Characters; + using DSALib.Characters; public class Npc : Being, ICharacter { diff --git a/DiscoBot/DSA_Game/Characters/SaveChar.cs b/DiscoBot/DSA_Game/Characters/SaveChar.cs index 4c9a940..272f516 100644 --- a/DiscoBot/DSA_Game/Characters/SaveChar.cs +++ b/DiscoBot/DSA_Game/Characters/SaveChar.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; namespace DiscoBot.DSA_Game.Characters { using Discord; + using DSALib.Characters; public class SaveChar { diff --git a/DiscoBot/DSA_Game/Dsa.cs b/DiscoBot/DSA_Game/Dsa.cs index 139ad91..fd60c9a 100644 --- a/DiscoBot/DSA_Game/Dsa.cs +++ b/DiscoBot/DSA_Game/Dsa.cs @@ -1,4 +1,7 @@ -namespace DiscoBot.DSA_Game +using DSALib; +using DSALib.Characters; + +namespace DiscoBot.DSA_Game { using System; using System.Collections.Generic; diff --git a/DiscoBot/DiscoBot.csproj b/DiscoBot/DiscoBot.csproj index 1f3a799..d25a5e9 100644 --- a/DiscoBot/DiscoBot.csproj +++ b/DiscoBot/DiscoBot.csproj @@ -113,13 +113,13 @@ <Compile Include="Commands\LebenUndAstral.cs" /> <Compile Include="Commands\HeldList.cs" /> <Compile Include="Audio\Soundeffects.cs" /> - <Compile Include="Auxiliary\Permissions.cs" /> + <Compile Include="ToRework\Permissions.cs" /> <Compile Include="Commands\MiscCommands.cs" /> <Compile Include="Auxiliary\SpellCorrect.cs" /> <Compile Include="DSA_Game\Save\Properties.cs" /> <Compile Include="DSA_Game\Save\SaveCommand.cs" /> <Compile Include="DSA_Game\Save\Session.cs" /> - <Compile Include="Auxiliary\CommandExtension.cs" /> + <Compile Include="ToRework\CommandExtension.cs" /> <Compile Include="Commands\CommandTypes.cs" /> <Compile Include="Commands\FileHandler.cs" /> <Compile Include="Commands\Gm.cs" /> @@ -148,7 +148,7 @@ </ItemGroup> <ItemGroup> <ProjectReference Include="..\DSALib\DSALib.csproj"> - <Project>{33281e45-1d5c-4645-8d2b-dd05b40fdfd5}</Project> + <Project>{388dd4ed-29c4-4127-ac8f-34dd3fe9f9b0}</Project> <Name>DSALib</Name> </ProjectReference> </ItemGroup> diff --git a/DiscoBot/Program.cs b/DiscoBot/Program.cs index 5bc0195..5dc69c1 100644 --- a/DiscoBot/Program.cs +++ b/DiscoBot/Program.cs @@ -1,4 +1,6 @@ using System; +using System.Linq; +using System.Net; using System.Reflection; using System.Threading.Tasks; @@ -34,9 +36,7 @@ namespace DiscoBot string token = File.ReadAllText("Token"); //Properties.Settings.Default.Token; - - this.services = new ServiceCollection().AddSingleton(new AudioService()) - .BuildServiceProvider(); + AppDomain.CurrentDomain.ProcessExit += OnProcessExit; await this.InstallCommandsAsync(); @@ -70,21 +70,60 @@ namespace DiscoBot // Determine if the message is a command, based on if it starts with '!' or a mention prefix if (!(message.HasCharPrefix('!', ref argPos) || message.HasMentionPrefix(this.client.CurrentUser, ref argPos))) { - return; + return; } + // Create a Command Context var context = new CommandContext(this.client, message); // Execute the command. (result does not indicate a return value, // rather an object stating if the command executed successfully) var result = await this.commands.ExecuteAsync(context, argPos, this.services); - if (!result.IsSuccess) + if (result.Error == CommandError.UnknownCommand) + { + await context.Channel.SendMessageAsync(SendCommand(message.Author.Username, message.Content, "https://localhost:44365/api/Commands")); + } + else if (!result.IsSuccess) { await context.Channel.SendMessageAsync(result.ErrorReason); } } + private 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); + + string content = string.Empty; + if (args.Length > 1) + { + content = "\"" + args.Skip(1).Aggregate((s, n) => ( s + "\", \"" + n)) + "\""; + } + + string 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"); diff --git a/DiscoBot/Auxiliary/Permissions.cs b/DiscoBot/Rework/Permissions.cs index 4d73146..4d73146 100644 --- a/DiscoBot/Auxiliary/Permissions.cs +++ b/DiscoBot/Rework/Permissions.cs diff --git a/DiscoBot/ToRework/CommandExtension.cs b/DiscoBot/ToRework/CommandExtension.cs new file mode 100644 index 0000000..098e35f --- /dev/null +++ b/DiscoBot/ToRework/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/DiscoBot/ToRework/Permissions.cs b/DiscoBot/ToRework/Permissions.cs new file mode 100644 index 0000000..4d73146 --- /dev/null +++ b/DiscoBot/ToRework/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/DiscoBot/session.json b/DiscoBot/session.json index d0c651d..03c46f3 100644 --- a/DiscoBot/session.json +++ b/DiscoBot/session.json @@ -6,15 +6,69 @@ "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, |