diff --git a/_discord_provider_8cs_source.html b/_discord_provider_8cs_source.html index f6f42aaca5..7671cac77c 100644 --- a/_discord_provider_8cs_source.html +++ b/_discord_provider_8cs_source.html @@ -669,7 +669,7 @@ $(function() {
662 if (!discordChannelResponse.IsSuccess)
663 {
664 Logger.LogWarning(
-
665 "Error retrieving discord channel {0}: {1} Inner: {2}",
+
665 "Error retrieving discord channel {channelId}: {error} Inner: {innerError}",
666 channelId,
667 discordChannelResponse.Error.Message,
668 discordChannelResponse.Inner?.Error?.Message);
@@ -680,239 +680,241 @@ $(function() {
673 var channelType = discordChannelResponse.Entity.Type;
674 if (channelType != ChannelType.GuildText && channelType != ChannelType.GuildAnnouncement)
675 {
-
676 Logger.LogWarning("Cound not map channel {0}! Incorrect type: {1}", channelId, discordChannelResponse.Entity.Type);
+
676 Logger.LogWarning("Cound not map channel {channelId}! Incorrect type: {channelType}", channelId, discordChannelResponse.Entity.Type);
677 return null;
678 }
679
680 friendlyName = discordChannelResponse.Entity.Name.Value;
-
681
-
682 var guildsClient = serviceProvider.GetRequiredService<IDiscordRestGuildAPI>();
-
683 var guildsResponse = await guildsClient.GetGuildAsync(
-
684 discordChannelResponse.Entity.GuildID.Value,
-
685 false,
-
686 cancellationToken);
-
687 if (!guildsResponse.IsSuccess)
-
688 {
-
689 Logger.LogWarning(
-
690 "Error retrieving discord guild {0}: {1}",
-
691 discordChannelResponse.Entity.GuildID.Value,
-
692 discordChannelResponse.Error.Message);
-
693 remapRequired = true;
-
694 return null;
-
695 }
-
696
-
697 connectionName = guildsResponse.Entity.Name;
-
698 }
-
699
-
700 var channelModel = new ChannelRepresentation
-
701 {
-
702 RealId = channelId,
-
703 IsAdminChannel = channelFromDB.IsAdminChannel == true,
-
704 ConnectionName = connectionName,
-
705 FriendlyName = friendlyName,
-
706 IsPrivateChannel = false,
-
707 Tag = channelFromDB.Tag,
-
708 EmbedsSupported = true,
-
709 };
-
710
-
711 Logger.LogTrace("Mapped channel {0}: {1}", channelModel.RealId, channelModel.FriendlyName);
-
712 return Tuple.Create(channelFromDB, channelModel);
-
713 }
-
714
-
715 var tasks = channels
-
716 .Select(x => GetModelChannelFromDBChannel(x))
-
717 .ToList();
-
718
-
719 await Task.WhenAll(tasks);
+
681 var guildId = discordChannelResponse.Entity.GuildID.Value;
+
682
+
683 var guildsClient = serviceProvider.GetRequiredService<IDiscordRestGuildAPI>();
+
684 var guildsResponse = await guildsClient.GetGuildAsync(
+
685 guildId,
+
686 false,
+
687 cancellationToken);
+
688 if (!guildsResponse.IsSuccess)
+
689 {
+
690 Logger.LogWarning(
+
691 "Error retrieving discord guild {guildID}: {error} Inner: {innerError}",
+
692 guildId,
+
693 guildsResponse.Error.Message,
+
694 guildsResponse.Inner?.Error?.Message);
+
695 remapRequired = true;
+
696 return null;
+
697 }
+
698
+
699 connectionName = guildsResponse.Entity.Name;
+
700 }
+
701
+
702 var channelModel = new ChannelRepresentation
+
703 {
+
704 RealId = channelId,
+
705 IsAdminChannel = channelFromDB.IsAdminChannel == true,
+
706 ConnectionName = connectionName,
+
707 FriendlyName = friendlyName,
+
708 IsPrivateChannel = false,
+
709 Tag = channelFromDB.Tag,
+
710 EmbedsSupported = true,
+
711 };
+
712
+
713 Logger.LogTrace("Mapped channel {0}: {1}", channelModel.RealId, channelModel.FriendlyName);
+
714 return Tuple.Create(channelFromDB, channelModel);
+
715 }
+
716
+
717 var tasks = channels
+
718 .Select(x => GetModelChannelFromDBChannel(x))
+
719 .ToList();
720
-
721 var enumerator = tasks
-
722 .Select(x => x.Result)
-
723 .Where(x => x != null)
-
724 .ToList();
-
725
-
726 lock (mappedChannels)
-
727 {
-
728 mappedChannels.Clear();
-
729 mappedChannels.AddRange(enumerator.Select(x => x.Item2.RealId));
-
730 }
-
731
-
732 if (remapRequired)
-
733 EnqueueMessage(null);
-
734
-
735 return enumerator;
-
736 }
-
737
-
743 #pragma warning disable CA1502
-
744 private Optional<IReadOnlyList<IEmbed>> ConvertEmbed(ChatEmbed embed)
-
745 {
-
746 if (embed == null)
-
747 return default;
-
748
-
749 List<string> embedErrors = new List<string>();
-
750 Optional<Color> colour = default;
-
751 if (embed.Colour != null)
-
752 if (Int32.TryParse(embed.Colour.Substring(1), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var argb))
-
753 colour = Color.FromArgb(argb);
-
754 else
-
755 embedErrors.Add(
-
756 String.Format(
-
757 CultureInfo.InvariantCulture,
-
758 "Invalid embed colour: {0}",
-
759 embed.Colour));
-
760
-
761 if (embed.Author != null && String.IsNullOrWhiteSpace(embed.Author.Name))
-
762 {
-
763 embedErrors.Add("Null or whitespace embed author name!");
-
764 embed.Author = null;
-
765 }
-
766
-
767 List<IEmbedField> fields = null;
-
768 if (embed.Fields != null)
-
769 {
-
770 fields = new List<IEmbedField>();
-
771 var i = -1;
-
772 foreach (var field in embed.Fields)
-
773 {
-
774 ++i;
-
775 var invalid = false;
-
776 if (String.IsNullOrWhiteSpace(field.Name))
-
777 {
-
778 embedErrors.Add(
-
779 String.Format(
-
780 CultureInfo.InvariantCulture,
-
781 "Null or whitespace field author at index {0}!",
-
782 i));
-
783 invalid = true;
-
784 }
-
785
-
786 if (String.IsNullOrWhiteSpace(field.Value))
-
787 {
-
788 embedErrors.Add(
-
789 String.Format(
-
790 CultureInfo.InvariantCulture,
-
791 "Null or whitespace field author at index {0}!",
-
792 i));
-
793 invalid = true;
-
794 }
-
795
-
796 if (invalid)
-
797 continue;
-
798
-
799 fields.Add(new EmbedField(field.Name, field.Value)
-
800 {
-
801 IsInline = field.IsInline ?? default(Optional<bool>),
-
802 });
-
803 }
-
804 }
-
805
-
806 if (embed.Footer != null && String.IsNullOrWhiteSpace(embed.Footer.Text))
-
807 {
-
808 embedErrors.Add("Null or whitespace embed footer text!");
-
809 embed.Footer = null;
-
810 }
-
811
-
812 if (embed.Image != null && String.IsNullOrWhiteSpace(embed.Image.Url))
-
813 {
-
814 embedErrors.Add("Null or whitespace embed image url!");
-
815 embed.Image = null;
-
816 }
-
817
-
818 if (embed.Thumbnail != null && String.IsNullOrWhiteSpace(embed.Thumbnail.Url))
-
819 {
-
820 embedErrors.Add("Null or whitespace embed thumbnail url!");
-
821 embed.Thumbnail = null;
-
822 }
-
823
-
824 Optional<DateTimeOffset> timestampOptional = default;
-
825 if (embed.Timestamp != null)
-
826 if (DateTimeOffset.TryParse(embed.Timestamp, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var timestamp))
-
827 timestampOptional = timestamp.ToUniversalTime();
-
828 else
-
829 embedErrors.Add(
-
830 String.Format(
-
831 CultureInfo.InvariantCulture,
-
832 "Invalid embed timestamp: {0}",
-
833 embed.Timestamp));
-
834
-
835 var discordEmbed = new Embed
-
836 {
-
837 Author = embed.Author != null
-
838 ? new EmbedAuthor(embed.Author.Name)
-
839 {
-
840 IconUrl = embed.Author.IconUrl ?? default(Optional<string>),
-
841 ProxyIconUrl = embed.Author.ProxyIconUrl ?? default(Optional<string>),
-
842 Url = embed.Author.Url ?? default(Optional<string>),
-
843 }
-
844 : default(Optional<IEmbedAuthor>),
-
845 Colour = colour,
-
846 Description = embed.Description ?? default(Optional<string>),
-
847 Fields = fields ?? default(Optional<IReadOnlyList<IEmbedField>>),
-
848 Footer = embed.Footer != null
-
849 ? new EmbedFooter(embed.Footer.Text)
-
850 {
-
851 IconUrl = embed.Footer.IconUrl ?? default(Optional<string>),
-
852 ProxyIconUrl = embed.Footer.ProxyIconUrl ?? default(Optional<string>),
-
853 }
-
854 : default,
-
855 Image = embed.Image != null
-
856 ? new EmbedImage(embed.Image.Url)
-
857 {
-
858 Width = embed.Image.Width ?? default(Optional<int>),
-
859 Height = embed.Image.Height ?? default(Optional<int>),
-
860 ProxyUrl = embed.Image.ProxyUrl ?? default(Optional<string>),
-
861 }
-
862 : default(Optional<IEmbedImage>),
-
863 Provider = embed.Provider != null
-
864 ? new EmbedProvider
-
865 {
-
866 Name = embed.Provider.Name ?? default(Optional<string>),
-
867 Url = embed.Provider.Url ?? default(Optional<string>),
-
868 }
-
869 : default(Optional<IEmbedProvider>),
-
870 Thumbnail = embed.Thumbnail != null
-
871 ? new EmbedThumbnail(embed.Thumbnail.Url)
-
872 {
-
873 Width = embed.Thumbnail.Width ?? default(Optional<int>),
-
874 Height = embed.Thumbnail.Height ?? default(Optional<int>),
-
875 ProxyUrl = embed.Thumbnail.ProxyUrl ?? default(Optional<string>),
-
876 }
-
877 : default(Optional<IEmbedThumbnail>),
-
878 Timestamp = timestampOptional,
-
879 Title = embed.Title ?? default(Optional<string>),
-
880 Url = embed.Url ?? default(Optional<string>),
-
881 Video = embed.Video != null
-
882 ? new EmbedVideo
-
883 {
-
884 Url = embed.Video.Url ?? default(Optional<string>),
-
885 Width = embed.Video.Width ?? default(Optional<int>),
-
886 Height = embed.Video.Height ?? default(Optional<int>),
-
887 ProxyUrl = embed.Video.ProxyUrl ?? default(Optional<string>),
-
888 }
-
889 : default(Optional<IEmbedVideo>),
-
890 };
-
891
-
892 var result = new List<IEmbed> { discordEmbed };
+
721 await Task.WhenAll(tasks);
+
722
+
723 var enumerator = tasks
+
724 .Select(x => x.Result)
+
725 .Where(x => x != null)
+
726 .ToList();
+
727
+
728 lock (mappedChannels)
+
729 {
+
730 mappedChannels.Clear();
+
731 mappedChannels.AddRange(enumerator.Select(x => x.Item2.RealId));
+
732 }
+
733
+
734 if (remapRequired)
+
735 EnqueueMessage(null);
+
736
+
737 return enumerator;
+
738 }
+
739
+
745 #pragma warning disable CA1502
+
746 private Optional<IReadOnlyList<IEmbed>> ConvertEmbed(ChatEmbed embed)
+
747 {
+
748 if (embed == null)
+
749 return default;
+
750
+
751 List<string> embedErrors = new List<string>();
+
752 Optional<Color> colour = default;
+
753 if (embed.Colour != null)
+
754 if (Int32.TryParse(embed.Colour.Substring(1), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var argb))
+
755 colour = Color.FromArgb(argb);
+
756 else
+
757 embedErrors.Add(
+
758 String.Format(
+
759 CultureInfo.InvariantCulture,
+
760 "Invalid embed colour: {0}",
+
761 embed.Colour));
+
762
+
763 if (embed.Author != null && String.IsNullOrWhiteSpace(embed.Author.Name))
+
764 {
+
765 embedErrors.Add("Null or whitespace embed author name!");
+
766 embed.Author = null;
+
767 }
+
768
+
769 List<IEmbedField> fields = null;
+
770 if (embed.Fields != null)
+
771 {
+
772 fields = new List<IEmbedField>();
+
773 var i = -1;
+
774 foreach (var field in embed.Fields)
+
775 {
+
776 ++i;
+
777 var invalid = false;
+
778 if (String.IsNullOrWhiteSpace(field.Name))
+
779 {
+
780 embedErrors.Add(
+
781 String.Format(
+
782 CultureInfo.InvariantCulture,
+
783 "Null or whitespace field author at index {0}!",
+
784 i));
+
785 invalid = true;
+
786 }
+
787
+
788 if (String.IsNullOrWhiteSpace(field.Value))
+
789 {
+
790 embedErrors.Add(
+
791 String.Format(
+
792 CultureInfo.InvariantCulture,
+
793 "Null or whitespace field author at index {0}!",
+
794 i));
+
795 invalid = true;
+
796 }
+
797
+
798 if (invalid)
+
799 continue;
+
800
+
801 fields.Add(new EmbedField(field.Name, field.Value)
+
802 {
+
803 IsInline = field.IsInline ?? default(Optional<bool>),
+
804 });
+
805 }
+
806 }
+
807
+
808 if (embed.Footer != null && String.IsNullOrWhiteSpace(embed.Footer.Text))
+
809 {
+
810 embedErrors.Add("Null or whitespace embed footer text!");
+
811 embed.Footer = null;
+
812 }
+
813
+
814 if (embed.Image != null && String.IsNullOrWhiteSpace(embed.Image.Url))
+
815 {
+
816 embedErrors.Add("Null or whitespace embed image url!");
+
817 embed.Image = null;
+
818 }
+
819
+
820 if (embed.Thumbnail != null && String.IsNullOrWhiteSpace(embed.Thumbnail.Url))
+
821 {
+
822 embedErrors.Add("Null or whitespace embed thumbnail url!");
+
823 embed.Thumbnail = null;
+
824 }
+
825
+
826 Optional<DateTimeOffset> timestampOptional = default;
+
827 if (embed.Timestamp != null)
+
828 if (DateTimeOffset.TryParse(embed.Timestamp, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var timestamp))
+
829 timestampOptional = timestamp.ToUniversalTime();
+
830 else
+
831 embedErrors.Add(
+
832 String.Format(
+
833 CultureInfo.InvariantCulture,
+
834 "Invalid embed timestamp: {0}",
+
835 embed.Timestamp));
+
836
+
837 var discordEmbed = new Embed
+
838 {
+
839 Author = embed.Author != null
+
840 ? new EmbedAuthor(embed.Author.Name)
+
841 {
+
842 IconUrl = embed.Author.IconUrl ?? default(Optional<string>),
+
843 ProxyIconUrl = embed.Author.ProxyIconUrl ?? default(Optional<string>),
+
844 Url = embed.Author.Url ?? default(Optional<string>),
+
845 }
+
846 : default(Optional<IEmbedAuthor>),
+
847 Colour = colour,
+
848 Description = embed.Description ?? default(Optional<string>),
+
849 Fields = fields ?? default(Optional<IReadOnlyList<IEmbedField>>),
+
850 Footer = embed.Footer != null
+
851 ? new EmbedFooter(embed.Footer.Text)
+
852 {
+
853 IconUrl = embed.Footer.IconUrl ?? default(Optional<string>),
+
854 ProxyIconUrl = embed.Footer.ProxyIconUrl ?? default(Optional<string>),
+
855 }
+
856 : default,
+
857 Image = embed.Image != null
+
858 ? new EmbedImage(embed.Image.Url)
+
859 {
+
860 Width = embed.Image.Width ?? default(Optional<int>),
+
861 Height = embed.Image.Height ?? default(Optional<int>),
+
862 ProxyUrl = embed.Image.ProxyUrl ?? default(Optional<string>),
+
863 }
+
864 : default(Optional<IEmbedImage>),
+
865 Provider = embed.Provider != null
+
866 ? new EmbedProvider
+
867 {
+
868 Name = embed.Provider.Name ?? default(Optional<string>),
+
869 Url = embed.Provider.Url ?? default(Optional<string>),
+
870 }
+
871 : default(Optional<IEmbedProvider>),
+
872 Thumbnail = embed.Thumbnail != null
+
873 ? new EmbedThumbnail(embed.Thumbnail.Url)
+
874 {
+
875 Width = embed.Thumbnail.Width ?? default(Optional<int>),
+
876 Height = embed.Thumbnail.Height ?? default(Optional<int>),
+
877 ProxyUrl = embed.Thumbnail.ProxyUrl ?? default(Optional<string>),
+
878 }
+
879 : default(Optional<IEmbedThumbnail>),
+
880 Timestamp = timestampOptional,
+
881 Title = embed.Title ?? default(Optional<string>),
+
882 Url = embed.Url ?? default(Optional<string>),
+
883 Video = embed.Video != null
+
884 ? new EmbedVideo
+
885 {
+
886 Url = embed.Video.Url ?? default(Optional<string>),
+
887 Width = embed.Video.Width ?? default(Optional<int>),
+
888 Height = embed.Video.Height ?? default(Optional<int>),
+
889 ProxyUrl = embed.Video.ProxyUrl ?? default(Optional<string>),
+
890 }
+
891 : default(Optional<IEmbedVideo>),
+
892 };
893
-
894 if (embedErrors.Count > 0)
-
895 {
-
896 var joinedErrors = String.Join(Environment.NewLine, embedErrors);
-
897 Logger.LogError("Embed description contains errors:{newLine}{issues}", Environment.NewLine, joinedErrors);
-
898 result.Add(new Embed
-
899 {
-
900 Title = "TGS Embed Errors",
-
901 Description = joinedErrors,
-
902 Colour = Color.Red,
-
903 Footer = new EmbedFooter("Please report this to your codebase's maintainers."),
-
904 Timestamp = DateTimeOffset.UtcNow,
-
905 });
-
906 }
-
907
-
908 return result;
-
909 }
-
910 #pragma warning restore CA1502
-
911 }
-
912#pragma warning restore CA1506
-
913}
+
894 var result = new List<IEmbed> { discordEmbed };
+
895
+
896 if (embedErrors.Count > 0)
+
897 {
+
898 var joinedErrors = String.Join(Environment.NewLine, embedErrors);
+
899 Logger.LogError("Embed description contains errors:{newLine}{issues}", Environment.NewLine, joinedErrors);
+
900 result.Add(new Embed
+
901 {
+
902 Title = "TGS Embed Errors",
+
903 Description = joinedErrors,
+
904 Colour = Color.Red,
+
905 Footer = new EmbedFooter("Please report this to your codebase's maintainers."),
+
906 Timestamp = DateTimeOffset.UtcNow,
+
907 });
+
908 }
+
909
+
910 return result;
+
911 }
+
912 #pragma warning restore CA1502
+
913 }
+
914#pragma warning restore CA1506
+
915}
Tgstation.Server.Api.Models.DiscordConnectionStringBuilder
ChatConnectionStringBuilder for ChatProvider.Discord.
Definition: DiscordConnectionStringBuilder.cs:12
Tgstation.Server.Api.Models.Internal.ChatBotSettings.ConnectionString
string? ConnectionString
The information used to connect to the Provider.
Definition: ChatBotSettings.cs:44
Tgstation.Server.Host.Components.Chat.ChannelRepresentation
Represents a Providers.IProvider channel.
Definition: ChannelRepresentation.cs:13
@@ -943,7 +945,7 @@ $(function() {
Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendUpdateMessage
override async Task< Func< string, string, Task > > SendUpdateMessage(Models.RevisionInformation revisionInformation, Version byondVersion, DateTimeOffset? estimatedCompletionTime, string gitHubOwner, string gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)
Definition: DiscordProvider.cs:305
Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.DisposeAsync
override async ValueTask DisposeAsync()
Definition: DiscordProvider.cs:203
Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.Connected
override bool Connected
If the IProvider is currently connected.
Definition: DiscordProvider.cs:37
-
Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed
Optional< IReadOnlyList< IEmbed > > ConvertEmbed(ChatEmbed embed)
Convert a ChatEmbed to an IEmbed parameters.
Definition: DiscordProvider.cs:744
+
Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed
Optional< IReadOnlyList< IEmbed > > ConvertEmbed(ChatEmbed embed)
Convert a ChatEmbed to an IEmbed parameters.
Definition: DiscordProvider.cs:746
Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.gatewayReadyTcs
TaskCompletionSource< object > gatewayReadyTcs
The TaskCompletionSource<TResult> for the initial gateway connection event.
Definition: DiscordProvider.cs:93
Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.RespondAsync
Task< Result > RespondAsync(IReady readyEvent, CancellationToken cancellationToken)
Definition: DiscordProvider.cs:546
Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.DisconnectImpl
override async Task DisconnectImpl(CancellationToken cancellationToken)
Gracefully disconnects the provider. A Task representing the running operation.
Definition: DiscordProvider.cs:615
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider.html index c89976267e..f366b73328 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider.html @@ -748,172 +748,172 @@ Here is the call graph for this function:
Returns
The parameter for sending a single IEmbed.
-

Definition at line 744 of file DiscordProvider.cs.

-
745 {
-
746 if (embed == null)
-
747 return default;
-
748
-
749 List<string> embedErrors = new List<string>();
-
750 Optional<Color> colour = default;
-
751 if (embed.Colour != null)
-
752 if (Int32.TryParse(embed.Colour.Substring(1), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var argb))
-
753 colour = Color.FromArgb(argb);
-
754 else
-
755 embedErrors.Add(
-
756 String.Format(
-
757 CultureInfo.InvariantCulture,
-
758 "Invalid embed colour: {0}",
-
759 embed.Colour));
-
760
-
761 if (embed.Author != null && String.IsNullOrWhiteSpace(embed.Author.Name))
-
762 {
-
763 embedErrors.Add("Null or whitespace embed author name!");
-
764 embed.Author = null;
-
765 }
-
766
-
767 List<IEmbedField> fields = null;
-
768 if (embed.Fields != null)
-
769 {
-
770 fields = new List<IEmbedField>();
-
771 var i = -1;
-
772 foreach (var field in embed.Fields)
-
773 {
-
774 ++i;
-
775 var invalid = false;
-
776 if (String.IsNullOrWhiteSpace(field.Name))
-
777 {
-
778 embedErrors.Add(
-
779 String.Format(
-
780 CultureInfo.InvariantCulture,
-
781 "Null or whitespace field author at index {0}!",
-
782 i));
-
783 invalid = true;
-
784 }
-
785
-
786 if (String.IsNullOrWhiteSpace(field.Value))
-
787 {
-
788 embedErrors.Add(
-
789 String.Format(
-
790 CultureInfo.InvariantCulture,
-
791 "Null or whitespace field author at index {0}!",
-
792 i));
-
793 invalid = true;
-
794 }
-
795
-
796 if (invalid)
-
797 continue;
-
798
-
799 fields.Add(new EmbedField(field.Name, field.Value)
-
800 {
-
801 IsInline = field.IsInline ?? default(Optional<bool>),
-
802 });
-
803 }
-
804 }
-
805
-
806 if (embed.Footer != null && String.IsNullOrWhiteSpace(embed.Footer.Text))
-
807 {
-
808 embedErrors.Add("Null or whitespace embed footer text!");
-
809 embed.Footer = null;
-
810 }
-
811
-
812 if (embed.Image != null && String.IsNullOrWhiteSpace(embed.Image.Url))
-
813 {
-
814 embedErrors.Add("Null or whitespace embed image url!");
-
815 embed.Image = null;
-
816 }
-
817
-
818 if (embed.Thumbnail != null && String.IsNullOrWhiteSpace(embed.Thumbnail.Url))
-
819 {
-
820 embedErrors.Add("Null or whitespace embed thumbnail url!");
-
821 embed.Thumbnail = null;
-
822 }
-
823
-
824 Optional<DateTimeOffset> timestampOptional = default;
-
825 if (embed.Timestamp != null)
-
826 if (DateTimeOffset.TryParse(embed.Timestamp, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var timestamp))
-
827 timestampOptional = timestamp.ToUniversalTime();
-
828 else
-
829 embedErrors.Add(
-
830 String.Format(
-
831 CultureInfo.InvariantCulture,
-
832 "Invalid embed timestamp: {0}",
-
833 embed.Timestamp));
-
834
-
835 var discordEmbed = new Embed
-
836 {
-
837 Author = embed.Author != null
-
838 ? new EmbedAuthor(embed.Author.Name)
-
839 {
-
840 IconUrl = embed.Author.IconUrl ?? default(Optional<string>),
-
841 ProxyIconUrl = embed.Author.ProxyIconUrl ?? default(Optional<string>),
-
842 Url = embed.Author.Url ?? default(Optional<string>),
-
843 }
-
844 : default(Optional<IEmbedAuthor>),
-
845 Colour = colour,
-
846 Description = embed.Description ?? default(Optional<string>),
-
847 Fields = fields ?? default(Optional<IReadOnlyList<IEmbedField>>),
-
848 Footer = embed.Footer != null
-
849 ? new EmbedFooter(embed.Footer.Text)
-
850 {
-
851 IconUrl = embed.Footer.IconUrl ?? default(Optional<string>),
-
852 ProxyIconUrl = embed.Footer.ProxyIconUrl ?? default(Optional<string>),
-
853 }
-
854 : default,
-
855 Image = embed.Image != null
-
856 ? new EmbedImage(embed.Image.Url)
-
857 {
-
858 Width = embed.Image.Width ?? default(Optional<int>),
-
859 Height = embed.Image.Height ?? default(Optional<int>),
-
860 ProxyUrl = embed.Image.ProxyUrl ?? default(Optional<string>),
-
861 }
-
862 : default(Optional<IEmbedImage>),
-
863 Provider = embed.Provider != null
-
864 ? new EmbedProvider
-
865 {
-
866 Name = embed.Provider.Name ?? default(Optional<string>),
-
867 Url = embed.Provider.Url ?? default(Optional<string>),
-
868 }
-
869 : default(Optional<IEmbedProvider>),
-
870 Thumbnail = embed.Thumbnail != null
-
871 ? new EmbedThumbnail(embed.Thumbnail.Url)
-
872 {
-
873 Width = embed.Thumbnail.Width ?? default(Optional<int>),
-
874 Height = embed.Thumbnail.Height ?? default(Optional<int>),
-
875 ProxyUrl = embed.Thumbnail.ProxyUrl ?? default(Optional<string>),
-
876 }
-
877 : default(Optional<IEmbedThumbnail>),
-
878 Timestamp = timestampOptional,
-
879 Title = embed.Title ?? default(Optional<string>),
-
880 Url = embed.Url ?? default(Optional<string>),
-
881 Video = embed.Video != null
-
882 ? new EmbedVideo
-
883 {
-
884 Url = embed.Video.Url ?? default(Optional<string>),
-
885 Width = embed.Video.Width ?? default(Optional<int>),
-
886 Height = embed.Video.Height ?? default(Optional<int>),
-
887 ProxyUrl = embed.Video.ProxyUrl ?? default(Optional<string>),
-
888 }
-
889 : default(Optional<IEmbedVideo>),
-
890 };
-
891
-
892 var result = new List<IEmbed> { discordEmbed };
+

Definition at line 746 of file DiscordProvider.cs.

+
747 {
+
748 if (embed == null)
+
749 return default;
+
750
+
751 List<string> embedErrors = new List<string>();
+
752 Optional<Color> colour = default;
+
753 if (embed.Colour != null)
+
754 if (Int32.TryParse(embed.Colour.Substring(1), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var argb))
+
755 colour = Color.FromArgb(argb);
+
756 else
+
757 embedErrors.Add(
+
758 String.Format(
+
759 CultureInfo.InvariantCulture,
+
760 "Invalid embed colour: {0}",
+
761 embed.Colour));
+
762
+
763 if (embed.Author != null && String.IsNullOrWhiteSpace(embed.Author.Name))
+
764 {
+
765 embedErrors.Add("Null or whitespace embed author name!");
+
766 embed.Author = null;
+
767 }
+
768
+
769 List<IEmbedField> fields = null;
+
770 if (embed.Fields != null)
+
771 {
+
772 fields = new List<IEmbedField>();
+
773 var i = -1;
+
774 foreach (var field in embed.Fields)
+
775 {
+
776 ++i;
+
777 var invalid = false;
+
778 if (String.IsNullOrWhiteSpace(field.Name))
+
779 {
+
780 embedErrors.Add(
+
781 String.Format(
+
782 CultureInfo.InvariantCulture,
+
783 "Null or whitespace field author at index {0}!",
+
784 i));
+
785 invalid = true;
+
786 }
+
787
+
788 if (String.IsNullOrWhiteSpace(field.Value))
+
789 {
+
790 embedErrors.Add(
+
791 String.Format(
+
792 CultureInfo.InvariantCulture,
+
793 "Null or whitespace field author at index {0}!",
+
794 i));
+
795 invalid = true;
+
796 }
+
797
+
798 if (invalid)
+
799 continue;
+
800
+
801 fields.Add(new EmbedField(field.Name, field.Value)
+
802 {
+
803 IsInline = field.IsInline ?? default(Optional<bool>),
+
804 });
+
805 }
+
806 }
+
807
+
808 if (embed.Footer != null && String.IsNullOrWhiteSpace(embed.Footer.Text))
+
809 {
+
810 embedErrors.Add("Null or whitespace embed footer text!");
+
811 embed.Footer = null;
+
812 }
+
813
+
814 if (embed.Image != null && String.IsNullOrWhiteSpace(embed.Image.Url))
+
815 {
+
816 embedErrors.Add("Null or whitespace embed image url!");
+
817 embed.Image = null;
+
818 }
+
819
+
820 if (embed.Thumbnail != null && String.IsNullOrWhiteSpace(embed.Thumbnail.Url))
+
821 {
+
822 embedErrors.Add("Null or whitespace embed thumbnail url!");
+
823 embed.Thumbnail = null;
+
824 }
+
825
+
826 Optional<DateTimeOffset> timestampOptional = default;
+
827 if (embed.Timestamp != null)
+
828 if (DateTimeOffset.TryParse(embed.Timestamp, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var timestamp))
+
829 timestampOptional = timestamp.ToUniversalTime();
+
830 else
+
831 embedErrors.Add(
+
832 String.Format(
+
833 CultureInfo.InvariantCulture,
+
834 "Invalid embed timestamp: {0}",
+
835 embed.Timestamp));
+
836
+
837 var discordEmbed = new Embed
+
838 {
+
839 Author = embed.Author != null
+
840 ? new EmbedAuthor(embed.Author.Name)
+
841 {
+
842 IconUrl = embed.Author.IconUrl ?? default(Optional<string>),
+
843 ProxyIconUrl = embed.Author.ProxyIconUrl ?? default(Optional<string>),
+
844 Url = embed.Author.Url ?? default(Optional<string>),
+
845 }
+
846 : default(Optional<IEmbedAuthor>),
+
847 Colour = colour,
+
848 Description = embed.Description ?? default(Optional<string>),
+
849 Fields = fields ?? default(Optional<IReadOnlyList<IEmbedField>>),
+
850 Footer = embed.Footer != null
+
851 ? new EmbedFooter(embed.Footer.Text)
+
852 {
+
853 IconUrl = embed.Footer.IconUrl ?? default(Optional<string>),
+
854 ProxyIconUrl = embed.Footer.ProxyIconUrl ?? default(Optional<string>),
+
855 }
+
856 : default,
+
857 Image = embed.Image != null
+
858 ? new EmbedImage(embed.Image.Url)
+
859 {
+
860 Width = embed.Image.Width ?? default(Optional<int>),
+
861 Height = embed.Image.Height ?? default(Optional<int>),
+
862 ProxyUrl = embed.Image.ProxyUrl ?? default(Optional<string>),
+
863 }
+
864 : default(Optional<IEmbedImage>),
+
865 Provider = embed.Provider != null
+
866 ? new EmbedProvider
+
867 {
+
868 Name = embed.Provider.Name ?? default(Optional<string>),
+
869 Url = embed.Provider.Url ?? default(Optional<string>),
+
870 }
+
871 : default(Optional<IEmbedProvider>),
+
872 Thumbnail = embed.Thumbnail != null
+
873 ? new EmbedThumbnail(embed.Thumbnail.Url)
+
874 {
+
875 Width = embed.Thumbnail.Width ?? default(Optional<int>),
+
876 Height = embed.Thumbnail.Height ?? default(Optional<int>),
+
877 ProxyUrl = embed.Thumbnail.ProxyUrl ?? default(Optional<string>),
+
878 }
+
879 : default(Optional<IEmbedThumbnail>),
+
880 Timestamp = timestampOptional,
+
881 Title = embed.Title ?? default(Optional<string>),
+
882 Url = embed.Url ?? default(Optional<string>),
+
883 Video = embed.Video != null
+
884 ? new EmbedVideo
+
885 {
+
886 Url = embed.Video.Url ?? default(Optional<string>),
+
887 Width = embed.Video.Width ?? default(Optional<int>),
+
888 Height = embed.Video.Height ?? default(Optional<int>),
+
889 ProxyUrl = embed.Video.ProxyUrl ?? default(Optional<string>),
+
890 }
+
891 : default(Optional<IEmbedVideo>),
+
892 };
893
-
894 if (embedErrors.Count > 0)
-
895 {
-
896 var joinedErrors = String.Join(Environment.NewLine, embedErrors);
-
897 Logger.LogError("Embed description contains errors:{newLine}{issues}", Environment.NewLine, joinedErrors);
-
898 result.Add(new Embed
-
899 {
-
900 Title = "TGS Embed Errors",
-
901 Description = joinedErrors,
-
902 Colour = Color.Red,
-
903 Footer = new EmbedFooter("Please report this to your codebase's maintainers."),
-
904 Timestamp = DateTimeOffset.UtcNow,
-
905 });
-
906 }
-
907
-
908 return result;
-
909 }
+
894 var result = new List<IEmbed> { discordEmbed };
+
895
+
896 if (embedErrors.Count > 0)
+
897 {
+
898 var joinedErrors = String.Join(Environment.NewLine, embedErrors);
+
899 Logger.LogError("Embed description contains errors:{newLine}{issues}", Environment.NewLine, joinedErrors);
+
900 result.Add(new Embed
+
901 {
+
902 Title = "TGS Embed Errors",
+
903 Description = joinedErrors,
+
904 Colour = Color.Red,
+
905 Footer = new EmbedFooter("Please report this to your codebase's maintainers."),
+
906 Timestamp = DateTimeOffset.UtcNow,
+
907 });
+
908 }
+
909
+
910 return result;
+
911 }
Provider(IJobManager jobManager, ILogger< Provider > logger, ChatBot chatBot)
Initializes a new instance of the Provider class.
Definition: Provider.cs:73
ChatEmbedMedia Image
The ChatEmbedMedia for an image.
Definition: ChatEmbed.cs:45
@@ -1129,7 +1129,7 @@ Here is the caller graph for this function:
662 if (!discordChannelResponse.IsSuccess)
663 {
664 Logger.LogWarning(
-
665 "Error retrieving discord channel {0}: {1} Inner: {2}",
+
665 "Error retrieving discord channel {channelId}: {error} Inner: {innerError}",
666 channelId,
667 discordChannelResponse.Error.Message,
668 discordChannelResponse.Inner?.Error?.Message);
@@ -1140,67 +1140,69 @@ Here is the caller graph for this function:
673 var channelType = discordChannelResponse.Entity.Type;
674 if (channelType != ChannelType.GuildText && channelType != ChannelType.GuildAnnouncement)
675 {
-
676 Logger.LogWarning("Cound not map channel {0}! Incorrect type: {1}", channelId, discordChannelResponse.Entity.Type);
+
676 Logger.LogWarning("Cound not map channel {channelId}! Incorrect type: {channelType}", channelId, discordChannelResponse.Entity.Type);
677 return null;
678 }
679
680 friendlyName = discordChannelResponse.Entity.Name.Value;
-
681
-
682 var guildsClient = serviceProvider.GetRequiredService<IDiscordRestGuildAPI>();
-
683 var guildsResponse = await guildsClient.GetGuildAsync(
-
684 discordChannelResponse.Entity.GuildID.Value,
-
685 false,
-
686 cancellationToken);
-
687 if (!guildsResponse.IsSuccess)
-
688 {
-
689 Logger.LogWarning(
-
690 "Error retrieving discord guild {0}: {1}",
-
691 discordChannelResponse.Entity.GuildID.Value,
-
692 discordChannelResponse.Error.Message);
-
693 remapRequired = true;
-
694 return null;
-
695 }
-
696
-
697 connectionName = guildsResponse.Entity.Name;
-
698 }
-
699
-
700 var channelModel = new ChannelRepresentation
-
701 {
-
702 RealId = channelId,
-
703 IsAdminChannel = channelFromDB.IsAdminChannel == true,
-
704 ConnectionName = connectionName,
-
705 FriendlyName = friendlyName,
-
706 IsPrivateChannel = false,
-
707 Tag = channelFromDB.Tag,
-
708 EmbedsSupported = true,
-
709 };
-
710
-
711 Logger.LogTrace("Mapped channel {0}: {1}", channelModel.RealId, channelModel.FriendlyName);
-
712 return Tuple.Create(channelFromDB, channelModel);
-
713 }
-
714
-
715 var tasks = channels
-
716 .Select(x => GetModelChannelFromDBChannel(x))
-
717 .ToList();
-
718
-
719 await Task.WhenAll(tasks);
+
681 var guildId = discordChannelResponse.Entity.GuildID.Value;
+
682
+
683 var guildsClient = serviceProvider.GetRequiredService<IDiscordRestGuildAPI>();
+
684 var guildsResponse = await guildsClient.GetGuildAsync(
+
685 guildId,
+
686 false,
+
687 cancellationToken);
+
688 if (!guildsResponse.IsSuccess)
+
689 {
+
690 Logger.LogWarning(
+
691 "Error retrieving discord guild {guildID}: {error} Inner: {innerError}",
+
692 guildId,
+
693 guildsResponse.Error.Message,
+
694 guildsResponse.Inner?.Error?.Message);
+
695 remapRequired = true;
+
696 return null;
+
697 }
+
698
+
699 connectionName = guildsResponse.Entity.Name;
+
700 }
+
701
+
702 var channelModel = new ChannelRepresentation
+
703 {
+
704 RealId = channelId,
+
705 IsAdminChannel = channelFromDB.IsAdminChannel == true,
+
706 ConnectionName = connectionName,
+
707 FriendlyName = friendlyName,
+
708 IsPrivateChannel = false,
+
709 Tag = channelFromDB.Tag,
+
710 EmbedsSupported = true,
+
711 };
+
712
+
713 Logger.LogTrace("Mapped channel {0}: {1}", channelModel.RealId, channelModel.FriendlyName);
+
714 return Tuple.Create(channelFromDB, channelModel);
+
715 }
+
716
+
717 var tasks = channels
+
718 .Select(x => GetModelChannelFromDBChannel(x))
+
719 .ToList();
720
-
721 var enumerator = tasks
-
722 .Select(x => x.Result)
-
723 .Where(x => x != null)
-
724 .ToList();
-
725
-
726 lock (mappedChannels)
-
727 {
-
728 mappedChannels.Clear();
-
729 mappedChannels.AddRange(enumerator.Select(x => x.Item2.RealId));
-
730 }
-
731
-
732 if (remapRequired)
-
733 EnqueueMessage(null);
-
734
-
735 return enumerator;
-
736 }
+
721 await Task.WhenAll(tasks);
+
722
+
723 var enumerator = tasks
+
724 .Select(x => x.Result)
+
725 .Where(x => x != null)
+
726 .ToList();
+
727
+
728 lock (mappedChannels)
+
729 {
+
730 mappedChannels.Clear();
+
731 mappedChannels.AddRange(enumerator.Select(x => x.Item2.RealId));
+
732 }
+
733
+
734 if (remapRequired)
+
735 EnqueueMessage(null);
+
736
+
737 return enumerator;
+
738 }
Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage
void EnqueueMessage(Message message)
Queues a message for NextMessage(CancellationToken).
Definition: Provider.cs:210

References Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.initialUserName, Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger, Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.mappedChannels, Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.serviceProvider, and Tgstation.Server.Host.Components.Chat.ChannelRepresentation.Tag.

@@ -1603,11 +1605,11 @@ Here is the call graph for this function:
300 Logger.LogWarning(e, "Error sending discord message!");
301 }
302 }
-
Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed
Optional< IReadOnlyList< IEmbed > > ConvertEmbed(ChatEmbed embed)
Convert a ChatEmbed to an IEmbed parameters.
Definition: DiscordProvider.cs:744
+
Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed
Optional< IReadOnlyList< IEmbed > > ConvertEmbed(ChatEmbed embed)
Convert a ChatEmbed to an IEmbed parameters.
Definition: DiscordProvider.cs:746
Tgstation.Server.Host.Components.Interop.MessageContent.Embed
ChatEmbed Embed
The ChatEmbed.
Definition: MessageContent.cs:16
Tgstation.Server.Host.Components.Interop.MessageContent.Text
string Text
The message string.
Definition: MessageContent.cs:11
-

References Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed(), Tgstation.Server.Host.Components.Interop.MessageContent.Embed, Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger, Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.mappedChannels, Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.serviceProvider, and Tgstation.Server.Host.Components.Interop.MessageContent.Text.

+

References Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed(), Tgstation.Server.Host.Components.Interop.MessageContent.Embed, Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger, Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.mappedChannels, Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.serviceProvider, and Tgstation.Server.Host.Components.Interop.MessageContent.Text.

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.RespondAsync().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider.html index 11626f8c33..3fa601e8e6 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider.html @@ -1652,7 +1652,7 @@ Here is the caller graph for this function:

