示例#1
0
        void OnClanState(SteamFriends.ClanStateCallback callback)
        {
            string clanName = callback.ClanName;

            if (string.IsNullOrWhiteSpace(clanName))
            {
                clanName = Steam.Instance.Friends.GetClanName(callback.ClanID);
            }

            if (string.IsNullOrWhiteSpace(clanName) || clanName == "[unknown]")     // god this sucks. why on earth did i make steamkit follow steamclient to the letter
            {
                clanName = "Group";
            }

            foreach (var announcement in callback.Announcements)
            {
                string announceUrl = string.Format("http://steamcommunity.com/gid/{0}/announcements/detail/{1}", callback.ClanID.ConvertToUInt64(), announcement.ID.Value);
                IRC.Instance.SendToTag("steam-news", "{0} announcement: {1} - {2}", clanName, announcement.Headline, announceUrl);
            }

            foreach (var clanEvent in callback.Events)
            {
                if (!clanEvent.JustPosted)
                {
                    continue; // we're only interested in recent clan events
                }
                string eventUrl = string.Format("http://steamcommunity.com/gid/{0}/events/{1}", callback.ClanID.ConvertToUInt64(), clanEvent.ID.Value);
                IRC.Instance.SendToTag("steam-news", "{0} event: {1} - {2}", clanName, clanEvent.Headline, eventUrl);
            }
        }
示例#2
0
        private static void OnClanState(SteamFriends.ClanStateCallback callback)
        {
            if (callback.Events.Count == 0 && callback.Announcements.Count == 0)
            {
                return;
            }

            string groupName = callback.ClanName;
            string message;

            if (string.IsNullOrEmpty(groupName))
            {
                groupName = Steam.Instance.Friends.GetClanName(callback.ClanID);

                // Check once more, because that can fail too
                if (string.IsNullOrEmpty(groupName))
                {
                    groupName = "Group";
                }
            }

            foreach (var announcement in callback.Announcements)
            {
                message = string.Format(
                    "{0}{1}{2} announcement: {3}{4}{5} -{6} https://steamcommunity.com/gid/{7}/announcements/detail/{8}",
                    Colors.BLUE, groupName, Colors.NORMAL,
                    Colors.OLIVE, announcement.Headline, Colors.NORMAL,
                    Colors.DARKBLUE, callback.ClanID.ConvertToUInt64(), announcement.ID
                    );

                IRC.Instance.SendMain(message);

                Log.WriteInfo("Group Announcement", "{0} \"{1}\"", groupName, announcement.Headline);
            }

            foreach (var groupEvent in callback.Events)
            {
                if (!groupEvent.JustPosted)
                {
                    continue;
                }

                message = string.Format(
                    "{0}{1}{2} event: {3}{4}{5} -{6} https://steamcommunity.com/gid/{7}/events/{8} {9}({10})",
                    Colors.BLUE, groupName, Colors.NORMAL,
                    Colors.OLIVE, groupEvent.Headline, Colors.NORMAL,
                    Colors.DARKBLUE, callback.ClanID, groupEvent.ID,
                    Colors.DARKGRAY, groupEvent.EventTime
                    );

                IRC.Instance.SendMain(message);

                Log.WriteInfo("Group Announcement", "{0} Event \"{1}\"", groupName, groupEvent.Headline);
            }
        }
        private static async void OnClanState(SteamFriends.ClanStateCallback callback)
        {
            if (callback.Events.Count == 0 && callback.Announcements.Count == 0)
            {
                return;
            }

            var groupName = callback.ClanName;

            if (string.IsNullOrEmpty(groupName))
            {
                groupName = Steam.Instance.Friends.GetClanName(callback.ClanID);

                // Check once more, because that can fail too
                if (string.IsNullOrEmpty(groupName))
                {
                    groupName = "Group";
                }
            }

            foreach (var announcement in callback.Announcements)
            {
                var message = string.Format(
                    "{0}{1}{2} announcement: {3}{4}{5} -{6} https://steamcommunity.com/gid/{7}/announcements/detail/{8}",
                    Colors.BLUE, groupName, Colors.NORMAL,
                    Colors.OLIVE, announcement.Headline, Colors.NORMAL,
                    Colors.DARKBLUE, callback.ClanID.AccountID, announcement.ID
                    );

                IRC.Instance.SendMain(message);

                Log.WriteInfo("Group Announcement", "{0} \"{1}\"", groupName, announcement.Headline);
            }

            await using var db = await Database.GetConnectionAsync();

            foreach (var groupEvent in callback.Events)
            {
                var link = $"https://steamcommunity.com/gid/{callback.ClanID.AccountID}/events/{groupEvent.ID}";
                var id   = await db.ExecuteScalarAsync <int>("SELECT `ID` FROM `RSS` WHERE `Link` = @Link", new { Link = link });

                if (id > 0)
                {
                    continue;
                }

                IRC.Instance.SendMain(
                    $"{Colors.BLUE}{groupName}{Colors.NORMAL} event: {Colors.OLIVE}{groupEvent.Headline}{Colors.NORMAL} -{Colors.DARKBLUE} {link} {Colors.DARKGRAY}({groupEvent.EventTime.ToString("s", CultureInfo.InvariantCulture).Replace("T", " ")})"
                    );

                Log.WriteInfo("Group Announcement", $"{groupName} Event \"{groupEvent.Headline}\" {link}");

                await db.ExecuteAsync("INSERT INTO `RSS` (`Link`, `Title`) VALUES(@Link, @Title)", new { Link = link, Title = groupEvent.Headline });
            }
        }
