public static JObject ToJson(this SystemGuildSettings settings) { var o = new JObject(); o.Add("proxying_enabled", settings.ProxyEnabled); o.Add("tag", settings.Tag); o.Add("tag_enabled", settings.TagEnabled); return(o); }
public static JObject ToJson(this SystemGuildSettings settings, string?memberHid = null) { var o = new JObject(); o.Add("proxying_enabled", settings.ProxyEnabled); o.Add("autoproxy_mode", settings.AutoproxyMode.ToString().ToLower()); o.Add("autoproxy_member", memberHid); o.Add("tag", settings.Tag); o.Add("tag_enabled", settings.TagEnabled); return(o); }
private async Task <ProxyMatch> GetAutoproxyMatch(CachedAccount account, SystemGuildSettings guildSettings, IMessage message, IGuildChannel channel) { // For now we use a backslash as an "escape character", subject to change later if ((message.Content ?? "").TrimStart().StartsWith("\\")) { return(null); } PKMember member = null; // Figure out which member to proxy as switch (guildSettings.AutoproxyMode) { case AutoproxyMode.Off: // Autoproxy off, bail return(null); case AutoproxyMode.Front: // Front mode: just use the current first fronter member = await _data.GetFirstFronter(account.System); break; case AutoproxyMode.Latch: // Latch mode: find last proxied message, use *that* member var msg = await _data.GetLastMessageInGuild(message.Author.Id, channel.GuildId); if (msg == null) { return(null); // No message found } // If the message is older than 6 hours, ignore it and force the sender to "refresh" a proxy // This can be revised in the future, it's a preliminary value. var timestamp = SnowflakeUtils.FromSnowflake(msg.Message.Mid).ToInstant(); var timeSince = SystemClock.Instance.GetCurrentInstant() - timestamp; if (timeSince > Duration.FromHours(6)) { return(null); } member = msg.Member; break; case AutoproxyMode.Member: // Member mode: just use that member // O(n) lookup since n is small (max 1000 de jure) and we're more constrained by memory (for a dictionary) here member = account.Members.FirstOrDefault(m => m.Id == guildSettings.AutoproxyMember); break; } // If we haven't found the member (eg. front mode w/ no fronter), bail again if (member == null) { return(null); } return(new ProxyMatch { System = account.System, Member = member, // Autoproxying members with no proxy tags is possible, return the correct result ProxyTags = member.ProxyTags.Count > 0 ? member.ProxyTags.First() : (ProxyTag?)null, InnerText = message.Content }); }