Definition at line 30 of file Provider.cs.

30{ get; }
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.Connect(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.Connect(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed(), Tgstation.Server.Host.Components.Chat.Providers.Provider.Disconnect(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.DisconnectImpl(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.DisconnectImpl(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.DisposeAsync(), Tgstation.Server.Host.Components.Chat.Providers.Provider.DisposeAsync(), Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.HardDisconnect(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.MapChannelsImpl(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.NonBlockingListen(), Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider(), Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.RespondAsync(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SaslAuthenticate(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendMessage(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendUpdateMessage(), and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.Connect(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.Connect(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed(), Tgstation.Server.Host.Components.Chat.Providers.Provider.Disconnect(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.DisconnectImpl(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.DisconnectImpl(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.DisposeAsync(), Tgstation.Server.Host.Components.Chat.Providers.Provider.DisposeAsync(), Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.HardDisconnect(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.MapChannelsImpl(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.NonBlockingListen(), Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider(), Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.RespondAsync(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SaslAuthenticate(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendMessage(), Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage(), Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendUpdateMessage(), and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed.html index 450b3b19bd..196a81fd8f 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed.html @@ -154,7 +154,7 @@ Properties

Definition at line 65 of file ChatEmbed.cs.

65{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

@@ -183,7 +183,7 @@ Properties

Definition at line 35 of file ChatEmbed.cs.

35{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

@@ -239,7 +239,7 @@ Properties

Definition at line 70 of file ChatEmbed.cs.

70{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

@@ -268,7 +268,7 @@ Properties

Definition at line 40 of file ChatEmbed.cs.

40{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

@@ -297,7 +297,7 @@ Properties

Definition at line 45 of file ChatEmbed.cs.

45{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

@@ -353,7 +353,7 @@ Properties

Definition at line 50 of file ChatEmbed.cs.

50{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

@@ -382,7 +382,7 @@ Properties

Definition at line 30 of file ChatEmbed.cs.

30{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed_footer.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed_footer.html index 964b15afa7..123b192ae0 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed_footer.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed_footer.html @@ -181,7 +181,7 @@ Properties

Definition at line 11 of file ChatEmbedFooter.cs.

11{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed_media.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed_media.html index e7b0083e61..cb5d402da3 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed_media.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed_media.html @@ -184,7 +184,7 @@ Properties

Definition at line 12 of file ChatEmbedMedia.cs.

12{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed_provider.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed_provider.html index fb2a8cd8c5..5e1cb2e5f4 100644 --- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed_provider.html +++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_chat_embed_provider.html @@ -133,7 +133,7 @@ Properties

Definition at line 11 of file ChatEmbedProvider.cs.

11{ get; set; }
-

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().

+

Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.ConvertEmbed().