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); } }
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 }); } }
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); }
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); } } } }
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); } }
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, })); } }
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); } } }