示例#4
0
        public void OnClanState(SteamFriends.ClanStateCallback cb)
        {
            foreach (var e in cb.Events)
            {
                Core.Util.Buffer b = new Core.Util.Buffer();
                b.SetAlignment(4);

                b.WriteULong(e.ID);
                b.WriteULong(cb.ClanID);
                // TODO: pad to 256 characters
                b.WriteString(e.Headline);
                b.WriteUInt(Platform.ToUnixTime(e.EventTime));
                b.WriteULong(e.GameID);

                Instance.PostCallback(Common.CallbackId(Common.CallbackType.ClientFriends, 2), b);
            }

            // TODO: do something with announcements

            var clan = ClanGroup.Active.FindOrCreate(cb.ClanID);

            var name_changed     = clan.Name != cb.ClanName;
            var avatar_changed   = clan.AvatarHash != cb.AvatarHash;
            var acc_info_changed = clan.AccountFlags != cb.AccountFlags;

            // Might be completely unnecessary
            if (name_changed || avatar_changed || acc_info_changed)
            {
                Core.Util.Buffer b = new Core.Util.Buffer();
                b.SetAlignment(4);

                b.WriteULong(cb.ClanID);
                b.WriteBool(name_changed);
                b.WriteBool(avatar_changed);
                b.WriteBool(acc_info_changed);
                Instance.PostCallback(Common.CallbackId(Common.CallbackType.ClientFriends, 19), b);
            }

            // Set all the new info that we have
            clan.Name         = cb.ClanName;
            clan.AccountFlags = cb.AccountFlags;
            clan.AvatarHash   = cb.AvatarHash;

            clan.ChatRoomPrivate = cb.ChatRoomPrivate;

            clan.MemberChattingCount = cb.MemberChattingCount;
            clan.MemberInGameCount   = cb.MemberInGameCount;
            clan.MemberOnlineCount   = cb.MemberOnlineCount;
            clan.MemberTotal         = cb.MemberTotalCount;

            Log.WriteLine("OnClanState for {0} <{1}>", clan.Id, clan.Name);
        }
