Created
December 3, 2017 17:40
-
-
Save HurricanKai/db8743dc5d8c1e975736d07ef6f6bd1e to your computer and use it in GitHub Desktop.
ForSharing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using BaseBot.JSON; | |
using DSharpPlus; | |
using DSharpPlus.CommandsNext; | |
using DSharpPlus.CommandsNext.Attributes; | |
using DSharpPlus.Entities; | |
using DSharpPlus.Interactivity; | |
using System; | |
using System.Collections.Generic; | |
using System.IO; | |
using System.Linq; | |
using System.Text; | |
using System.Threading.Tasks; | |
namespace BaseBot.Commands | |
{ | |
//TODO: Full Rewrite of Poll System | |
[Group("Avatar"), Aliases("avatar", "a")] | |
public class PlayerManager | |
{ | |
public static TimeSpan pollTime = TimeSpan.FromSeconds(1); | |
public static List<Poll> polls = new List<Poll>(); | |
public static Dictionary<DiscordUser, DiscordEmoji> avatars = new Dictionary<DiscordUser, DiscordEmoji>(); | |
[Command("set"), RequireRolesAttribute(RoleCheckMode.All, "Game Master")] | |
public async Task SetAvatar(CommandContext ctx, DiscordUser user, DiscordEmoji emoji) | |
{ | |
if (avatars.ContainsKey(user)) | |
{ | |
avatars.Remove(user); | |
} | |
avatars.Add(user, emoji); | |
await ctx.RespondAsync($"{user.Mention} is {emoji.GetDiscordName()} now"); | |
} | |
[Command("listp"), Aliases("ListP", "ListParticipants", "emojilist"), RequireRolesAttribute(RoleCheckMode.All, "Game Master")] | |
public async Task ListParticipant(CommandContext ctx) | |
{ | |
string s = ""; | |
string n = System.Environment.NewLine; | |
foreach (var v in avatars) | |
{ | |
if (s.Count() > 19000) | |
{ | |
s = ""; | |
await ctx.Channel.SendMessageAsync(s); | |
} | |
s += $"{v.Value.GetDiscordName()} - {v.Key.Mention}{n}"; | |
} | |
await ctx.Channel.SendMessageAsync(s); | |
} | |
[Command("votepoll"), Aliases("Votepoll"), RequireRolesAttribute(RoleCheckMode.All, "Game Master")] | |
public async Task VotePoll(CommandContext ctx) | |
{ | |
string s = ""; | |
string n = System.Environment.NewLine; | |
List<DiscordEmoji> sendEmojis = new List<DiscordEmoji>(); | |
List<DiscordMessage> msgs = new List<DiscordMessage>(); | |
foreach (var v in avatars) | |
{ | |
if (s.Count() > 19000 || sendEmojis.Count == 20) | |
{ | |
s = ""; | |
var msg = await ctx.Channel.SendMessageAsync(s); | |
foreach (var v2 in sendEmojis) | |
await msg.CreateReactionAsync(v2); | |
msgs.Add(msg); | |
sendEmojis.Clear(); | |
} | |
sendEmojis.Add(v.Value); | |
s += $"{v.Value.GetDiscordName()} - {v.Key.Mention}{n}"; | |
} | |
var msg2 = await ctx.Channel.SendMessageAsync(s); | |
foreach (var v2 in sendEmojis) | |
await msg2.CreateReactionAsync(v2); | |
msgs.Add(msg2); | |
var p = new Poll() { channelid = (ulong)ctx.Channel.Id, Creation = DateTime.UtcNow.ToString(), Ids = new List<Id>() }; | |
foreach (var v in msgs) | |
p.Ids.Add(new Id() { PurpleId = (ulong)v.Id }); | |
polls.Add(p); | |
} | |
public const string File = "./Avatars.json"; | |
public const string File2 = "./Polls.json"; | |
[Command("Save"), RequireRolesAttribute(RoleCheckMode.All, "Game Master")] | |
public async Task Save(CommandContext ctx) | |
{ | |
await ctx.RespondAsync("Saving..."); | |
SaveS(); | |
await ctx.RespondAsync("Saved."); | |
} | |
public static void SaveS() | |
{ | |
string file = Path.GetFullPath(File); | |
var m = new AvatarManagerJSON(); | |
m.Avatars = new List<Avatar>(); | |
foreach (var v in avatars) | |
m.Avatars.Add(new Avatar() { Id = (long)v.Key.Id, PurpleAvatar = v.Value.GetDiscordName() }); | |
var p = new PollJSON() | |
{ | |
Polls = polls | |
}; | |
System.IO.File.WriteAllText(Path.GetFullPath(File2), p.ToJson()); | |
System.IO.File.WriteAllText(file, m.ToJson()); | |
} | |
[Command("Load"), RequireRolesAttribute(RoleCheckMode.All, "Game Master")] | |
public async Task Load(CommandContext ctx) | |
{ | |
await ctx.RespondAsync("Loading..."); | |
await LoadS(ctx); | |
await ctx.RespondAsync("Loaded."); | |
} | |
[Command("CheckPolls"), Aliases("cp"), RequireRolesAttribute(RoleCheckMode.All, "Game Master")] | |
public async Task CheckPollsCMD(CommandContext ctx) | |
{ | |
await CheckPolls(ctx); | |
} | |
public static async Task CheckPolls(CommandContext ctx) | |
{ | |
foreach (var v in polls) | |
{ | |
//TODO: Only Registered Avatars can vote. | |
if (DateTime.Parse(v.Creation) - DateTime.UtcNow <= pollTime) | |
{ | |
Dictionary<DiscordUser, int> votes = new Dictionary<DiscordUser, int>(); | |
Dictionary<DiscordUser, List<DiscordUser>> voters = new Dictionary<DiscordUser, List<DiscordUser>>(); | |
var channel = ctx.Guild.GetChannel((ulong)v.channelid); | |
//Get Resulsts, and Post in First Message. | |
foreach (var v2 in v.Ids) | |
{ | |
var message = await channel.GetMessageAsync((ulong)v2.PurpleId); | |
foreach (var v3 in avatars) | |
{ | |
var reactors = await message.GetReactionsAsync(v3.Value); | |
if (votes.TryGetValue(v3.Key, out int Value)) | |
{ | |
votes.Remove(v3.Key); | |
votes.Add(v3.Key, Value + reactors.Count); | |
} | |
else | |
votes.Add(v3.Key, reactors.Count); | |
if (voters.TryGetValue(v3.Key, out List<DiscordUser> value)) | |
{ | |
voters.Remove(v3.Key); | |
value.AddRange(reactors); | |
voters.Add(v3.Key, value); | |
} | |
else | |
voters.Add(v3.Key, reactors.ToList()); | |
} | |
} | |
string n = Environment.NewLine; | |
string s = "Votes: {n}"; | |
foreach (var user in avatars) | |
{ | |
if (voters.TryGetValue(user.Key, out List<DiscordUser> vots)) | |
{ | |
s += $"{user.Key.Mention}({user.Value.GetDiscordName()}) - {vots.Count}:{n}"; | |
foreach (var v4 in vots) | |
s += $" - {v4.Mention}{n}"; | |
} | |
if (s.Count() > 19000) | |
{ | |
await ctx.RespondAsync(s); | |
s = ""; | |
} | |
} | |
await ctx.RespondAsync(s); | |
} | |
} | |
} | |
public static async Task LoadS(CommandContext ctx) | |
{ | |
string file = Path.GetFullPath(File); | |
var m = AvatarManagerJSON.FromJson(System.IO.File.ReadAllText(file)); | |
avatars = new Dictionary<DiscordUser, DiscordEmoji>(); | |
foreach (var v in m.Avatars) | |
{ | |
var member = await ctx.Guild.GetMemberAsync((ulong)v.Id); | |
avatars.Add(member, DiscordEmoji.FromName(ctx.Client, v.PurpleAvatar)); | |
} | |
file = Path.GetFullPath(File2); | |
var p = PollJSON.FromJson(System.IO.File.ReadAllText(file)); | |
polls = p.Polls; | |
} | |
public static DiscordUser GetUser(string emoji) | |
{ | |
foreach (var v in avatars) | |
{ | |
if (v.Value.GetDiscordName() == emoji) | |
{ | |
return v.Key; | |
} | |
} | |
return null; | |
} | |
public static DiscordEmoji GetAvatar(DiscordUser user) | |
{ | |
if (avatars.TryGetValue(user, out DiscordEmoji value)) | |
{ | |
return value; | |
} | |
return null; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment