Пример #1
0
    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);
    }
Пример #2
0
    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);
    }
Пример #3
0
        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
            });
        }