示例#5
0
        public static void OnClanState(SteamFriends.ClanStateCallback callback)
        {
            if (callback.Announcements.Count == 0)
            {
                return;
            }

            var groupName = callback.ClanName;

            if (string.IsNullOrEmpty(groupName))
            {
                groupName = Friends.GetClanName(callback.ClanID);
            }

            foreach (var announcement in callback.Announcements)
            {
                var message = announcement.Headline.Trim();

                if (!string.IsNullOrEmpty(groupName) && !announcement.Headline.Contains(groupName.Replace("Steam", string.Empty).Trim()))
                {
                    message = $"{announcement.Headline} ({groupName})";
                }

                // 240 max tweet length, minus 23 characters for the t.co link
                if (message.Length > 217)
                {
                    message = $"{message.Substring(0, 216)}…";
                }

                var url = $"https://steamcommunity.com/gid/{callback.ClanID.ConvertToUInt64()}/announcements/detail/{announcement.ID}";

                for (var i = 0; i < 2; i++)
                {
                    try
                    {
                        Log($"Tweeting \"{message}\" - {url}");

                        Twitter.UpdateStatus($"{message} {url}");

                        break;
                    }
                    catch (Exception e)
                    {
                        Log($"Exception: {e.Message}");
                    }
                }
            }
        }
        public static void OnClanState(SteamFriends.ClanStateCallback callback)
        {
            if (callback.Announcements.Count == 0)
            {
                return;
            }

            var groupName = callback.ClanName;

            if (string.IsNullOrEmpty(groupName))
            {
                groupName = Friends.GetClanName(callback.ClanID);
            }

            foreach (var announcement in callback.Announcements)
            {
                var message = announcement.Headline.Trim();

                if (!string.IsNullOrEmpty(groupName) && !announcement.Headline.Contains(groupName.Replace("Steam", string.Empty).Trim()))
                {
                    message = string.Format("{0}:\n{1}", groupName, announcement.Headline);
                }

                // 117 is a magical tweet length number
                if (message.Length > 117)
                {
                    message = string.Format("{0}…", message.Substring(0, 116));
                }

                var url = $"http://steamcommunity.com/gid/{callback.ClanID.ConvertToUInt64()}/announcements/detail/{announcement.ID}";

                for (var i = 0; i < 2; i++)
                {
                    try
                    {
                        Log("Tweeting \"{0}\" - {1}", message, url);

                        Twitter.UpdateStatus(string.Format("{0} {1}", message, url));

                        break;
                    }
                    catch (Exception e)
                    {
                        Log("Exception: {0}", e.Message);
                    }
                }
            }
        }
示例#7
0
        public static void OnClanState(SteamFriends.ClanStateCallback callback)
        {
            string clanName = callback.ClanName;

            if (string.IsNullOrWhiteSpace(clanName))
            {
                clanName = Program.Instance.connection.Friends.GetClanName(callback.ClanID);
            }

            if (string.IsNullOrWhiteSpace(clanName) || clanName == "[unknown]")             // god this sucks. why on earth did i make steamkit follow steamclient to the letter
            {
                clanName = "Group";
            }

            foreach (var announcement in callback.Announcements)
            {
                string announceUrl = string.Format("http://steamcommunity.com/gid/{0}/announcements/detail/{1}", callback.ClanID.ConvertToUInt64(), announcement.ID.Value);

                string message = string.Format("steam-news", "{0} announcement: {1} - {2}", clanName, announcement.Headline, announceUrl);
                Program.Instance.Log(new LogMessage(LogSeverity.Info, "Announcment", message));
                Helpers.SendMessageAllToGenerals(message);
            }

            foreach (var clanEvent in callback.Events)
            {
                if (!clanEvent.JustPosted)
                {
                    continue;                     // we're only interested in recent clan events
                }
                string eventUrl = string.Format("http://steamcommunity.com/gid/{0}/events/{1}", callback.ClanID.ConvertToUInt64(), clanEvent.ID.Value);

                string message = string.Format("steam-news", "{0} event: {1} - {2}", clanName, clanEvent.Headline, eventUrl);
                Program.Instance.Log(new LogMessage(LogSeverity.Info, "Event", message));
                Helpers.SendMessageAllToGenerals(message);
            }
        }
示例#8
0
        private static async void OnClanState(SteamFriends.ClanStateCallback callback)
        {
            if (callback.Events.Count == 0 && callback.Announcements.Count == 0)
            {
                return;
            }

            var groupName   = callback.ClanName ?? Steam.Instance.Friends.GetClanName(callback.ClanID);
            var groupAvatar = Utils.ByteArrayToString(callback.AvatarHash ?? Steam.Instance.Friends.GetClanAvatar(callback.ClanID) ?? System.Array.Empty <byte>()).ToLowerInvariant();

            if (string.IsNullOrEmpty(groupName))
            {
                groupName = "Group";
            }

            foreach (var announcement in callback.Announcements)
            {
                var url = $"https://steamcommunity.com/gid/{callback.ClanID.AccountID}/announcements/detail/{announcement.ID}";

                IRC.Instance.SendAnnounce($"{Colors.BLUE}{groupName}{Colors.NORMAL} announcement: {Colors.OLIVE}{announcement.Headline}{Colors.NORMAL} -{Colors.DARKBLUE} {url}");

                _ = TaskManager.Run(async() => await Utils.SendWebhook(new
                {
                    Type    = "GroupAnnouncement",
                    Title   = announcement.Headline,
                    Group   = groupName,
                    Avatar  = groupAvatar,
                    Url     = url,
                    GroupID = callback.ClanID.AccountID,
                }));

                Log.WriteInfo(nameof(ClanState), $"{groupName} \"{announcement.Headline}\"");
            }

            await using var db = await Database.GetConnectionAsync();

            foreach (var groupEvent in callback.Events)
            {
                var link = $"https://steamcommunity.com/gid/{callback.ClanID.AccountID}/events/{groupEvent.ID}";
                var id   = await db.ExecuteScalarAsync <int>("SELECT `ID` FROM `RSS` WHERE `Link` = @Link", new { Link = link });

                if (id > 0)
                {
                    continue;
                }

                IRC.Instance.SendAnnounce(
                    $"{Colors.BLUE}{groupName}{Colors.NORMAL} event: {Colors.OLIVE}{groupEvent.Headline}{Colors.NORMAL} -{Colors.DARKBLUE} {link} {Colors.DARKGRAY}({groupEvent.EventTime.ToString("s", CultureInfo.InvariantCulture).Replace("T", " ")})"
                    );

                Log.WriteInfo(nameof(ClanState), $"{groupName} Event \"{groupEvent.Headline}\" {link}");

                await db.ExecuteAsync("INSERT INTO `RSS` (`Link`, `Title`, `Date`) VALUES(@Link, @Title, @EventTime)", new
                {
                    Link  = link,
                    Title = groupEvent.Headline,
                    groupEvent.EventTime,
                });

                _ = TaskManager.Run(async() => await Utils.SendWebhook(new
                {
                    Type    = "GroupAnnouncement",
                    Title   = groupEvent.Headline,
                    Group   = groupName,
                    Avatar  = groupAvatar,
                    Url     = link,
                    GroupID = callback.ClanID.AccountID,
                }));
            }
        }
示例#9
0
        public void OnClanState(SteamFriends.ClanStateCallback callback)
        {
            if (callback.Events.Count == 0 && callback.Announcements.Count == 0)
            {
                return;
            }

            string groupName = callback.ClanName;
            string message;

            if (string.IsNullOrEmpty(groupName))
            {
                groupName = Steam.Instance.Friends.GetClanName(callback.ClanID);

                // Check once more, because that can fail too
                if (string.IsNullOrEmpty(groupName))
                {
                    groupName = "Group";

                    Log.WriteError("IRC Proxy", "ClanID: {0} - no group name", callback.ClanID);
                }
            }

            foreach (var announcement in callback.Announcements)
            {
                message = string.Format("{0}{1}{2} announcement: {3}{4}{5} -{6} http://steamcommunity.com/gid/{7}/announcements/detail/{8}",
                                        Colors.OLIVE, groupName, Colors.NORMAL,
                                        Colors.GREEN, announcement.Headline, Colors.NORMAL,
                                        Colors.DARK_BLUE, callback.ClanID, announcement.ID
                                        );

                IRC.SendMain(message);

                // Additionally send announcements to steamlug channel
                if (callback.ClanID.Equals(SteamLUG))
                {
                    IRC.SendSteamLUG(message);
                }

                Log.WriteInfo("Group Announcement", "{0} \"{1}\"", groupName, announcement.Headline);
            }

            foreach (var groupEvent in callback.Events)
            {
                if (groupEvent.JustPosted)
                {
                    message = string.Format("{0}{1}{2} event: {3}{4}{5} -{6} http://steamcommunity.com/gid/{7}/events/{8} {9}({10})",
                                            Colors.OLIVE, groupName, Colors.NORMAL,
                                            Colors.GREEN, groupEvent.Headline, Colors.NORMAL,
                                            Colors.DARK_BLUE, callback.ClanID, groupEvent.ID,
                                            Colors.DARK_GRAY, groupEvent.EventTime.ToString()
                                            );

                    // Send events only to steamlug channel
                    if (callback.ClanID.Equals(SteamLUG))
                    {
                        IRC.SendSteamLUG(message);
                    }
                    else
                    {
                        IRC.SendMain(message);
                    }

                    Log.WriteInfo("Group Announcement", "{0} Event \"{1}\"", groupName, groupEvent.Headline);
                }
            }
        }