Send the message for a deployment to configured deployment channels.Parameters
+Func< string?, string, Action< bool > > QueueDeploymentMessage (Models.RevisionInformation revisionInformation, Models.RevisionInformation ? previousRevisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, bool localCommitPushed)
+ Send the message for a deployment to configured deployment channels.Parameters
revisionInformation The RevisionInformation of the deployment.
+ previousRevisionInformation The optional RevisionInformation of the previous deployment.
engineVersion The Api.Models.EngineVersion of the deployment.
estimatedCompletionTime The optional DateTimeOffset the deployment is expected to be completed at.
gitHubOwner The repository GitHub owner, if any.
@@ -218,7 +219,7 @@ Public Member Functions
Returns A Func<T1, T2, TResult> to call to update the message at the deployment's conclusion. Parameters: Error message if any, DreamMaker output if any. Returns an Action to call to mark the deployment as active/inactive. Parameter: If the deployment is being activated or inactivated.
-
+
async Task StartAsync (CancellationToken cancellationToken)
async Task StopAsync (CancellationToken cancellationToken)
@@ -261,7 +262,7 @@ Public Member Functions
Handle a restart of the server.Parameters
updateVersion The Version being updated to, null if not being changed.
- handlerMayDelayShutdownWithExtremelyLongRunningTasks If false the IRestartHandler should aim to complete the Task returned from this function ASAP.
+ handlerMayDelayShutdownWithExtremelyLongRunningTasks If false the IRestartHandler should aim to complete the Task returned from this function ASAP.
cancellationToken The CancellationToken for the operation.
@@ -526,28 +527,28 @@ Here is the call graph for this function:
-Definition at line 1066 of file ChatManager.cs .
- 1067 {
-
1068 async Task Wrap(Task originalTask)
-
1069 {
-
1070 await originalTask;
-
1071 try
-
1072 {
-
1073 await task;
-
1074 }
-
1075 catch (OperationCanceledException ex)
-
1076 {
-
1077 logger .LogDebug(ex,
"Async chat message cancelled!" );
-
1078 }
-
-
1080 {
-
1081 logger .LogError(ex,
"Error in asynchronous chat message!" );
-
1082 }
-
1083 }
-
1084
-
-
-
1087 }
+
Definition at line 1068 of file ChatManager.cs .
+
1069 {
+
1070 async Task Wrap(Task originalTask)
+
1071 {
+
1072 await originalTask;
+
1073 try
+
1074 {
+
1075 await task;
+
1076 }
+
1077 catch (OperationCanceledException ex)
+
1078 {
+
1079 logger .LogDebug(ex,
"Async chat message cancelled!" );
+
1080 }
+
+
1082 {
+
1083 logger .LogError(ex,
"Error in asynchronous chat message!" );
+
1084 }
+
1085 }
+
1086
+
+
+
1089 }
@@ -675,12 +676,12 @@ Here is the call graph for this function:
277 }
278 }
Task? initialProviderConnectionsTask
A Task that represents the IProviders initial connection.
-async ValueTask UpdateTrackingContexts(CancellationToken cancellationToken)
Force an update with the active channels on all active IChatTrackingContexts.A ValueTask representing...
-async ValueTask< IProvider?> RemoveProviderChannels(long connectionId, bool removeProvider, CancellationToken cancellationToken)
Remove a IProvider from mappedChannels optionally removing the provider itself from providers and upd...
+async ValueTask UpdateTrackingContexts(CancellationToken cancellationToken)
Force an update with the active channels on all active IChatTrackingContexts.A ValueTask representing...
+async ValueTask< IProvider?> RemoveProviderChannels(long connectionId, bool removeProvider, CancellationToken cancellationToken)
Remove a IProvider from mappedChannels optionally removing the provider itself from providers and upd...
Async lock context helper.
static async ValueTask< SemaphoreSlimContext > Lock(SemaphoreSlim semaphore, CancellationToken cancellationToken, ILogger? logger=null)
Asyncronously locks a semaphore .
-References Tgstation.Server.Host.Components.Chat.ChatManager.activeChatBots , Tgstation.Server.Host.Components.Chat.ChatManager.changeChannelSemaphores , Tgstation.Server.Host.Components.Chat.ChatManager.channelIdCounter , Tgstation.Server.Host.Components.Chat.ChatManager.initialProviderConnectionsTask , Tgstation.Server.Host.Utils.SemaphoreSlimContext.Lock() , Tgstation.Server.Host.Components.Chat.ChatManager.logger , Tgstation.Server.Host.Components.Chat.ChatManager.mappedChannels , Tgstation.Server.Host.Components.Chat.ChatManager.providers , Tgstation.Server.Host.Components.Chat.ChatManager.RemoveProviderChannels() , Tgstation.Server.Host.Components.Chat.ChatManager.synchronizationLock , and Tgstation.Server.Host.Components.Chat.ChatManager.UpdateTrackingContexts() .
+References Tgstation.Server.Host.Components.Chat.ChatManager.activeChatBots , Tgstation.Server.Host.Components.Chat.ChatManager.changeChannelSemaphores , Tgstation.Server.Host.Components.Chat.ChatManager.channelIdCounter , Tgstation.Server.Host.Components.Chat.ChatManager.initialProviderConnectionsTask , Tgstation.Server.Host.Utils.SemaphoreSlimContext.Lock() , Tgstation.Server.Host.Components.Chat.ChatManager.logger , Tgstation.Server.Host.Components.Chat.ChatManager.mappedChannels , Tgstation.Server.Host.Components.Chat.ChatManager.providers , Tgstation.Server.Host.Components.Chat.ChatManager.RemoveProviderChannels() , Tgstation.Server.Host.Components.Chat.ChatManager.synchronizationLock , and Tgstation.Server.Host.Components.Chat.ChatManager.UpdateTrackingContexts() .
@@ -735,7 +736,7 @@ Here is the call graph for this function:
-Returns A ValueTask representing the running operation. Will complete immediately if the ChatBotSettings.Enabled property of newSettings is false.
+Returns A ValueTask representing the running operation. Will complete immediately if the ChatBotSettings.Enabled property of newSettings is false .
Implements Tgstation.Server.Host.Components.Chat.IChatManager .
@@ -801,12 +802,12 @@ Here is the call graph for this function:
339
340 await reconnectionUpdateTask;
341 }
-async Task DeleteConnection(long connectionId, CancellationToken cancellationToken)
Disconnects and deletes a given connection.A Task representing the running operation.
+async Task DeleteConnection(long connectionId, CancellationToken cancellationToken)
Disconnects and deletes a given connection.A Task representing the running operation.
IProvider CreateProvider(ChatBot settings)
Create a IProvider.
For interacting with a chat service.
Task SetReconnectInterval(uint reconnectInterval, bool connectNow)
Set the interval at which the provider starts jobs to try to reconnect.
-References Tgstation.Server.Host.Components.Chat.ChatManager.activeChatBots , Tgstation.Server.Host.Components.Chat.ChatManager.connectionsUpdated , Tgstation.Server.Host.Components.Chat.Providers.IProviderFactory.CreateProvider() , Tgstation.Server.Host.Components.Chat.ChatManager.DeleteConnection() , Tgstation.Server.Host.Components.Chat.ChatManager.logger , Tgstation.Server.Host.Components.Chat.ChatManager.mappedChannels , Tgstation.Server.Host.Components.Chat.ChatManager.providerFactory , Tgstation.Server.Host.Components.Chat.ChatManager.providers , and Tgstation.Server.Host.Components.Chat.ChatManager.synchronizationLock .
+References Tgstation.Server.Host.Components.Chat.ChatManager.activeChatBots , Tgstation.Server.Host.Components.Chat.ChatManager.connectionsUpdated , Tgstation.Server.Host.Components.Chat.Providers.IProviderFactory.CreateProvider() , Tgstation.Server.Host.Components.Chat.ChatManager.DeleteConnection() , Tgstation.Server.Host.Components.Chat.ChatManager.logger , Tgstation.Server.Host.Components.Chat.ChatManager.mappedChannels , Tgstation.Server.Host.Components.Chat.ChatManager.providerFactory , Tgstation.Server.Host.Components.Chat.ChatManager.providers , and Tgstation.Server.Host.Components.Chat.ChatManager.synchronizationLock .
@@ -844,28 +845,28 @@ Here is the call graph for this function:
Implements Tgstation.Server.Host.Components.Chat.IChatManager .
-Definition at line 492 of file ChatManager.cs .
- 493 {
-
-
495 throw new InvalidOperationException("RegisterCommandHandler() hasn't been called!" );
-
496
-
497 IChatTrackingContext context = null !;
-
-
499 context = new ChatTrackingContext(
-
-
-
-
503 () =>
-
504 {
-
505 lock (trackingContexts)
-
506 trackingContexts.Remove(context);
-
507 });
-
508
-
-
-
511
-
512 return context;
-
513 }
+
Definition at line 494 of file ChatManager.cs .
+
495 {
+
+
497 throw new InvalidOperationException("RegisterCommandHandler() hasn't been called!" );
+
498
+
499 IChatTrackingContext context = null !;
+
+
501 context = new ChatTrackingContext(
+
+
+
+
505 () =>
+
506 {
+
507 lock (trackingContexts)
+
508 trackingContexts.Remove(context);
+
509 });
+
510
+
+
+
513
+
514 return context;
+
515 }
ICustomCommandHandler? customCommandHandler
The ICustomCommandHandler for the ChangeChannels(long, IEnumerable<Models.ChatChannel>,...
@@ -908,39 +909,39 @@ Here is the call graph for this function:
Implements Tgstation.Server.Host.Components.Chat.IChatManager .
-Definition at line 556 of file ChatManager.cs .
- 557 {
-
558 logger .LogTrace(
"DeleteConnection {connectionId}" , connectionId);
-
-
560 using (hasSemaphore
-
561 ? semaphore
-
562 : null )
-
563 using (hasSemaphore
-
-
565 : null )
-
566 {
-
-
568 if (provider != null )
-
569 {
-
570 var startTime = DateTimeOffset.UtcNow;
-
571 try
-
572 {
-
573 await provider.Disconnect(cancellationToken);
-
574 }
-
-
576 {
-
577 logger .LogError(ex,
"Error disconnecting connection {connectionId}!" , connectionId);
-
578 }
-
579
-
580 await provider.DisposeAsync();
-
581 var duration = DateTimeOffset.UtcNow - startTime;
-
582 if (duration.TotalSeconds > 3)
-
583 logger .LogWarning(
"Disconnecting a {providerType} took {totalSeconds}s!" , provider.GetType().Name, duration.TotalSeconds);
-
584 }
-
585 else
-
586 logger .LogTrace(
"DeleteConnection: ID {connectionId} doesn't exist!" , connectionId);
-
587 }
-
588 }
+
Definition at line 558 of file ChatManager.cs .
+
559 {
+
560 logger .LogTrace(
"DeleteConnection {connectionId}" , connectionId);
+
+
562 using (hasSemaphore
+
563 ? semaphore
+
564 : null )
+
565 using (hasSemaphore
+
+
567 : null )
+
568 {
+
+
570 if (provider != null )
+
571 {
+
572 var startTime = DateTimeOffset.UtcNow;
+
573 try
+
574 {
+
575 await provider.Disconnect(cancellationToken);
+
576 }
+
+
578 {
+
579 logger .LogError(ex,
"Error disconnecting connection {connectionId}!" , connectionId);
+
580 }
+
581
+
582 await provider.DisposeAsync();
+
583 var duration = DateTimeOffset.UtcNow - startTime;
+
584 if (duration.TotalSeconds > 3)
+
585 logger .LogWarning(
"Disconnecting a {providerType} took {totalSeconds}s!" , provider.GetType().Name, duration.TotalSeconds);
+
586 }
+
587 else
+
588 logger .LogTrace(
"DeleteConnection: ID {connectionId} doesn't exist!" , connectionId);
+
589 }
+
590 }
References Tgstation.Server.Host.Utils.SemaphoreSlimContext.Lock() .
@@ -1038,7 +1039,7 @@ Here is the caller graph for this function:
Handle a restart of the server.
Parameters
updateVersion The Version being updated to, null if not being changed.
- handlerMayDelayShutdownWithExtremelyLongRunningTasks If false the IRestartHandler should aim to complete the Task returned from this function ASAP.
+ handlerMayDelayShutdownWithExtremelyLongRunningTasks If false the IRestartHandler should aim to complete the Task returned from this function ASAP.
cancellationToken The CancellationToken for the operation.
@@ -1048,28 +1049,28 @@ Here is the caller graph for this function:
Implements Tgstation.Server.Host.Core.IRestartHandler .
-Definition at line 591 of file ChatManager.cs .
- 592 {
-
593 var message = updateVersion == null
-
594 ? $"TGS: {(handlerMayDelayShutdownWithExtremelyLongRunningTasks ? " Graceful shutdown" : " Going down")}..."
-
595 : $"TGS: Updating to version {updateVersion}..." ;
-
596 List<ulong> systemChannels;
-
-
-
599 .Where(x => x.Value.IsSystemChannel)
-
600 .Select(x => x.Key)
-
601 .ToList();
-
602
-
-
604 systemChannels,
-
605 null ,
-
-
607 {
-
608 Text = message,
-
609 },
-
610 cancellationToken);
-
611 }
-
ValueTask SendMessage(IEnumerable< ulong > channelIds, Message? replyTo, MessageContent message, CancellationToken cancellationToken)
Asynchronously send a given message to a set of channelIds .
+
Definition at line 593 of file ChatManager.cs .
+
594 {
+
595 var message = updateVersion == null
+
596 ? $"TGS: {(handlerMayDelayShutdownWithExtremelyLongRunningTasks ? " Graceful shutdown" : " Going down")}..."
+
597 : $"TGS: Updating to version {updateVersion}..." ;
+
598 List<ulong> systemChannels;
+
+
+
601 .Where(x => x.Value.IsSystemChannel)
+
602 .Select(x => x.Key)
+
603 .ToList();
+
604
+
+
606 systemChannels,
+
607 null ,
+
+
609 {
+
610 Text = message,
+
611 },
+
612 cancellationToken);
+
613 }
+
ValueTask SendMessage(IEnumerable< ulong > channelIds, Message? replyTo, MessageContent message, CancellationToken cancellationToken)
Asynchronously send a given message to a set of channelIds .
Represents a message to send to a chat provider.
@@ -1100,11 +1101,11 @@ Here is the caller graph for this function:
Aggregate all IProvider.InitialConnectionJob s into one <sse cref="Task">.
Returns A Task representing the running operation.
-Definition at line 1056 of file ChatManager.cs .
- 1057 {
-
1058 await Task.WhenAll(
providers .Select(x => x.Value.InitialConnectionJob));
-
1059 logger .LogTrace(
"Initial provider connection task completed" );
-
1060 }
+
Definition at line 1058 of file ChatManager.cs .
+
1059 {
+
1060 await Task.WhenAll(
providers .Select(x => x.Value.InitialConnectionJob));
+
1061 logger .LogTrace(
"Initial provider connection task completed" );
+
1062 }
@@ -1141,92 +1142,92 @@ Here is the caller graph for this function:
Returns A Task representing the running operation.
-Definition at line 931 of file ChatManager.cs .
- 932 {
-
933 logger .LogTrace(
"Starting processing loop..." );
-
934 var messageTasks = new Dictionary<IProvider, Task<Message?>>();
-
935 ValueTask activeProcessingTask = ValueTask.CompletedTask;
-
936 try
-
937 {
-
938 Task? updatedTask = null ;
-
939 while (!cancellationToken.IsCancellationRequested)
-
940 {
-
941 if (updatedTask?.IsCompleted != false )
-
-
-
944
-
945
-
946 foreach (var disposedProviderMessageTaskKvp in messageTasks.Where(x => x.Key.Disposed).ToList())
-
947 messageTasks.Remove(disposedProviderMessageTaskKvp.Key);
-
948
-
949
-
-
-
952 if (!messageTasks.ContainsKey(providerKvp.Value))
-
953 messageTasks.Add(
-
954 providerKvp.Value,
-
955 providerKvp.Value.NextMessage(cancellationToken));
-
956
-
957 if (messageTasks.Count == 0)
-
958 {
-
959 logger .LogTrace(
"No providers active, pausing messsage monitoring..." );
-
960 await updatedTask.WaitAsync(cancellationToken);
-
961 logger .LogTrace(
"Resuming message monitoring..." );
-
962 continue ;
-
963 }
-
964
-
965
-
966 await Task.WhenAny(updatedTask, Task.WhenAny(messageTasks.Select(x => x.Value)));
-
967
-
968
-
969 foreach (var completedMessageTaskKvp in messageTasks.Where(x => x.Value.IsCompleted).ToList())
-
970 {
-
971 var provider = completedMessageTaskKvp.Key;
-
972 messageTasks.Remove(provider);
-
973
-
974 if (provider.Disposed)
-
975 continue ;
-
976
-
977 var message = await completedMessageTaskKvp.Value;
-
-
979
-
980 async ValueTask WrapProcessMessage()
-
981 {
-
982 var localActiveProcessingTask = activeProcessingTask;
-
-
984 try
-
985 {
-
986 await
ProcessMessage (provider, message,
false , cancellationToken);
-
987 }
-
-
989 {
-
990 logger .LogError(ex,
"Error processing message {messageNumber}!" , messageNumber);
-
991 }
-
992
-
993 await localActiveProcessingTask;
-
994 }
-
995
-
996 activeProcessingTask = WrapProcessMessage();
-
997 }
-
998 }
-
999 }
-
1000 catch (OperationCanceledException ex)
-
1001 {
-
1002 logger .LogTrace(ex,
"Message processing loop cancelled!" );
-
1003 }
-
-
1005 {
-
1006 logger .LogError(e,
"Message loop crashed!" );
-
1007 }
-
1008 finally
-
1009 {
-
1010 await activeProcessingTask;
-
1011 }
-
1012
-
1013 logger .LogTrace(
"Leaving message processing loop" );
-
1014 }
+
Definition at line 933 of file ChatManager.cs .
+
934 {
+
935 logger .LogTrace(
"Starting processing loop..." );
+
936 var messageTasks = new Dictionary<IProvider, Task<Message?>>();
+
937 ValueTask activeProcessingTask = ValueTask.CompletedTask;
+
938 try
+
939 {
+
940 Task? updatedTask = null ;
+
941 while (!cancellationToken.IsCancellationRequested)
+
942 {
+
943 if (updatedTask?.IsCompleted != false )
+
+
+
946
+
947
+
948 foreach (var disposedProviderMessageTaskKvp in messageTasks.Where(x => x.Key.Disposed).ToList())
+
949 messageTasks.Remove(disposedProviderMessageTaskKvp.Key);
+
950
+
951
+
+
+
954 if (!messageTasks.ContainsKey(providerKvp.Value))
+
955 messageTasks.Add(
+
956 providerKvp.Value,
+
957 providerKvp.Value.NextMessage(cancellationToken));
+
958
+
959 if (messageTasks.Count == 0)
+
960 {
+
961 logger .LogTrace(
"No providers active, pausing messsage monitoring..." );
+
962 await updatedTask.WaitAsync(cancellationToken);
+
963 logger .LogTrace(
"Resuming message monitoring..." );
+
964 continue ;
+
965 }
+
966
+
967
+
968 await Task.WhenAny(updatedTask, Task.WhenAny(messageTasks.Select(x => x.Value)));
+
969
+
970
+
971 foreach (var completedMessageTaskKvp in messageTasks.Where(x => x.Value.IsCompleted).ToList())
+
972 {
+
973 var provider = completedMessageTaskKvp.Key;
+
974 messageTasks.Remove(provider);
+
975
+
976 if (provider.Disposed)
+
977 continue ;
+
978
+
979 var message = await completedMessageTaskKvp.Value;
+
+
981
+
982 async ValueTask WrapProcessMessage()
+
983 {
+
984 var localActiveProcessingTask = activeProcessingTask;
+
+
986 try
+
987 {
+
988 await
ProcessMessage (provider, message,
false , cancellationToken);
+
989 }
+
+
991 {
+
992 logger .LogError(ex,
"Error processing message {messageNumber}!" , messageNumber);
+
993 }
+
994
+
995 await localActiveProcessingTask;
+
996 }
+
997
+
998 activeProcessingTask = WrapProcessMessage();
+
999 }
+
1000 }
+
1001 }
+
1002 catch (OperationCanceledException ex)
+
1003 {
+
1004 logger .LogTrace(ex,
"Message processing loop cancelled!" );
+
1005 }
+
+
1007 {
+
1008 logger .LogError(e,
"Message loop crashed!" );
+
1009 }
+
1010 finally
+
1011 {
+
1012 await activeProcessingTask;
+
1013 }
+
1014
+
1015 logger .LogTrace(
"Leaving message processing loop" );
+
1016 }
long messagesProcessed
The number of Messages processed.
-
async ValueTask ProcessMessage(IProvider provider, Message? message, bool recursed, CancellationToken cancellationToken)
Processes a message .
+
async ValueTask ProcessMessage(IProvider provider, Message? message, bool recursed, CancellationToken cancellationToken)
Processes a message .
Helpers for manipulating the Serilog.Context.LogContext.
const string ChatMessageIterationContextProperty
The Serilog.Context.LogContext property name for the ID of the chat message currently being processed...
@@ -1292,246 +1293,246 @@ Here is the caller graph for this function:
Returns A ValueTask representing the running operation.
-Definition at line 686 of file ChatManager.cs .
- 688 {
-
-
690 {
-
691 logger .LogTrace(
"Abort message processing because provider is disconnected!" );
-
692 return ;
-
693 }
-
694
-
695
-
696 if (message == null )
-
697 {
-
-
699 return ;
-
700 }
-
701
-
702
-
703 var providerChannelId = message.User.Channel.RealId;
-
704 KeyValuePair<ulong, ChannelMapping>? mappedChannel;
-
705 long providerId;
-
706 bool hasChannelZero;
-
-
708 {
-
709
-
710 cancellationToken.ThrowIfCancellationRequested();
-
711
-
-
713 .Where(x => x.Value == provider)
-
714 .Select(x => (long ?)x.Key)
-
715 .FirstOrDefault();
-
716
-
717 if (!providerIdNullable.HasValue)
-
718 {
-
719
-
720 logger .LogDebug(
"Unable to process command \"{command}\" due to provider disconnecting" , message.Content);
-
721 return ;
-
722 }
-
723
-
724 providerId = providerIdNullable.Value;
-
-
726 .Where(x => x.Value.ProviderId == providerId && x.Value.ProviderChannelId == providerChannelId)
-
727 .Select(x => (KeyValuePair<ulong, ChannelMapping>?)x)
-
728 .FirstOrDefault();
-
-
730 .Where(x => x.Value.ProviderId == providerId && x.Value.ProviderChannelId == 0)
-
731 .Any();
-
732 }
-
733
-
734 if (!recursed && !mappedChannel.HasValue && !message.User.Channel.IsPrivateChannel && hasChannelZero)
-
735 {
-
736 logger .LogInformation(
"Receieved message from unmapped channel whose provider contains ID 0. Remapping..." );
-
-
738 logger .LogTrace(
"Resume processing original message..." );
-
-
740 return ;
-
741 }
-
742
-
-
744 new List<ulong>
-
745 {
-
746 message.User.Channel.RealId,
-
747 },
-
748 message,
-
-
750 {
-
751 Text = reply,
-
752 },
-
753 cancellationToken);
-
754
-
755 if (message.User.Channel.IsPrivateChannel)
-
-
757 if (!mappedChannel.HasValue)
-
758 {
-
759 ulong newId;
-
-
-
-
763 "Mapping private channel {connectionName}:{channelFriendlyName} as {newId}" ,
-
764 message.User.Channel.ConnectionName,
-
765 message.User.FriendlyName,
-
766 newId);
-
767 mappedChannels .Add(newId,
new ChannelMapping(message.User.Channel)
-
768 {
-
769 ProviderChannelId = message.User.Channel.RealId,
-
770 ProviderId = providerId,
-
771 });
-
772
-
-
774 "Mapping DM {connectionName}:{userId} ({userFriendlyName}) as {newId}" ,
-
775 message.User.Channel.ConnectionName,
-
776 message.User.RealId,
-
777 message.User.FriendlyName,
-
778 newId);
-
779 message.User.Channel.RealId = newId;
-
780 }
-
781 else
-
782 message.User.Channel.RealId = mappedChannel.Value.Key;
-
783 else
-
784 {
-
785 if (!mappedChannel.HasValue)
-
786 {
-
-
788 "Error mapping message: Provider ID: {providerId}, Channel Real ID: {realId}" ,
-
789 providerId,
-
790 message.User.Channel.RealId);
-
791 logger .LogTrace(
"message: {messageJson}" , JsonConvert.SerializeObject(message));
-
-
793 logger .LogTrace(
"mappedChannels: {mappedChannelsJson}" , JsonConvert.SerializeObject(
mappedChannels ));
-
794 await TextReply("TGS: Processing error, check logs!" );
-
795 return ;
-
796 }
-
797
-
798 var mappingChannelRepresentation = mappedChannel.Value.Value.Channel;
+
Definition at line 688 of file ChatManager.cs .
+
690 {
+
+
692 {
+
693 logger .LogTrace(
"Abort message processing because provider is disconnected!" );
+
694 return ;
+
695 }
+
696
+
697
+
698 if (message == null )
+
699 {
+
+
701 return ;
+
702 }
+
703
+
704
+
705 var providerChannelId = message.User.Channel.RealId;
+
706 KeyValuePair<ulong, ChannelMapping>? mappedChannel;
+
707 long providerId;
+
708 bool hasChannelZero;
+
+
710 {
+
711
+
712 cancellationToken.ThrowIfCancellationRequested();
+
713
+
+
715 .Where(x => x.Value == provider)
+
716 .Select(x => (long ?)x.Key)
+
717 .FirstOrDefault();
+
718
+
719 if (!providerIdNullable.HasValue)
+
720 {
+
721
+
722 logger .LogDebug(
"Unable to process command \"{command}\" due to provider disconnecting" , message.Content);
+
723 return ;
+
724 }
+
725
+
726 providerId = providerIdNullable.Value;
+
+
728 .Where(x => x.Value.ProviderId == providerId && x.Value.ProviderChannelId == providerChannelId)
+
729 .Select(x => (KeyValuePair<ulong, ChannelMapping>?)x)
+
730 .FirstOrDefault();
+
+
732 .Where(x => x.Value.ProviderId == providerId && x.Value.ProviderChannelId == 0)
+
733 .Any();
+
734 }
+
735
+
736 if (!recursed && !mappedChannel.HasValue && !message.User.Channel.IsPrivateChannel && hasChannelZero)
+
737 {
+
738 logger .LogInformation(
"Receieved message from unmapped channel whose provider contains ID 0. Remapping..." );
+
+
740 logger .LogTrace(
"Resume processing original message..." );
+
+
742 return ;
+
743 }
+
744
+
+
746 new List<ulong>
+
747 {
+
748 message.User.Channel.RealId,
+
749 },
+
750 message,
+
+
752 {
+
753 Text = reply,
+
754 },
+
755 cancellationToken);
+
756
+
757 if (message.User.Channel.IsPrivateChannel)
+
+
759 if (!mappedChannel.HasValue)
+
760 {
+
761 ulong newId;
+
+
+
+
765 "Mapping private channel {connectionName}:{channelFriendlyName} as {newId}" ,
+
766 message.User.Channel.ConnectionName,
+
767 message.User.FriendlyName,
+
768 newId);
+
769 mappedChannels .Add(newId,
new ChannelMapping(message.User.Channel)
+
770 {
+
771 ProviderChannelId = message.User.Channel.RealId,
+
772 ProviderId = providerId,
+
773 });
+
774
+
+
776 "Mapping DM {connectionName}:{userId} ({userFriendlyName}) as {newId}" ,
+
777 message.User.Channel.ConnectionName,
+
778 message.User.RealId,
+
779 message.User.FriendlyName,
+
780 newId);
+
781 message.User.Channel.RealId = newId;
+
782 }
+
783 else
+
784 message.User.Channel.RealId = mappedChannel.Value.Key;
+
785 else
+
786 {
+
787 if (!mappedChannel.HasValue)
+
788 {
+
+
790 "Error mapping message: Provider ID: {providerId}, Channel Real ID: {realId}" ,
+
791 providerId,
+
792 message.User.Channel.RealId);
+
793 logger .LogTrace(
"message: {messageJson}" , JsonConvert.SerializeObject(message));
+
+
795 logger .LogTrace(
"mappedChannels: {mappedChannelsJson}" , JsonConvert.SerializeObject(
mappedChannels ));
+
796 await TextReply("TGS: Processing error, check logs!" );
+
797 return ;
+
798 }
799
-
800 message.User.Channel.RealId = mappingChannelRepresentation.RealId;
-
801 message.User.Channel.Tag = mappingChannelRepresentation.Tag;
-
802 message.User.Channel.IsAdminChannel = mappingChannelRepresentation.IsAdminChannel;
-
803 }
-
804
-
805 var trimmedMessage = message.Content.Trim();
-
806 if (trimmedMessage.Length == 0)
-
807 return ;
-
808
-
809 var splits = new List<string>(trimmedMessage.Split(' ' , StringSplitOptions.RemoveEmptyEntries));
-
810 var address = splits[0];
-
811 if (address.Length > 1 && (address.Last() == ':' || address.Last() == ',' ))
-
812 address = address[0..^1];
-
813
-
814 var addressed =
-
815 address.Equals(
CommonMention , StringComparison.OrdinalIgnoreCase)
-
816 || address.Equals(provider.
BotMention , StringComparison.OrdinalIgnoreCase);
-
817
-
818
-
819 if (!addressed && !message.User.Channel.IsPrivateChannel)
-
820 return ;
-
821
-
-
823 "Start processing command: {message}. User (True provider Id): {profiderId}" ,
-
824 message.Content,
-
825 JsonConvert.SerializeObject(message.User));
-
826 try
-
827 {
-
828 if (addressed)
-
829 splits.RemoveAt(0);
-
830
-
831 if (splits.Count == 0)
-
832 {
-
833
-
834 await TextReply("Hi!" );
-
835 return ;
-
836 }
-
837
-
838 var command = splits[0];
-
839 splits.RemoveAt(0);
-
840 var arguments = String.Join(" " , splits);
-
841
-
842 Tuple<ICommand, IChatTrackingContext?>? GetCommand(string command)
-
843 {
-
-
-
846 .Where(trackingContext => trackingContext.Active)
-
847 .SelectMany(trackingContext => trackingContext.CustomCommands.Select(customCommand => Tuple.Create<
ICommand , IChatTrackingContext?>(customCommand, trackingContext)))
-
848 .Where(tuple => tuple.Item1.Name.Equals(command, StringComparison.OrdinalIgnoreCase))
-
849 .FirstOrDefault();
-
850
-
851 return Tuple.Create<
ICommand , IChatTrackingContext?>(handler,
null );
-
852 }
-
853
-
854 const string UnknownCommandMessage = "TGS: Unknown command! Type '?' or 'help' for available commands." ;
+
800 var mappingChannelRepresentation = mappedChannel.Value.Value.Channel;
+
801
+
802 message.User.Channel.RealId = mappingChannelRepresentation.RealId;
+
803 message.User.Channel.Tag = mappingChannelRepresentation.Tag;
+
804 message.User.Channel.IsAdminChannel = mappingChannelRepresentation.IsAdminChannel;
+
805 }
+
806
+
807 var trimmedMessage = message.Content.Trim();
+
808 if (trimmedMessage.Length == 0)
+
809 return ;
+
810
+
811 var splits = new List<string>(trimmedMessage.Split(' ' , StringSplitOptions.RemoveEmptyEntries));
+
812 var address = splits[0];
+
813 if (address.Length > 1 && (address.Last() == ':' || address.Last() == ',' ))
+
814 address = address[0..^1];
+
815
+
816 var addressed =
+
817 address.Equals(
CommonMention , StringComparison.OrdinalIgnoreCase)
+
818 || address.Equals(provider.
BotMention , StringComparison.OrdinalIgnoreCase);
+
819
+
820
+
821 if (!addressed && !message.User.Channel.IsPrivateChannel)
+
822 return ;
+
823
+
+
825 "Start processing command: {message}. User (True provider Id): {profiderId}" ,
+
826 message.Content,
+
827 JsonConvert.SerializeObject(message.User));
+
828 try
+
829 {
+
830 if (addressed)
+
831 splits.RemoveAt(0);
+
832
+
833 if (splits.Count == 0)
+
834 {
+
835
+
836 await TextReply("Hi!" );
+
837 return ;
+
838 }
+
839
+
840 var command = splits[0];
+
841 splits.RemoveAt(0);
+
842 var arguments = String.Join(" " , splits);
+
843
+
844 Tuple<ICommand, IChatTrackingContext?>? GetCommand(string command)
+
845 {
+
+
+
848 .Where(trackingContext => trackingContext.Active)
+
849 .SelectMany(trackingContext => trackingContext.CustomCommands.Select(customCommand => Tuple.Create<
ICommand , IChatTrackingContext?>(customCommand, trackingContext)))
+
850 .Where(tuple => tuple.Item1.Name.Equals(command, StringComparison.OrdinalIgnoreCase))
+
851 .FirstOrDefault();
+
852
+
853 return Tuple.Create<
ICommand , IChatTrackingContext?>(handler,
null );
+
854 }
855
-
856 if (command.Equals("help" , StringComparison.OrdinalIgnoreCase) || command == "?" )
-
857 {
-
858 string helpText;
-
859 if (splits.Count == 0)
-
860 {
-
-
862 allCommands.AddRange(
-
-
864 .SelectMany(
-
865 x => x.CustomCommands));
-
866 helpText = String.Format(CultureInfo.InvariantCulture, "Available commands (Type '?' or 'help' and then a command name for more details): {0}" , String.Join(", " , allCommands.Select(x => x.Name)));
-
867 }
-
868 else
-
869 {
-
870 var helpTuple = GetCommand(splits[0]);
-
871 if (helpTuple != default )
-
872 {
-
873 var (helpHandler, _) = helpTuple;
-
874 helpText = String.Format(CultureInfo.InvariantCulture, "{0}: {1}{2}" , helpHandler.Name, helpHandler.HelpText, helpHandler.AdminOnly ? " - May only be used in admin channels" : String.Empty);
-
875 }
-
876 else
-
877 helpText = UnknownCommandMessage;
-
878 }
-
879
-
880 await TextReply(helpText);
-
881 return ;
-
882 }
-
883
-
884 var tuple = GetCommand(command);
+
856 const string UnknownCommandMessage = "TGS: Unknown command! Type '?' or 'help' for available commands." ;
+
857
+
858 if (command.Equals("help" , StringComparison.OrdinalIgnoreCase) || command == "?" )
+
859 {
+
860 string helpText;
+
861 if (splits.Count == 0)
+
862 {
+
+
864 allCommands.AddRange(
+
+
866 .SelectMany(
+
867 x => x.CustomCommands));
+
868 helpText = String.Format(CultureInfo.InvariantCulture, "Available commands (Type '?' or 'help' and then a command name for more details): {0}" , String.Join(", " , allCommands.Select(x => x.Name)));
+
869 }
+
870 else
+
871 {
+
872 var helpTuple = GetCommand(splits[0]);
+
873 if (helpTuple != default )
+
874 {
+
875 var (helpHandler, _) = helpTuple;
+
876 helpText = String.Format(CultureInfo.InvariantCulture, "{0}: {1}{2}" , helpHandler.Name, helpHandler.HelpText, helpHandler.AdminOnly ? " - May only be used in admin channels" : String.Empty);
+
877 }
+
878 else
+
879 helpText = UnknownCommandMessage;
+
880 }
+
881
+
882 await TextReply(helpText);
+
883 return ;
+
884 }
885
-
886 if (tuple == default )
-
887 {
-
888 await TextReply(UnknownCommandMessage);
-
889 return ;
-
890 }
-
891
-
892 var (commandHandler, trackingContext) = tuple;
+
886 var tuple = GetCommand(command);
+
887
+
888 if (tuple == default )
+
889 {
+
890 await TextReply(UnknownCommandMessage);
+
891 return ;
+
892 }
893
-
894 if (trackingContext?.Active == false )
-
895 {
-
896 await TextReply("TGS: The server is rebooting, please try again later" );
-
897 return ;
-
898 }
-
899
-
900 if (commandHandler.AdminOnly && !message.User.Channel.IsAdminChannel)
-
901 {
-
902 await TextReply("TGS: Use this command in an admin channel!" );
-
903 return ;
-
904 }
-
905
-
906 var result = await commandHandler.Invoke(arguments, message.User, cancellationToken);
-
907 if (result != null )
-
908 await
SendMessage (
new List<ulong> { message.User.Channel.RealId }, message, result, cancellationToken);
-
909 }
-
910 catch (OperationCanceledException ex)
-
911 {
-
912 logger .LogTrace(ex,
"Command processing canceled!" );
-
913 }
-
-
915 {
-
916
-
917 logger .LogError(e,
"Error processing chat command" );
-
918 await TextReply("TGS: Internal error processing command! Check server logs!" );
-
919 }
-
920 finally
-
921 {
-
922 logger .LogTrace(
"Done processing command." );
-
923 }
-
924 }
+
894 var (commandHandler, trackingContext) = tuple;
+
895
+
896 if (trackingContext?.Active == false )
+
897 {
+
898 await TextReply("TGS: The server is rebooting, please try again later" );
+
899 return ;
+
900 }
+
901
+
902 if (commandHandler.AdminOnly && !message.User.Channel.IsAdminChannel)
+
903 {
+
904 await TextReply("TGS: Use this command in an admin channel!" );
+
905 return ;
+
906 }
+
907
+
908 var result = await commandHandler.Invoke(arguments, message.User, cancellationToken);
+
909 if (result != null )
+
910 await
SendMessage (
new List<ulong> { message.User.Channel.RealId }, message, result, cancellationToken);
+
911 }
+
912 catch (OperationCanceledException ex)
+
913 {
+
914 logger .LogTrace(ex,
"Command processing canceled!" );
+
915 }
+
+
917 {
+
918
+
919 logger .LogError(e,
"Error processing chat command" );
+
920 await TextReply("TGS: Internal error processing command! Check server logs!" );
+
921 }
+
922 finally
+
923 {
+
924 logger .LogTrace(
"Done processing command." );
+
925 }
+
926 }
const string CommonMention
The common bot mention.
-
async ValueTask RemapProvider(IProvider provider, CancellationToken cancellationToken)
Remap the channels for a given provider .
+
async ValueTask RemapProvider(IProvider provider, CancellationToken cancellationToken)
Remap the channels for a given provider .
Represents a command that can be invoked by talking to chat bots.
string BotMention
The string that indicates the IProvider was mentioned.
bool Connected
If the IProvider is currently connected.
@@ -1540,8 +1541,8 @@ Here is the caller graph for this function:
-
-◆ QueueDeploymentMessage()
+
+◆ QueueDeploymentMessage()
+
+
+
+ Models::RevisionInformation ?
+ previousRevisionInformation ,
+
@@ -1593,6 +1600,7 @@ Here is the caller graph for this function:
Send the message for a deployment to configured deployment channels.
Parameters
revisionInformation The RevisionInformation of the deployment.
+ previousRevisionInformation The optional RevisionInformation of the previous deployment.
engineVersion The Api.Models.EngineVersion of the deployment.
estimatedCompletionTime The optional DateTimeOffset the deployment is expected to be completed at.
gitHubOwner The repository GitHub owner, if any.
@@ -1604,96 +1612,97 @@ Here is the caller graph for this function:
Returns A Func<T1, T2, TResult> to call to update the message at the deployment's conclusion. Parameters: Error message if any, DreamMaker output if any. Returns an Action to call to mark the deployment as active/inactive. Parameter: If the deployment is being activated or inactivated.
-Implements Tgstation.Server.Host.Components.Chat.IChatManager .
+Implements Tgstation.Server.Host.Components.Chat.IChatManager .
Definition at line 378 of file ChatManager.cs .
- 385 {
-
386 List<ulong> wdChannels;
-
-
388 wdChannels =
mappedChannels .Where(x => x.Value.IsUpdatesChannel).Select(x => x.Key).ToList();
-
389
-
390 logger .LogTrace(
"Sending deployment message for RevisionInformation: {revisionInfoId}" , revisionInformation.Id);
-
391
-
392 var callbacks = new List<Func<string?, string, ValueTask<Func<bool, ValueTask>>>>();
-
393
-
394 var task = Task.WhenAll(
-
395 wdChannels.Select(
-
396 async x =>
-
397 {
-
398 ChannelMapping? channelMapping;
-
399 lock (mappedChannels)
-
400 if (!mappedChannels.TryGetValue(x, out channelMapping))
-
401 return;
-
402 IProvider? provider;
-
403 lock (providers)
-
404 if (!providers.TryGetValue(channelMapping.ProviderId, out provider))
-
405 return;
-
406 try
-
407 {
-
408 var callback = await provider.SendUpdateMessage(
-
409 revisionInformation,
-
410 engineVersion,
-
411 estimatedCompletionTime,
-
412 gitHubOwner,
-
413 gitHubRepo,
-
414 channelMapping.ProviderChannelId,
-
415 localCommitPushed,
-
416 handlerCts.Token);
-
417
-
418 lock (callbacks)
-
419 callbacks.Add(callback);
-
420 }
-
-
422 {
-
-
424 ex,
-
425 "Error sending deploy message to provider {providerId}!" ,
-
426 channelMapping.ProviderId);
-
427 }
-
428 }));
-
429
-
+
386 {
+
387 List<ulong> wdChannels;
+
+
389 wdChannels =
mappedChannels .Where(x => x.Value.IsUpdatesChannel).Select(x => x.Key).ToList();
+
390
+
391 logger .LogTrace(
"Sending deployment message for RevisionInformation: {revisionInfoId}" , revisionInformation.Id);
+
392
+
393 var callbacks = new List<Func<string?, string, ValueTask<Func<bool, ValueTask>>>>();
+
394
+
395 var task = Task.WhenAll(
+
396 wdChannels.Select(
+
397 async x =>
+
398 {
+
399 ChannelMapping? channelMapping;
+
400 lock (mappedChannels)
+
401 if (!mappedChannels.TryGetValue(x, out channelMapping))
+
402 return;
+
403 IProvider? provider;
+
404 lock (providers)
+
405 if (!providers.TryGetValue(channelMapping.ProviderId, out provider))
+
406 return;
+
407 try
+
408 {
+
409 var callback = await provider.SendUpdateMessage(
+
410 revisionInformation,
+
411 previousRevisionInformation,
+
412 engineVersion,
+
413 estimatedCompletionTime,
+
414 gitHubOwner,
+
415 gitHubRepo,
+
416 channelMapping.ProviderChannelId,
+
417 localCommitPushed,
+
418 handlerCts.Token);
+
419
+
420 lock (callbacks)
+
421 callbacks.Add(callback);
+
422 }
+
+
424 {
+
+
426 ex,
+
427 "Error sending deploy message to provider {providerId}!" ,
+
428 channelMapping.ProviderId);
+
429 }
+
430 }));
431
-
432 Task callbackTask;
-
433 Func<bool, Task>? finalUpdateAction = null ;
-
434 async Task CallbackTask(string ? errorMessage, string dreamMakerOutput)
-
435 {
-
436 await task;
-
-
438 callbacks.Select(
-
439 x => x(
-
440 errorMessage,
-
441 dreamMakerOutput)),
-
442 callbacks.Count);
-
443
-
444 finalUpdateAction = active =>
ValueTaskExtensions .
WhenAll (callbackResults.Select(finalizerCallback => finalizerCallback(active))).AsTask();
-
445 }
-
446
-
447 async Task CompletionTask(bool active)
-
448 {
-
449 try
-
450 {
-
451 await callbackTask;
-
452 }
-
453 catch
-
454 {
-
455
-
456 return ;
-
457 }
-
458
-
-
460 }
-
461
-
462 return (errorMessage, dreamMakerOutput) =>
-
463 {
-
464 callbackTask = CallbackTask(errorMessage, dreamMakerOutput);
-
-
-
467 };
-
468 }
+
+
433
+
434 Task callbackTask;
+
435 Func<bool, Task>? finalUpdateAction = null ;
+
436 async Task CallbackTask(string ? errorMessage, string dreamMakerOutput)
+
437 {
+
438 await task;
+
+
440 callbacks.Select(
+
441 x => x(
+
442 errorMessage,
+
443 dreamMakerOutput)),
+
444 callbacks.Count);
+
445
+
446 finalUpdateAction = active =>
ValueTaskExtensions .
WhenAll (callbackResults.Select(finalizerCallback => finalizerCallback(active))).AsTask();
+
447 }
+
448
+
449 async Task CompletionTask(bool active)
+
450 {
+
451 try
+
452 {
+
453 await callbackTask;
+
454 }
+
455 catch
+
456 {
+
457
+
458 return ;
+
459 }
+
460
+
+
462 }
+
463
+
464 return (errorMessage, dreamMakerOutput) =>
+
465 {
+
466 callbackTask = CallbackTask(errorMessage, dreamMakerOutput);
+
+
+
469 };
+
470 }
Extension methods for the ValueTask and ValueTask<TResult> classes.
static async ValueTask WhenAll(IEnumerable< ValueTask > tasks)
Fully await a given list of tasks .
-
void AddMessageTask(Task task)
Adds a given task to messageSendTask.
+
void AddMessageTask(Task task)
Adds a given task to messageSendTask.
References Tgstation.Server.Host.Components.Chat.ChatManager.logger , and Tgstation.Server.Host.Components.Chat.ChatManager.mappedChannels .
@@ -1743,9 +1752,9 @@ Here is the caller graph for this function:
348
350 }
-void QueueMessageInternal(MessageContent message, Func< IEnumerable< ulong > > channelIdsFactory, bool waitForConnections)
Adds a given message to the send queue.
+void QueueMessageInternal(MessageContent message, Func< IEnumerable< ulong > > channelIdsFactory, bool waitForConnections)
Adds a given message to the send queue.
-References Tgstation.Server.Host.Components.Chat.ChatManager.QueueMessageInternal() .
+References Tgstation.Server.Host.Components.Chat.ChatManager.QueueMessageInternal() .
@@ -1809,23 +1818,23 @@ Here is the call graph for this function:
-Definition at line 1095 of file ChatManager.cs .
-
-References Tgstation.Server.Host.Components.Chat.ChatManager.initialProviderConnectionsTask , Tgstation.Server.Host.Components.Chat.ChatManager.logger , Tgstation.Server.Host.Components.Chat.ChatManager.mappedChannels , and Tgstation.Server.Host.Components.Chat.ChatManager.QueueMessageInternal() .
+References Tgstation.Server.Host.Components.Chat.ChatManager.initialProviderConnectionsTask , Tgstation.Server.Host.Components.Chat.ChatManager.logger , Tgstation.Server.Host.Components.Chat.ChatManager.mappedChannels , and Tgstation.Server.Host.Components.Chat.ChatManager.QueueMessageInternal() .
@@ -1933,12 +1942,12 @@ Here is the call graph for this function:
Implements Tgstation.Server.Host.Components.Chat.IChatManager .
-Definition at line 548 of file ChatManager.cs .
- 549 {
-
-
551 throw new InvalidOperationException("RegisterCommandHandler() already called!" );
-
-
553 }
+
Definition at line 550 of file ChatManager.cs .
+
551 {
+
+
553 throw new InvalidOperationException("RegisterCommandHandler() already called!" );
+
+
555 }
@@ -1986,20 +1995,20 @@ Here is the call graph for this function:
Returns A ValueTask representing the running operation.
-Definition at line 662 of file ChatManager.cs .
- 663 {
-
664 logger .LogTrace(
"Remapping channels for provider reconnection..." );
-
665 IEnumerable<Models.ChatChannel>? channelsToMap;
-
666 long providerId;
-
-
668 providerId =
providers .Where(x => x.Value == provider).Select(x => x.Key).First();
-
669
-
-
671 channelsToMap =
activeChatBots .FirstOrDefault(x => x.Id == providerId)?.Channels;
-
672
-
673 if (channelsToMap?.Any() ?? false )
-
674 await
ChangeChannels (providerId, channelsToMap, cancellationToken);
-
675 }
+
Definition at line 664 of file ChatManager.cs .
+
665 {
+
666 logger .LogTrace(
"Remapping channels for provider reconnection..." );
+
667 IEnumerable<Models.ChatChannel>? channelsToMap;
+
668 long providerId;
+
+
670 providerId =
providers .Where(x => x.Value == provider).Select(x => x.Key).First();
+
671
+
+
673 channelsToMap =
activeChatBots .FirstOrDefault(x => x.Id == providerId)?.Channels;
+
674
+
675 if (channelsToMap?.Any() ?? false )
+
676 await
ChangeChannels (providerId, channelsToMap, cancellationToken);
+
677 }
async ValueTask ChangeChannels(long connectionId, IEnumerable< Models.ChatChannel > newChannels, CancellationToken cancellationToken)
@@ -2055,41 +2064,41 @@ Here is the call graph for this function:
Returns A ValueTask<TResult> resulting in the IProvider being removed if it exists, null otherwise.
-Definition at line 620 of file ChatManager.cs .
- 621 {
-
622 logger .LogTrace(
"RemoveProviderChannels {connectionId}..." , connectionId);
-
-
-
625 {
-
626 if (!
providers .TryGetValue(connectionId, out provider))
-
627 {
-
628 logger .LogTrace(
"Aborted, no such provider!" );
-
629 return null ;
-
630 }
-
631
-
632 if (removeProvider)
-
-
634 }
-
635
-
636 ValueTask trackingContextsUpdateTask;
-
-
638 {
-
639 foreach (var mappedConnectionChannel
in mappedChannels .Where(x => x.Value.ProviderId == connectionId).Select(x => x.Key).ToList())
-
-
641
-
642 var newMappedChannels =
mappedChannels .Select(y => y.Value.Channel).ToList();
+
Definition at line 622 of file ChatManager.cs .
+
623 {
+
624 logger .LogTrace(
"RemoveProviderChannels {connectionId}..." , connectionId);
+
+
+
627 {
+
628 if (!
providers .TryGetValue(connectionId, out provider))
+
629 {
+
630 logger .LogTrace(
"Aborted, no such provider!" );
+
631 return null ;
+
632 }
+
633
+
634 if (removeProvider)
+
+
636 }
+
637
+
638 ValueTask trackingContextsUpdateTask;
+
+
640 {
+
641 foreach (var mappedConnectionChannel
in mappedChannels .Where(x => x.Value.ProviderId == connectionId).Select(x => x.Key).ToList())
+
643
-
644 if (removeProvider)
-
-
-
647 else
-
648 trackingContextsUpdateTask = ValueTask.CompletedTask;
-
649 }
-
650
-
651 await trackingContextsUpdateTask;
+
644 var newMappedChannels =
mappedChannels .Select(y => y.Value.Channel).ToList();
+
645
+
646 if (removeProvider)
+
+
+
649 else
+
650 trackingContextsUpdateTask = ValueTask.CompletedTask;
+
651 }
652
-
653 return provider;
-
654 }
+
653 await trackingContextsUpdateTask;
+
654
+
655 return provider;
+
656 }
References Tgstation.Server.Common.Extensions.ValueTaskExtensions.WhenAll() .
@@ -2175,33 +2184,33 @@ Here is the caller graph for this function:
Returns A Task representing the running operation.
-Definition at line 1024 of file ChatManager.cs .
- 1025 {
-
1026 var channelIdsList = channelIds.ToList();
-
1027
-
-
1029 "Chat send \"{message}\"{embed} to channels: [{channelIdsCommaSeperated}]" ,
-
-
1031 message.
Embed !=
null ?
" (with embed)" : String.Empty,
-
1032 String.Join(", " , channelIdsList));
-
1033
-
1034 if (channelIdsList.Count == 0)
-
1035 return ValueTask.CompletedTask;
-
1036
-
-
1038 channelIdsList.Select(x =>
-
1039 {
-
1040 ChannelMapping? channelMapping;
-
1041 lock (mappedChannels)
-
1042 if (!mappedChannels.TryGetValue(x, out channelMapping))
-
1043 return ValueTask.CompletedTask;
-
1044 IProvider? provider;
-
1045 lock (providers)
-
1046 if (!providers.TryGetValue(channelMapping.ProviderId, out provider))
-
1047 return ValueTask.CompletedTask;
-
1048 return provider.SendMessage(replyTo, message, channelMapping.ProviderChannelId, cancellationToken);
-
1049 }));
-
1050 }
+
Definition at line 1026 of file ChatManager.cs .
+
1027 {
+
1028 var channelIdsList = channelIds.ToList();
+
1029
+
+
1031 "Chat send \"{message}\"{embed} to channels: [{channelIdsCommaSeperated}]" ,
+
+
1033 message.
Embed !=
null ?
" (with embed)" : String.Empty,
+
1034 String.Join(", " , channelIdsList));
+
1035
+
1036 if (channelIdsList.Count == 0)
+
1037 return ValueTask.CompletedTask;
+
1038
+
+
1040 channelIdsList.Select(x =>
+
1041 {
+
1042 ChannelMapping? channelMapping;
+
1043 lock (mappedChannels)
+
1044 if (!mappedChannels.TryGetValue(x, out channelMapping))
+
1045 return ValueTask.CompletedTask;
+
1046 IProvider? provider;
+
1047 lock (providers)
+
1048 if (!providers.TryGetValue(channelMapping.ProviderId, out provider))
+
1049 return ValueTask.CompletedTask;
+
1050 return provider.SendMessage(replyTo, message, channelMapping.ProviderChannelId, cancellationToken);
+
1051 }));
+
1052 }
ChatEmbed? Embed
The ChatEmbed.
string? Text
The message string.
@@ -2237,17 +2246,17 @@ Here is the call graph for this function:
-Definition at line 471 of file ChatManager.cs .
- 472 {
-
-
-
-
-
-
-
479 }
-
async Task InitialConnection()
Aggregate all IProvider.InitialConnectionJobs into one <sse cref="Task">.
-
async Task MonitorMessages(CancellationToken cancellationToken)
Monitors active providers for new Messages.
+
Definition at line 473 of file ChatManager.cs .
+
474 {
+
+
+
+
+
+
+
481 }
+
async Task InitialConnection()
Aggregate all IProvider.InitialConnectionJobs into one <sse cref="Task">.
+
async Task MonitorMessages(CancellationToken cancellationToken)
Monitors active providers for new Messages.
Task? chatHandler
The Task that monitors incoming chat messages.
async ValueTask ChangeSettings(Models.ChatBot newSettings, CancellationToken cancellationToken)
Change chat settings. If the Api.Models.EntityId.Id is not currently in use, a new connection will be...
IReadOnlyList< ICommand > GenerateCommands()
Generate builtin ICommands.
@@ -2284,14 +2293,14 @@ Here is the call graph for this function:
-
Definition at line 482 of file ChatManager.cs .
-
@@ -2322,36 +2331,36 @@ Here is the call graph for this function:
Implements Tgstation.Server.Host.Components.Chat.IChatManager .
-Definition at line 516 of file ChatManager.cs .
- 517 {
-
518 var logMessageSent = 0;
-
519 async Task UpdateTrackingContext(IChatTrackingContext channelSink, IEnumerable<ChannelRepresentation> channels)
-
520 {
-
521 if (Interlocked.Exchange(ref logMessageSent, 1) == 0)
-
522
-
523 await channelSink.UpdateChannels(channels, cancellationToken);
-
524 }
-
525
-
-
527 if (waitingForInitialConnection)
-
528 {
-
529 logger .LogTrace(
"Waiting for initial chat bot connections before updating tracking contexts..." );
-
-
531 }
-
532
-
533 List<Task> tasks;
-
-
-
-
537
-
538 if (waitingForInitialConnection)
-
539 if (tasks.Count > 0)
-
540 logger .LogTrace(
"Updating chat tracking contexts..." );
-
541 else
-
542 logger .LogTrace(
"No chat tracking contexts to update" );
-
543
-
544 await Task.WhenAll(tasks);
-
545 }
+
Definition at line 518 of file ChatManager.cs .
+
519 {
+
520 var logMessageSent = 0;
+
521 async Task UpdateTrackingContext(IChatTrackingContext channelSink, IEnumerable<ChannelRepresentation> channels)
+
522 {
+
523 if (Interlocked.Exchange(ref logMessageSent, 1) == 0)
+
524
+
525 await channelSink.UpdateChannels(channels, cancellationToken);
+
526 }
+
527
+
+
529 if (waitingForInitialConnection)
+
530 {
+
531 logger .LogTrace(
"Waiting for initial chat bot connections before updating tracking contexts..." );
+
+
533 }
+
534
+
535 List<Task> tasks;
+
+
+
+
539
+
540 if (waitingForInitialConnection)
+
541 if (tasks.Count > 0)
+
542 logger .LogTrace(
"Updating chat tracking contexts..." );
+
543 else
+
544 logger .LogTrace(
"No chat tracking contexts to update" );
+
545
+
546 await Task.WhenAll(tasks);
+
547 }
References Tgstation.Server.Host.Components.Chat.IChannelSink.UpdateChannels() .
@@ -2570,6 +2579,8 @@ Here is the caller graph for this function:
Definition at line 33 of file ChatManager.cs .
+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_chat_user.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_chat_user.html
index 25e78c67ad..b5d054bfca 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_chat_user.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_chat_user.html
@@ -208,7 +208,7 @@ Properties
Definition at line 41 of file ChatUser.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.ChatUser.ChatUser() , and Tgstation.Server.Host.Components.Chat.ChatManager.ProcessMessage() .
+Referenced by Tgstation.Server.Host.Components.Chat.ChatUser.ChatUser() , and Tgstation.Server.Host.Components.Chat.ChatManager.ProcessMessage() .
@@ -237,7 +237,7 @@ Properties
Definition at line 31 of file ChatUser.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.ChatUser.ChatUser() , and Tgstation.Server.Host.Components.Chat.ChatManager.ProcessMessage() .
+Referenced by Tgstation.Server.Host.Components.Chat.ChatUser.ChatUser() , and Tgstation.Server.Host.Components.Chat.ChatManager.ProcessMessage() .
@@ -327,7 +327,7 @@ Properties
25 private set =>
Id = value.ToString(CultureInfo.InvariantCulture);
26 }
-Referenced by Tgstation.Server.Host.Components.Chat.ChatUser.ChatUser() , and Tgstation.Server.Host.Components.Chat.ChatManager.ProcessMessage() .
+Referenced by Tgstation.Server.Host.Components.Chat.ChatUser.ChatUser() , and Tgstation.Server.Host.Components.Chat.ChatManager.ProcessMessage() .
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider-members.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider-members.html
new file mode 100644
index 0000000000..5360a6eda3
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider-members.html
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+tgstation-server: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tgstation-server 6.14.1
+
+ The /tg/station 13 server suite
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider , including all inherited members.
+
+ AddRange (updatedTestMerges .Select(x=> new EmbedField($"#{x.Number} (Updated)", $"[{x.TitleAtMerge}]({x.Url}) by _[@{x.Author}](https://github.com/{x.Author})_{Environment.NewLine}Commit: [{x.TargetCommitSha![..7]}](https://github.com/{gitHubOwner}/{gitHubRepo}/commit/{x.TargetCommitSha}){(String.IsNullOrWhiteSpace(x.Comment) ? String.Empty : $"{Environment.NewLine}_ **{x.Comment} **_")}", false)))Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ assemblyInformationProvider Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ AsyncDelayer Tgstation.Server.Host.Components.Chat.Providers.Provider protected
+ BotMention Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider
+ BuildUpdateEmbedFields (Models.RevisionInformation revisionInformation, Models.RevisionInformation? previousRevisionInformation, EngineVersion engineVersion, string? gitHubOwner, string? gitHubRepo, bool localCommitPushed)Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ ChatBot Tgstation.Server.Host.Components.Chat.Providers.Provider protected
+ Connect (CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider protected
+ connectDisconnectLock Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ Connected Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider
+ currentUserId Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ deploymentBranding Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ Disconnect (CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider
+ DisconnectImpl (CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider protected
+ DiscordProvider (IJobManager jobManager, IAsyncDelayer asyncDelayer, ILogger< DiscordProvider > logger, IAssemblyInformationProvider assemblyInformationProvider, ChatBot chatBot, GeneralConfiguration generalConfiguration)Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider
+ DisposeAsync ()Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider virtual
+ Disposed Tgstation.Server.Host.Components.Chat.Providers.Provider
+ disposing Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ EnqueueMessage (Message? message)Tgstation.Server.Host.Components.Chat.Providers.Provider protected
+ false Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ gatewayCts Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ gatewayReadyTcs Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ gatewayTask Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ generalConfiguration Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ GetAllAccessibleTextChannels (CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ GetEngineCompilerPrefix (Api.Models.EngineType engineType)Tgstation.Server.Host.Components.Chat.Providers.Provider protected static
+ InitialConnectionJob Tgstation.Server.Host.Components.Chat.Providers.Provider
+ initialConnectionTcs Tgstation.Server.Host.Components.Chat.Providers.Provider private
+ InitialMappingComplete ()Tgstation.Server.Host.Components.Chat.Providers.Provider
+ jobManager Tgstation.Server.Host.Components.Chat.Providers.Provider private
+ Logger Tgstation.Server.Host.Components.Chat.Providers.Provider protected
+ MapChannels (IEnumerable< ChatChannel > channels, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider
+ MapChannelsImpl (IEnumerable< Models.ChatChannel > channels, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider protected
+ Tgstation::Server::Host::Components::Chat::Providers::Provider.MapChannelsImpl (IEnumerable< ChatChannel > channels, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider protected
+ mappedChannels Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ messageQueue Tgstation.Server.Host.Components.Chat.Providers.Provider private
+ NextMessage (CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider
+ nextMessage Tgstation.Server.Host.Components.Chat.Providers.Provider private
+ NormalizeMentions (string fromDiscord)Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private static
+ outputDisplayType Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ Provider (IJobManager jobManager, IAsyncDelayer asyncDelayer, ILogger< Provider > logger, ChatBot chatBot)Tgstation.Server.Host.Components.Chat.Providers.Provider protected
+ reconnectCts Tgstation.Server.Host.Components.Chat.Providers.Provider private
+ ReconnectionLoop (uint reconnectInterval, bool connectNow, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider private
+ reconnectTask Tgstation.Server.Host.Components.Chat.Providers.Provider private
+ reconnectTaskLock Tgstation.Server.Host.Components.Chat.Providers.Provider private
+ RespondAsync (IMessageCreate messageCreateEvent, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider
+ RespondAsync (IReady readyEvent, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider
+ SendMessage (Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider
+ SendUpdateMessage (Models.RevisionInformation revisionInformation, Models.RevisionInformation? previousRevisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider
+ serviceProvider Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private
+ SetReconnectInterval (uint reconnectInterval, bool connectNow)Tgstation.Server.Host.Components.Chat.Providers.Provider
+ StopReconnectionTimer ()Tgstation.Server.Host.Components.Chat.Providers.Provider private
+ SupportedGuildChannelTypes Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider private static
+
+
+
+
+
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
new file mode 100644
index 0000000000..d5bc91cfad
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider.html
@@ -0,0 +1,2446 @@
+
+
+
+
+
+
+
+tgstation-server: Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ tgstation-server 6.14.1
+
+ The /tg/station 13 server suite
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+
+
+
+
+
+
+
IProvider for the Discord app.
+ More...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
[legend ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
[legend ]
+
+
+ DiscordProvider (IJobManager jobManager , IAsyncDelayer asyncDelayer, ILogger< DiscordProvider > logger, IAssemblyInformationProvider assemblyInformationProvider , ChatBot chatBot, GeneralConfiguration generalConfiguration )
+ Initializes a new instance of the DiscordProvider class.
+
+override async ValueTask DisposeAsync ()
+
+override async ValueTask SendMessage (Message ? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)
+ Send a message to the IProvider .Parameters
+
+ replyTo The optional Message to reply to.
+ message The MessageContent.
+ channelId The ChannelRepresentation.RealId to send to.
+ cancellationToken The CancellationToken for the operation.
+
+
+
+Returns A ValueTask representing the running operation.
+
+
+override async ValueTask< Func< string?, string, ValueTask< Func< bool, ValueTask > > > > SendUpdateMessage (Models.RevisionInformation revisionInformation, Models.RevisionInformation ? previousRevisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)
+ Send the message for a deployment.Parameters
+
+ revisionInformation The RevisionInformation of the deployment.
+ previousRevisionInformation The RevisionInformation of the previous deployment if any.
+ engineVersion The Api.Models.EngineVersion of the deployment.
+ estimatedCompletionTime The optional DateTimeOffset the deployment is expected to be completed at.
+ gitHubOwner The repository GitHub owner, if any.
+ gitHubRepo The repository GitHub name, if any.
+ channelId The ChannelRepresentation.RealId to send to.
+ localCommitPushed true if the local deployment commit was pushed to the remote repository.
+ cancellationToken The CancellationToken for the operation.
+
+
+
+Returns A ValueTask<TResult> resulting in a Func<T1, T2, TResult> to call to update the message at the deployment's conclusion. Parameters: Error message if any, DreamMaker output if any. Returns another callback which should be called to mark the deployment as active.
+
+
+async Task< Result > RespondAsync (IMessageCreate messageCreateEvent, CancellationToken cancellationToken)
+
+Task< Result > RespondAsync (IReady readyEvent, CancellationToken cancellationToken)
+
+
+async ValueTask Disconnect (CancellationToken cancellationToken)
+ Gracefully disconnects the provider. Permanently stops the reconnection timer.Parameters
+
+ cancellationToken The CancellationToken for the operation.
+
+
+
+Returns A ValueTask representing the running operation.
+
+
+void InitialMappingComplete ()
+ Indicate to the provider that at least one MapChannels(IEnumerable<ChatChannel>, CancellationToken) call has successfully completed.
+
+async ValueTask< Dictionary< ChatChannel , IEnumerable< ChannelRepresentation > > > MapChannels (IEnumerable< ChatChannel > channels, CancellationToken cancellationToken)
+ Get the ChannelRepresentation s for given channels .Parameters
+
+
+
+Returns A ValueTask<TResult> resulting in a Dictionary<TKey, TValue> of the ChatChannel's ChannelRepresentation s representing channels .
+
+
+async Task< Message ?> NextMessage (CancellationToken cancellationToken)
+ Get a Task<TResult> resulting in the next Message the IProvider receives or null on a disconnect.Parameters
+
+ cancellationToken The CancellationToken for the operation.
+
+
+
+Returns A Task<TResult> resulting in the next available Message or null if the IProvider needed to reconnect.
+Note that private messages will come in the form of ChannelRepresentation s not returned in MapChannels(IEnumerable<ChatChannel>, CancellationToken) .
+
+Task SetReconnectInterval (uint reconnectInterval, bool connectNow)
+ Set the interval at which the provider starts jobs to try to reconnect.Parameters
+
+ reconnectInterval The reconnection interval in minutes.
+ connectNow If a connection attempt should be made now.
+
+
+
+Returns A Task representing the running operation.
+
+
+ValueTask SendMessage (Message ? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)
+ Send a message to the IProvider .Parameters
+
+ replyTo The optional Message to reply to.
+ message The MessageContent.
+ channelId The ChannelRepresentation.RealId to send to.
+ cancellationToken The CancellationToken for the operation.
+
+
+
+Returns A ValueTask representing the running operation.
+
+
+ValueTask< Func< string?, string, ValueTask< Func< bool, ValueTask > > > > SendUpdateMessage (RevisionInformation revisionInformation, RevisionInformation ? previousRevisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)
+ Send the message for a deployment.Parameters
+
+ revisionInformation The RevisionInformation of the deployment.
+ previousRevisionInformation The RevisionInformation of the previous deployment if any.
+ engineVersion The Api.Models.EngineVersion of the deployment.
+ estimatedCompletionTime The optional DateTimeOffset the deployment is expected to be completed at.
+ gitHubOwner The repository GitHub owner, if any.
+ gitHubRepo The repository GitHub name, if any.
+ channelId The ChannelRepresentation.RealId to send to.
+ localCommitPushed true if the local deployment commit was pushed to the remote repository.
+ cancellationToken The CancellationToken for the operation.
+
+
+
+Returns A ValueTask<TResult> resulting in a Func<T1, T2, TResult> to call to update the message at the deployment's conclusion. Parameters: Error message if any, DreamMaker output if any. Returns another callback which should be called to mark the deployment as active.
+
+
+
+
+async ValueTask< IEnumerable< IChannel > > GetAllAccessibleTextChannels (CancellationToken cancellationToken)
+ Get all text IChannels accessible to and supported by the bot.
+
+List< IEmbedField > BuildUpdateEmbedFields (Models.RevisionInformation revisionInformation, Models.RevisionInformation ? previousRevisionInformation, EngineVersion engineVersion, string? gitHubOwner, string? gitHubRepo, bool localCommitPushed)
+ Create a List<T> of IEmbedFields for a discord update embed.
+
+fields. AddRange (updatedTestMerges .Select(x=> new EmbedField($"#{x.Number} (Updated)", $"[{x.TitleAtMerge}]({x.Url}) by _[@{x.Author}](https://github.com/{x.Author})_{Environment.NewLine}Commit: [{x.TargetCommitSha![..7]}](https://github.com/{gitHubOwner}/{gitHubRepo}/commit/{x.TargetCommitSha}){(String.IsNullOrWhiteSpace(x.Comment) ? String.Empty : $"{Environment.NewLine}_ **{x.Comment} **_")}", false)))
+
+
+
+static string NormalizeMentions (string fromDiscord)
+ Normalize a discord mention string.
+
+
+
+
IProvider for the Discord app.
+
+
Definition at line 42 of file DiscordProvider.cs .
+
+
+
◆ DiscordProvider()
+
+
+
+
+
Initializes a new instance of the DiscordProvider class.
+
Parameters
+
+ jobManager The IJobManager for the Provider.
+ asyncDelayer The IAsyncDelayer for the Provider.
+ logger The ILogger for the Provider.
+ assemblyInformationProvider The value of assemblyInformationProvider.
+ chatBot The ChatBot for the Provider.
+ generalConfiguration The value of generalConfiguration.
+
+
+
+
+
Definition at line 145 of file DiscordProvider.cs .
+
152 : base(
jobManager , asyncDelayer, logger, chatBot)
+
153 {
+
+
+
156
+
+
+
159
+
+
161 var botToken = csb.BotToken!;
+
+
+
164
+
+
+
167 .Configure<DiscordGatewayClientOptions>(options => options.Intents |= GatewayIntents.MessageContents)
+
+
169 .AddResponder<DiscordForwardingResponder>()
+
170 .BuildServiceProvider();
+
171 }
+
ChatConnectionStringBuilder for ChatProvider.Discord.
+
string? ConnectionString
The information used to connect to the Provider.
+
readonly object connectDisconnectLock
Lock object used to sychronize connect/disconnect operations.
+
readonly List< ulong > mappedChannels
List<T> of mapped channel Snowflakes.
+
readonly bool deploymentBranding
If the tgstation-server logo is shown in deployment embeds.
+
readonly IAssemblyInformationProvider assemblyInformationProvider
The IAssemblyInformationProvider for the DiscordProvider.
+
readonly DiscordDMOutputDisplayType outputDisplayType
The DiscordDMOutputDisplayType.
+
readonly GeneralConfiguration generalConfiguration
The GeneralConfiguration for the DiscordProvider.
+
readonly ServiceProvider serviceProvider
The ServiceProvider containing Discord services.
+
readonly IJobManager jobManager
The IJobManager for the Provider.
+
+
References Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.assemblyInformationProvider , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.connectDisconnectLock , Tgstation.Server.Api.Models.Internal.ChatBotSettings.ConnectionString , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.deploymentBranding , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.generalConfiguration , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.mappedChannels , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.outputDisplayType , and Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.serviceProvider .
+
+
+
+
+
+
◆ AddRange()
+
+
+
+
+
+
+
+
+ fields. Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.AddRange
+ (
+ updatedTestMerges .
+ Select x=> new EmbedField($"#{x.Number} (Updated)", $"[{x.TitleAtMerge}]({x.Url}) by _[@{x.Author}](https://github.com/{x.Author})_{Environment.NewLine}Commit: [{x.TargetCommitSha![..7]}](https://github.com/{gitHubOwner}/{gitHubRepo}/commit/{x.TargetCommitSha}){(String.IsNullOrWhiteSpace(x.Comment) ? String.Empty : $"{Environment.NewLine}_ **{x.Comment} **_")}", false))
+
+
+
+
+
+private
+
+
+
+
+
+
+
+
◆ BuildUpdateEmbedFields()
+
+
+
+
+
+
+
+
+ List< IEmbedField > Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.BuildUpdateEmbedFields
+ (
+ Models::RevisionInformation
+ revisionInformation ,
+
+
+
+
+ Models::RevisionInformation ?
+ previousRevisionInformation ,
+
+
+
+
+ EngineVersion
+ engineVersion ,
+
+
+
+
+ string?
+ gitHubOwner ,
+
+
+
+
+ string?
+ gitHubRepo ,
+
+
+
+
+ bool
+ localCommitPushed
+
+
+
+ )
+
+
+
+
+
+private
+
+
+
+
+
Create a List<T> of IEmbedFields for a discord update embed.
+
Parameters
+
+ revisionInformation The RevisionInformation of the deployment.
+ previousRevisionInformation The optional RevisionInformation of the previous deployment.
+ engineVersion The EngineVersion of the deployment.
+ gitHubOwner The repository GitHub owner, if any.
+ gitHubRepo The repository GitHub name, if any.
+ localCommitPushed true if the local deployment commit was pushed to the remote repository.
+
+
+
+
Returns A new List<T> of IEmbedFields to use.
+
+
Definition at line 910 of file DiscordProvider.cs .
+
917 {
+
918 bool gitHub = gitHubOwner != null && gitHubRepo != null ;
+
919 var engineField = engineVersion.
Engine !.Value
switch
+
920 {
+
921 EngineType.Byond => new EmbedField(
+
922 "BYOND Version" ,
+
923 $
"{engineVersion.Version!.Major}.{engineVersion.Version.Minor}{(engineVersion.CustomIteration.HasValue ? $" .{engineVersion.
CustomIteration .Value}
" : String.Empty)}" ,
+
924 true ),
+
+
926 "OpenDream Version" ,
+
927 $"[{engineVersion.SourceSHA![..7]}]({generalConfiguration.OpenDreamGitUrl}/commit/{engineVersion.SourceSHA})" ,
+
928 true ),
+
929 _ => throw new InvalidOperationException($"Invaild EngineType: {engineVersion.Engine.Value}" ),
+
930 };
+
931
+
932 var revisionSha = revisionInformation.CommitSha!;
+
933 var revisionOriginSha = revisionInformation.OriginCommitSha!;
+
934 var fields = new List<IEmbedField>
+
935 {
+
936 engineField,
+
937 };
+
938
+
939 if (gitHubOwner == null || gitHubRepo == null )
+
940 return fields;
+
941
+
942 var previousTestMerges = (IEnumerable<RevInfoTestMerge>?)previousRevisionInformation?.ActiveTestMerges ?? Enumerable.Empty<
RevInfoTestMerge >();
+
943 var currentTestMerges = (IEnumerable<RevInfoTestMerge>?)revisionInformation.ActiveTestMerges ?? Enumerable.Empty<
RevInfoTestMerge >();
+
944
+
945
+
946 var addedTestMerges = currentTestMerges
+
947 .Select(x => x.TestMerge)
+
948 .Where(x => !previousTestMerges
+
949 .Any(y => y.TestMerge.Number == x.Number))
+
950 .ToList();
+
951 var removedTestMerges = previousTestMerges
+
952 .Select(x => x.TestMerge)
+
953 .Where(x => !currentTestMerges
+
954 .Any(y => y.TestMerge.Number == x.Number))
+
955 .ToList();
+
956 var updatedTestMerges = currentTestMerges
+
957 .Select(x => x.TestMerge)
+
958 .Where(x => previousTestMerges
+
959 .Any(y => y.TestMerge.Number == x.Number && y.TestMerge.TargetCommitSha != x.TargetCommitSha))
+
960 .ToList();
+
961 var unchangedTestMerges = currentTestMerges
+
962 .Select(x => x.TestMerge)
+
963 .Where(x => previousTestMerges
+
964 .Any(y => y.TestMerge.Number == x.Number && y.TestMerge.TargetCommitSha == x.TargetCommitSha))
+
965 .ToList();
+
966
+
967 fields.Add(
+
968 new EmbedField(
+
969 "Local Commit" ,
+
970 localCommitPushed && gitHub
+
971 ? $"[{revisionSha[..7]}](https://github.com/{gitHubOwner}/{gitHubRepo}/commit/{revisionSha})"
+
972 : revisionSha[..7],
+
973 true));
+
974
+
975 fields.Add(
+
976 new EmbedField(
+
977 "Branch Commit" ,
+
978 gitHub
+
979 ? $"[{revisionOriginSha[..7]}](https://github.com/{gitHubOwner}/{gitHubRepo}/commit/{revisionOriginSha})"
+
980 : revisionOriginSha[..7],
+
981 true));
+
982
+
983 fields.AddRange(addedTestMerges
+
984 .Select(x => new EmbedField(
+
985 $"#{x.Number} (Added)" ,
+
986 $"[{x.TitleAtMerge}]({x.Url}) by _[@{x.Author}](https://github.com/{x.Author})_{Environment.NewLine}Commit: [{x.TargetCommitSha![..7]}](https://github.com/{gitHubOwner}/{gitHubRepo}/commit/{x.TargetCommitSha}){(String.IsNullOrWhiteSpace(x.Comment) ? String.Empty : $" {Environment.NewLine}_**{x.Comment}**_")}" ,
+
EngineType? Engine
The EngineType.
+
int? CustomIteration
The revision of the custom build.
+
Many to many relationship for Models.RevisionInformation and Models.TestMerge.
+
EngineType
The type of engine the codebase is using.
+
+
References Tgstation.Server.Api.Models.EngineVersion.CustomIteration , and Tgstation.Server.Api.Models.EngineVersion.Engine .
+
+
Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendUpdateMessage() .
+
+
+
+
+
+
+
◆ Connect()
+
+
+
+
+
+
+
+
+ override async ValueTask Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.Connect
+ (
+ CancellationToken
+ cancellationToken )
+
+
+
+
+
+protected
+
+
+
+
+
+
◆ DisconnectImpl()
+
+
+
+
+
+
+
+
+ override async ValueTask Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.DisconnectImpl
+ (
+ CancellationToken
+ cancellationToken )
+
+
+
+
+
+protected
+
+
+
+
+
+
◆ DisposeAsync()
+
+
+
+
+
+
+
+
+ override async ValueTask Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.DisposeAsync
+ (
+ )
+
+
+
+
+
+virtual
+
+
+
+
+
+
◆ GetAllAccessibleTextChannels()
+
+
+
+
+
+
+
+
+ async ValueTask< IEnumerable< IChannel > > Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.GetAllAccessibleTextChannels
+ (
+ CancellationToken
+ cancellationToken )
+
+
+
+
+
+private
+
+
+
+
+
Get all text IChannels accessible to and supported by the bot.
+
Parameters
+
+ cancellationToken The CancellationToken for the operation.
+
+
+
+
Returns A Task<TResult> resulting in an IEnumerable<T> of accessible and compatible IChannels.
+
+
Definition at line 846 of file DiscordProvider.cs .
+
847 {
+
848 var usersClient =
serviceProvider .GetRequiredService<IDiscordRestUserAPI>();
+
849 var currentGuildsResponse = await usersClient.GetCurrentUserGuildsAsync(ct: cancellationToken);
+
850 if (!currentGuildsResponse.IsSuccess)
+
851 {
+
+
853 "Error retrieving current discord guilds: {result}" ,
+
854 currentGuildsResponse.LogFormat());
+
855 return Enumerable.Empty<IChannel>();
+
856 }
+
857
+
858 var guildsClient =
serviceProvider .GetRequiredService<IDiscordRestGuildAPI>();
+
859
+
860 async ValueTask<IEnumerable<IChannel>> GetGuildChannels(IPartialGuild guild)
+
861 {
+
862 var channelsTask = guildsClient.GetGuildChannelsAsync(guild.ID.Value, cancellationToken);
+
863 var threads = await guildsClient.ListActiveGuildThreadsAsync(guild.ID.Value, cancellationToken);
+
864 if (!threads.IsSuccess)
+
+
866 "Error retrieving discord guild threads {guildId} ({guildName}): {result}" ,
+
867 guild.ID,
+
868 guild.Name,
+
869 threads.LogFormat());
+
870
+
871 var channels = await channelsTask;
+
872 if (!channels.IsSuccess)
+
+
874 "Error retrieving discord guild channels {guildId} ({guildName}): {result}" ,
+
875 guild.ID,
+
876 guild.Name,
+
877 channels.LogFormat());
+
878
+
879 if (!channels.IsSuccess && !threads.IsSuccess)
+
880 return Enumerable.Empty<IChannel>();
+
881
+
882 if (channels.IsSuccess && threads.IsSuccess)
+
883 return channels.Entity.Concat(threads.Entity.Threads ?? Enumerable.Empty<IChannel>());
+
884
+
885 return channels.Entity ?? threads.Entity?.Threads ?? Enumerable.Empty<IChannel>();
+
886 }
+
887
+
888 var guildsChannelsTasks = currentGuildsResponse.Entity
+
889 .Select(GetGuildChannels);
+
890
+
+
892
+
893 var allAccessibleChannels = guildsChannels
+
894 .SelectMany(channels => channels)
+
+
896
+
897 return allAccessibleChannels;
+
898 }
+
Extension methods for the ValueTask and ValueTask<TResult> classes.
+
static async ValueTask WhenAll(IEnumerable< ValueTask > tasks)
Fully await a given list of tasks .
+
static readonly ChannelType[] SupportedGuildChannelTypes
The ChannelTypes supported by the DiscordProvider for mapping.
+
+
References Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.serviceProvider , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SupportedGuildChannelTypes , and Tgstation.Server.Common.Extensions.ValueTaskExtensions.WhenAll() .
+
+
Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.MapChannelsImpl() , and Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendMessage() .
+
+
+
+
+
+
+
+
+
◆ MapChannelsImpl()
+
+
+
+
+
+
+
+
+ override async ValueTask< Dictionary< Models.ChatChannel , IEnumerable< ChannelRepresentation > > > Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.MapChannelsImpl
+ (
+ IEnumerable< Models::ChatChannel >
+ channels ,
+
+
+
+
+ CancellationToken
+ cancellationToken
+
+
+
+ )
+
+
+
+
+
+protected
+
+
+
+
+
+
+
Definition at line 668 of file DiscordProvider.cs .
+
669 {
+
670 ArgumentNullException.ThrowIfNull(channels);
+
671
+
672 var remapRequired = false ;
+
673 var guildsClient =
serviceProvider .GetRequiredService<IDiscordRestGuildAPI>();
+
674 var guildTasks = new ConcurrentDictionary<Snowflake, Task<Result<IGuild>>>();
+
675
+
676 async ValueTask<Tuple<Models.ChatChannel, IEnumerable<ChannelRepresentation>>?> GetModelChannelFromDBChannel(Models.ChatChannel channelFromDB)
+
677 {
+
678 if (!channelFromDB.DiscordChannelId.HasValue)
+
679 throw new InvalidOperationException("ChatChannel missing DiscordChannelId!" );
+
680
+
681 var channelId = channelFromDB.DiscordChannelId.Value;
+
682 var channelsClient =
serviceProvider .GetRequiredService<IDiscordRestChannelAPI>();
+
683 var discordChannelResponse = await channelsClient.GetChannelAsync(new Snowflake(channelId), cancellationToken);
+
684 if (!discordChannelResponse.IsSuccess)
+
685 {
+
+
687 "Error retrieving discord channel {channelId}: {result}" ,
+
688 channelId,
+
689 discordChannelResponse.LogFormat());
+
690
+
691 var remapConditional = !(discordChannelResponse.Error is RestResultError<RestError> restResultError
+
692 && (restResultError.Error?.Code == DiscordError.MissingAccess
+
693 || restResultError.Error?.Code == DiscordError.UnknownChannel));
+
694
+
695 if (remapConditional)
+
696 {
+
+
698 remapRequired
+
699 ? LogLevel.Trace
+
700 : LogLevel.Debug,
+
701 "Error on channel {channelId} is not an access/thread issue. Will retry remap..." ,
+
702 channelId);
+
703 remapRequired = true ;
+
704 }
+
705
+
706 return null ;
+
707 }
+
708
+
709 var channelType = discordChannelResponse.Entity.Type;
+
+
711 {
+
712 Logger .LogWarning(
"Cound not map channel {channelId}! Incorrect type: {channelType}" , channelId, discordChannelResponse.Entity.Type);
+
713 return null ;
+
714 }
+
715
+
716 var guildId = discordChannelResponse.Entity.GuildID.Value;
+
717
+
718 var added = false ;
+
719 var guildsResponse = await guildTasks.GetOrAdd(
+
720 guildId,
+
721 localGuildId =>
+
722 {
+
723 added = true ;
+
724 return guildsClient.GetGuildAsync(
+
725 localGuildId,
+
726 false ,
+
727 cancellationToken);
+
728 });
+
729 if (!guildsResponse.IsSuccess)
+
730 {
+
731 if (added)
+
732 {
+
+
734 "Error retrieving discord guild {guildID}: {result}" ,
+
735 guildId,
+
736 guildsResponse.LogFormat());
+
737 remapRequired = true ;
+
738 }
+
739
+
740 return null ;
+
741 }
+
742
+
743 var connectionName = guildsResponse.Entity.Name;
+
744
+
745 var channelModel = new ChannelRepresentation(
+
746 guildsResponse.Entity.Name,
+
747 discordChannelResponse.Entity.Name.Value!,
+
748 channelId)
+
749 {
+
750 IsAdminChannel = channelFromDB.IsAdminChannel == true ,
+
751 IsPrivateChannel = false ,
+
752 Tag = channelFromDB.Tag,
+
753 EmbedsSupported = true ,
+
754 };
+
755
+
756 Logger .LogTrace(
"Mapped channel {realId}: {friendlyName}" , channelModel.RealId, channelModel.FriendlyName);
+
757 return Tuple.Create<Models.ChatChannel, IEnumerable<ChannelRepresentation>>(
+
758 channelFromDB,
+
759 new List<ChannelRepresentation> { channelModel });
+
760 }
+
761
+
762 var tasks = channels
+
763 .Where(x => x.DiscordChannelId != 0)
+
764 .Select(GetModelChannelFromDBChannel);
+
765
+
+
767
+
768 var list = channelTuples
+
769 .Where(x => x != null )
+
770 .Cast<Tuple<Models.ChatChannel, IEnumerable<ChannelRepresentation>>>()
+
771 .ToList();
+
772
+
773 var channelIdZeroModel = channels.FirstOrDefault(x => x.DiscordChannelId == 0);
+
774 if (channelIdZeroModel != null )
+
775 {
+
776 Logger .LogInformation(
"Mapping ALL additional accessible text channels" );
+
+
778 var unmappedTextChannels = allAccessibleChannels
+
779 .Where(x => !tasks.Any(task => task.Result != null && new Snowflake(task.Result.Item1.DiscordChannelId!.Value) == x.ID));
+
780
+
781 async ValueTask<Tuple<Models.ChatChannel, IEnumerable<ChannelRepresentation>>> CreateMappingsForUnmappedChannels()
+
782 {
+
783 var unmappedTasks =
+
784 unmappedTextChannels.Select(
+
785 async unmappedTextChannel =>
+
786 {
+
787 var fakeChannelModel = new Models.ChatChannel
+
788 {
+
789 DiscordChannelId = unmappedTextChannel.ID.Value,
+
790 IsAdminChannel = channelIdZeroModel.IsAdminChannel,
+
791 Tag = channelIdZeroModel.Tag,
+
792 };
+
793
+
794 var tuple = await GetModelChannelFromDBChannel(fakeChannelModel);
+
795 return tuple?.Item2.First();
+
796 })
+
797 .ToList();
+
798
+
799
+
800 unmappedTasks.Add(Task.FromResult<ChannelRepresentation?>(
+
801 new ChannelRepresentation(
+
802 "(Unknown Discord Guilds)" ,
+
803 "(Unknown Discord Channels)" ,
+
804 0)
+
805 {
+
806 IsAdminChannel = channelIdZeroModel.IsAdminChannel!.Value,
+
807 EmbedsSupported = true ,
+
808 Tag = channelIdZeroModel.Tag,
+
809 }));
+
810
+
811 await Task.WhenAll(unmappedTasks);
+
812 return Tuple.Create<Models.ChatChannel, IEnumerable<ChannelRepresentation>>(
+
813 channelIdZeroModel,
+
814 unmappedTasks
+
815 .Select(x => x.Result)
+
816 .Where(x => x != null )
+
817 .Cast<ChannelRepresentation>()
+
818 .ToList());
+
819 }
+
820
+
821 var task = CreateMappingsForUnmappedChannels();
+
822 var tuple = await task;
+
823 list.Add(tuple);
+
824 }
+
825
+
+
827 {
+
+
829 mappedChannels .AddRange(list.SelectMany(x => x.Item2).Select(x => x.RealId));
+
830 }
+
831
+
832 if (remapRequired)
+
833 {
+
834 Logger .LogWarning(
"Some channels failed to load with unknown errors. We will request that these be remapped, but it may result in communication spam. Please check prior logs and report an issue if this occurs." );
+
+
836 }
+
837
+
838 return new Dictionary<Models.ChatChannel, IEnumerable<ChannelRepresentation>>(list.Select(x => new KeyValuePair<Models.ChatChannel, IEnumerable<ChannelRepresentation>>(x.Item1, x.Item2)));
+
839 }
+
async ValueTask< IEnumerable< IChannel > > GetAllAccessibleTextChannels(CancellationToken cancellationToken)
Get all text IChannels accessible to and supported by the bot.
+
void EnqueueMessage(Message? message)
Queues a message for NextMessage(CancellationToken).
+
+
References Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage() , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.GetAllAccessibleTextChannels() , Tgstation.Server.Api.Models.Internal.ChatChannelBase.IsAdminChannel , Tgstation.Server.Host.Components.Chat.ChannelRepresentation.IsAdminChannel , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.mappedChannels , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.serviceProvider , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SupportedGuildChannelTypes , Tgstation.Server.Host.Components.Chat.ChannelRepresentation.Tag , and Tgstation.Server.Common.Extensions.ValueTaskExtensions.WhenAll() .
+
+
+
+
+
+
+
◆ NormalizeMentions()
+
+
+
+
+
+
+
+
+ static string Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.NormalizeMentions
+ (
+ string
+ fromDiscord )
+
+
+
+
+
+static private
+
+
+
+
+
+
◆ RespondAsync() [1/2]
+
+
+
+
+
+ async Task< Result > Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.RespondAsync
+ (
+ IMessageCreate
+ messageCreateEvent ,
+
+
+
+
+ CancellationToken
+ cancellationToken
+
+
+
+ )
+
+
+
+
+
+
+
+
Definition at line 482 of file DiscordProvider.cs .
+
483 {
+
484 ArgumentNullException.ThrowIfNull(messageCreateEvent);
+
485
+
486 if ((messageCreateEvent.Type != MessageType.Default
+
487 && messageCreateEvent.Type != MessageType.InlineReply)
+
+
489 return Result.FromSuccess();
+
490
+
491 var messageReference = new MessageReference
+
492 {
+
493 ChannelID = messageCreateEvent.ChannelID,
+
494 GuildID = messageCreateEvent.GuildID,
+
495 MessageID = messageCreateEvent.ID,
+
496 FailIfNotExists = false ,
+
497 };
+
498
+
499 var channelsClient =
serviceProvider .GetRequiredService<IDiscordRestChannelAPI>();
+
500 var channelResponse = await channelsClient.GetChannelAsync(messageCreateEvent.ChannelID, cancellationToken);
+
501 if (!channelResponse.IsSuccess)
+
502 {
+
+
504 "Failed to get channel {channelId} in response to message {messageId}!" ,
+
505 messageCreateEvent.ChannelID,
+
506 messageCreateEvent.ID);
+
507
+
508
+
509 return Result.FromSuccess();
+
510 }
+
511
+
512 var pm = channelResponse.Entity.Type == ChannelType.DM || channelResponse.Entity.Type == ChannelType.GroupDM;
+
513 var shouldNotAnswer = !pm;
+
514 if (shouldNotAnswer)
+
+
+
517
+
+
519 var mentionedUs = messageCreateEvent.Mentions.Any(x => x.ID ==
currentUserId )
+
520 || (!shouldNotAnswer && content.Split(' ' ).First().Equals(ChatManager.CommonMention, StringComparison.OrdinalIgnoreCase));
+
521
+
522 if (shouldNotAnswer)
+
523 {
+
524 if (mentionedUs)
+
+
526 "Ignoring mention from {channelId} ({channelName}) by {authorId} ({authorName}). Channel not mapped!" ,
+
527 messageCreateEvent.ChannelID,
+
528 channelResponse.Entity.Name,
+
529 messageCreateEvent.Author.ID,
+
530 messageCreateEvent.Author.Username);
+
531
+
532 return Result.FromSuccess();
+
533 }
+
534
+
535 string guildName = "UNKNOWN" ;
+
536 if (!pm)
+
537 {
+
538 var guildsClient =
serviceProvider .GetRequiredService<IDiscordRestGuildAPI>();
+
539 var messageGuildResponse = await guildsClient.GetGuildAsync(messageCreateEvent.GuildID.Value, false , cancellationToken);
+
540 if (messageGuildResponse.IsSuccess)
+
541 guildName = messageGuildResponse.Entity.Name;
+
542 else
+
+
544 "Failed to get channel {channelID} in response to message {messageID}: {result}" ,
+
545 messageCreateEvent.ChannelID,
+
546 messageCreateEvent.ID,
+
547 messageGuildResponse.LogFormat());
+
548 }
+
549
+
550 var result = new DiscordMessage(
+
551 new ChatUser(
+
552 new ChannelRepresentation(
+
553 pm ? messageCreateEvent.Author.Username : guildName,
+
554 channelResponse.Entity.Name.Value!,
+
555 messageCreateEvent.ChannelID.Value)
+
556 {
+
557 IsPrivateChannel = pm,
+
558 EmbedsSupported = true ,
+
559
+
560
+
561 },
+
562 messageCreateEvent.Author.Username,
+
+
564 messageCreateEvent.Author.ID.Value),
+
565 content,
+
566 messageReference);
+
567
+
+
569 return Result.FromSuccess();
+
570 }
+
static string NormalizeMentions(string fromDiscord)
Normalize a discord mention string.
+
+
References Tgstation.Server.Host.Components.Chat.ChatManager.CommonMention , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.currentUserId , Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage() , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.mappedChannels , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.NormalizeMentions() , and Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.serviceProvider .
+
+
+
+
+
+
+
◆ RespondAsync() [2/2]
+
+
+
+
+
+ Task< Result > Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.RespondAsync
+ (
+ IReady
+ readyEvent ,
+
+
+
+
+ CancellationToken
+ cancellationToken
+
+
+
+ )
+
+
+
+
+
+
+
◆ SendMessage()
+
+
+
+
+
+ override async ValueTask Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendMessage
+ (
+ Message ?
+ replyTo ,
+
+
+
+
+ MessageContent
+ message ,
+
+
+
+
+ ulong
+ channelId ,
+
+
+
+
+ CancellationToken
+ cancellationToken
+
+
+
+ )
+
+
+
+
+
+
Send a message to the IProvider .
Parameters
+
+ replyTo The optional Message to reply to.
+ message The MessageContent.
+ channelId The ChannelRepresentation.RealId to send to.
+ cancellationToken The CancellationToken for the operation.
+
+
+
+
Returns A ValueTask representing the running operation.
+
+
+
Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider .
+
+
Definition at line 197 of file DiscordProvider.cs .
+
198 {
+
199 ArgumentNullException.ThrowIfNull(message);
+
200
+
201 Optional<IMessageReference> replyToReference = default ;
+
202 Optional<IAllowedMentions> allowedMentions = default ;
+
203 if (replyTo != null && replyTo is DiscordMessage discordMessage)
+
204 {
+
205 replyToReference = discordMessage.MessageReference;
+
206 allowedMentions = new AllowedMentions(
+
207 Parse: new
List <MentionType>
+
208 {
+
209 MentionType.Everyone,
+
210 MentionType.Roles,
+
211 MentionType.Users,
+
212 },
+
213 MentionRepliedUser: false );
+
214 }
+
215
+
+
217
+
218 var channelsClient =
serviceProvider .GetRequiredService<IDiscordRestChannelAPI>();
+
219 async ValueTask SendToChannel(Snowflake channelId)
+
220 {
+
221 if (message.
Text ==
null )
+
222 {
+
+
224 "Failed to send to channel {channelId}: Message was null!" ,
+
225 channelId);
+
226
+
227 await channelsClient.CreateMessageAsync(
+
228 channelId,
+
229 "TGS: Could not send message to Discord. Message was `null`!" ,
+
230 messageReference: replyToReference,
+
231 allowedMentions: allowedMentions,
+
232 ct: cancellationToken);
+
233
+
234 return ;
+
235 }
+
236
+
237 var result = await channelsClient.CreateMessageAsync(
+
238 channelId,
+
+
240 embeds: embeds,
+
241 messageReference: replyToReference,
+
242 allowedMentions: allowedMentions,
+
243 ct: cancellationToken);
+
244
+
245 if (!result.IsSuccess)
+
246 {
+
+
248 "Failed to send to channel {channelId}: {result}" ,
+
249 channelId,
+
250 result.LogFormat());
+
251
+
252 if (result.Error is RestResultError<RestError> restError && restError.Error.Code == DiscordError.InvalidFormBody)
+
253 await channelsClient.CreateMessageAsync(
+
254 channelId,
+
255 "TGS: Could not send message to Discord. Body was malformed or too long" ,
+
256 messageReference: replyToReference,
+
257 allowedMentions: allowedMentions,
+
258 ct: cancellationToken);
+
259 }
+
260 }
+
261
+
262 try
+
263 {
+
264 if (channelId == 0)
+
265 {
+
266 IEnumerable<IChannel> unmappedTextChannels;
+
+
+
269 {
+
270 unmappedTextChannels = allAccessibleTextChannels
+
+
272 .ToList();
+
273
+
274 var remapRequired = unmappedTextChannels.Any()
+
+
276 mappedChannel => !allAccessibleTextChannels.Any(
+
277 accessibleTextChannel => accessibleTextChannel.ID == new Snowflake(mappedChannel)));
+
278
+
279 if (remapRequired)
+
+
281 }
+
282
+
283
+
284 if (unmappedTextChannels.Any())
+
285 {
+
286 Logger .LogDebug(
"Dispatching to {count} unmapped channels..." , unmappedTextChannels.Count());
+
+
288 unmappedTextChannels.Select(
+
289 x => SendToChannel(x.ID)));
+
290 }
+
291
+
292 return ;
+
293 }
+
294
+
295 await SendToChannel(new Snowflake(channelId));
+
296 }
+
297 catch (
Exception e) when (e is not OperationCanceledException)
+
298 {
+
299 Logger .LogWarning(e,
"Error sending discord message!" );
+
300 }
+
301 }
+
Optional< IReadOnlyList< IEmbed > > ConvertEmbed(ChatEmbed? embed)
Convert a ChatEmbed to an IEmbed parameters.
+
+
ChatEmbed? Embed
The ChatEmbed.
+
string? Text
The message string.
+
@ List
User may list files if the Models.Instance allows it.
+
+
References ConvertEmbed() , Tgstation.Server.Host.Components.Interop.MessageContent.Embed , Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage() , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.GetAllAccessibleTextChannels() , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.mappedChannels , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.serviceProvider , Tgstation.Server.Host.Components.Interop.MessageContent.Text , and Tgstation.Server.Common.Extensions.ValueTaskExtensions.WhenAll() .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
◆ SendUpdateMessage()
+
+
+
+
+
+ override async ValueTask< Func< string?, string, ValueTask< Func< bool, ValueTask > > > > Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendUpdateMessage
+ (
+ Models::RevisionInformation
+ revisionInformation ,
+
+
+
+
+ Models::RevisionInformation ?
+ previousRevisionInformation ,
+
+
+
+
+ EngineVersion
+ engineVersion ,
+
+
+
+
+ DateTimeOffset?
+ estimatedCompletionTime ,
+
+
+
+
+ string?
+ gitHubOwner ,
+
+
+
+
+ string?
+ gitHubRepo ,
+
+
+
+
+ ulong
+ channelId ,
+
+
+
+
+ bool
+ localCommitPushed ,
+
+
+
+
+ CancellationToken
+ cancellationToken
+
+
+
+ )
+
+
+
+
+
+
Send the message for a deployment.
Parameters
+
+ revisionInformation The RevisionInformation of the deployment.
+ previousRevisionInformation The RevisionInformation of the previous deployment if any.
+ engineVersion The Api.Models.EngineVersion of the deployment.
+ estimatedCompletionTime The optional DateTimeOffset the deployment is expected to be completed at.
+ gitHubOwner The repository GitHub owner, if any.
+ gitHubRepo The repository GitHub name, if any.
+ channelId The ChannelRepresentation.RealId to send to.
+ localCommitPushed true if the local deployment commit was pushed to the remote repository.
+ cancellationToken The CancellationToken for the operation.
+
+
+
+
Returns A ValueTask<TResult> resulting in a Func<T1, T2, TResult> to call to update the message at the deployment's conclusion. Parameters: Error message if any, DreamMaker output if any. Returns another callback which should be called to mark the deployment as active.
+
+
+
Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider .
+
+
Definition at line 304 of file DiscordProvider.cs .
+
314 {
+
315 ArgumentNullException.ThrowIfNull(revisionInformation);
+
316 ArgumentNullException.ThrowIfNull(engineVersion);
+
317
+
318 localCommitPushed |= revisionInformation.CommitSha == revisionInformation.OriginCommitSha;
+
319
+
320 var fields =
BuildUpdateEmbedFields (revisionInformation, previousRevisionInformation, engineVersion, gitHubOwner, gitHubRepo, localCommitPushed);
+
+
322 {
+
323 Url = "https://github.com/tgstation/tgstation-server" ,
+
324 IconUrl = "https://cdn.discordapp.com/attachments/1114451486374637629/1151650846019432448/tgs.png" ,
+
325 };
+
326 var embed = new Embed
+
327 {
+
+
329 Colour = Color.FromArgb(0xF1, 0xC4, 0x0F),
+
330 Description = "TGS has begun deploying active repository code to production." ,
+
331 Fields = fields,
+
332 Title = "Code Deployment" ,
+
333 Footer = new EmbedFooter(
+
334 $"In progress...{(estimatedCompletionTime.HasValue ? " ETA" : String.Empty)}" ),
+
335 Timestamp = estimatedCompletionTime ?? default ,
+
336 };
+
337
+
338 Logger .LogTrace(
"Attempting to post deploy embed to channel {channelId}..." , channelId);
+
339 var channelsClient =
serviceProvider .GetRequiredService<IDiscordRestChannelAPI>();
+
340
+
+
342 var messageResponse = await channelsClient.CreateMessageAsync(
+
343 new Snowflake(channelId),
+
344 $"{prefix}: Deployment in progress..." ,
+
345 embeds: new
List <IEmbed> { embed },
+
346 ct: cancellationToken);
+
347
+
348 if (!messageResponse.IsSuccess)
+
349 Logger .LogWarning(
"Failed to post deploy embed to channel {channelId}: {result}" , channelId, messageResponse.LogFormat());
+
350
+
351 return async (errorMessage, dreamMakerOutput) =>
+
352 {
+
353 var completionString = errorMessage == null ? "Pending" : "Failed" ;
+
354
+
355 Embed CreateUpdatedEmbed(string message, Color color) => new ()
+
356 {
+
357 Author = embed.Author,
+
358 Colour = color,
+
359 Description = message,
+
360 Fields = fields,
+
361 Title = embed.Title,
+
362 Footer = new EmbedFooter(
+
363 completionString),
+
364 Timestamp = DateTimeOffset.UtcNow,
+
365 };
+
366
+
367 if (errorMessage == null )
+
368 embed = CreateUpdatedEmbed(
+
369 "The deployment completed successfully and will be available at the next server reboot." ,
+
370 Color.Blue);
+
371 else
+
372 embed = CreateUpdatedEmbed(
+
373 "The deployment failed." ,
+
374 Color.Red);
+
375
+
+
377 {
+
378 DiscordDMOutputDisplayType.Always => true ,
+
379 DiscordDMOutputDisplayType.Never => false ,
+
380 DiscordDMOutputDisplayType.OnError => errorMessage != null ,
+
381 _ => throw new InvalidOperationException($"Invalid DiscordDMOutputDisplayType: {outputDisplayType}" ),
+
382 };
+
383
+
384 if (dreamMakerOutput != null )
+
385 {
+
386
+
387 const int MaxFieldValueLength = 1024;
+
388 showDMOutput = showDMOutput && dreamMakerOutput.Length < MaxFieldValueLength - (6 + Environment.NewLine.Length);
+
389 if (showDMOutput)
+
390 fields.Add(new EmbedField(
+
391 "Compiler Output" ,
+
392 $"```{Environment.NewLine}{dreamMakerOutput}{Environment.NewLine}```" ,
+
393 false ));
+
394 }
+
395
+
396 if (errorMessage != null )
+
397 fields.Add(new EmbedField(
+
398 "Error Message" ,
+
399 errorMessage,
+
400 false ));
+
401
+
402 var updatedMessageText = errorMessage == null ? $"{prefix}: Deployment pending reboot..." : $"{prefix}: Deployment failed!" ;
+
403
+
404 IMessage? updatedMessage = null ;
+
405 async ValueTask CreateUpdatedMessage()
+
406 {
+
407 var createUpdatedMessageResponse = await channelsClient.CreateMessageAsync(
+
408 new Snowflake(channelId),
+
409 updatedMessageText,
+
410 embeds: new
List <IEmbed> { embed },
+
411 ct: cancellationToken);
+
412
+
413 if (!createUpdatedMessageResponse.IsSuccess)
+
+
415 "Creating updated deploy embed failed: {result}" ,
+
416 createUpdatedMessageResponse.LogFormat());
+
417 else
+
418 updatedMessage = createUpdatedMessageResponse.Entity;
+
419 }
+
420
+
421 if (!messageResponse.IsSuccess)
+
422 await CreateUpdatedMessage();
+
423 else
+
424 {
+
425 var editResponse = await channelsClient.EditMessageAsync(
+
426 new Snowflake(channelId),
+
427 messageResponse.Entity.ID,
+
428 updatedMessageText,
+
429 embeds: new
List <IEmbed> { embed },
+
430 ct: cancellationToken);
+
431
+
432 if (!editResponse.IsSuccess)
+
433 {
+
+
435 "Updating deploy embed {messageId} failed, attempting new post: {result}" ,
+
436 messageResponse.Entity.ID,
+
437 editResponse.LogFormat());
+
438 await CreateUpdatedMessage();
+
439 }
+
440 else
+
441 updatedMessage = editResponse.Entity;
+
442 }
+
443
+
444 return async (active) =>
+
445 {
+
446 if (updatedMessage == null || errorMessage != null )
+
447 return ;
+
448
+
449 if (active)
+
450 {
+
451 completionString = "Succeeded" ;
+
452 updatedMessageText = $"{prefix}: Deployment succeeded!" ;
+
453 embed = CreateUpdatedEmbed(
+
454 "The deployment completed successfully and was applied to server." ,
+
455 Color.Green);
+
456 }
+
457 else
+
458 {
+
459 completionString = "Inactive" ;
+
460 embed = CreateUpdatedEmbed(
+
461 "This deployment has been superceeded by a new one." ,
+
462 Color.Gray);
+
463 }
+
464
+
465 var editResponse = await channelsClient.EditMessageAsync(
+
466 new Snowflake(channelId),
+
467 updatedMessage.ID,
+
468 updatedMessageText,
+
469 embeds: new
List <IEmbed> { embed },
+
470 ct: cancellationToken);
+
471
+
472 if (!editResponse.IsSuccess)
+
+
474 "Finalizing deploy embed {messageId} failed: {result}" ,
+
475 messageResponse.Entity.ID,
+
476 editResponse.LogFormat());
+
477 };
+
478 };
+
479 }
+
List< IEmbedField > BuildUpdateEmbedFields(Models.RevisionInformation revisionInformation, Models.RevisionInformation? previousRevisionInformation, EngineVersion engineVersion, string? gitHubOwner, string? gitHubRepo, bool localCommitPushed)
Create a List<T> of IEmbedFields for a discord update embed.
+
static string GetEngineCompilerPrefix(Api.Models.EngineType engineType)
Get the prefix for messages about deployments.
+
+
+
References Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.assemblyInformationProvider , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.BuildUpdateEmbedFields() , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.deploymentBranding , Tgstation.Server.Api.Models.EngineVersion.Engine , Tgstation.Server.Host.Components.Chat.Providers.Provider.GetEngineCompilerPrefix() , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.outputDisplayType , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.serviceProvider , and Tgstation.Server.Host.System.IAssemblyInformationProvider.VersionPrefix .
+
+
+
+
+
+
+
+
◆ assemblyInformationProvider
+
+
+
+
◆ connectDisconnectLock
+
+
+
+
+
+
+
+
+ readonly object Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.connectDisconnectLock
+
+
+
+
+private
+
+
+
+
+
+
◆ currentUserId
+
+
+
+
+
+
+
+
+ Snowflake Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.currentUserId
+
+
+
+
+private
+
+
+
+
+
+
◆ deploymentBranding
+
+
+
+
+
+
+
+
+ readonly bool Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.deploymentBranding
+
+
+
+
+private
+
+
+
+
+
+
◆ disposing
+
+
+
+
+
+
+
+
+ bool Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.disposing
+
+
+
+
+private
+
+
+
+
+
+
◆ false
+
+
+
+
+
+
+
+
+ Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.false
+
+
+
+
+private
+
+
+
+
+
+
◆ gatewayCts
+
+
+
+
+
+
+
+
+ CancellationTokenSource? Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.gatewayCts
+
+
+
+
+private
+
+
+
+
+
+
◆ gatewayReadyTcs
+
+
+
+
+
+
+
+
+ TaskCompletionSource? Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.gatewayReadyTcs
+
+
+
+
+private
+
+
+
+
+
+
◆ gatewayTask
+
+
+
+
+
+
+
+
+ Task<Result>? Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.gatewayTask
+
+
+
+
+private
+
+
+
+
+
+
◆ generalConfiguration
+
+
+
+
+
+
+
+
+ readonly GeneralConfiguration Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.generalConfiguration
+
+
+
+
+private
+
+
+
+
+
+
◆ mappedChannels
+
+
+
+
+
+
+
+
+ readonly List<ulong> Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.mappedChannels
+
+
+
+
+private
+
+
+
+
+
+
◆ outputDisplayType
+
+
+
+
◆ serviceProvider
+
+
+
+
+
+
+
+
+ readonly ServiceProvider Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.serviceProvider
+
+
+
+
+private
+
+
+
+
+
+
◆ SupportedGuildChannelTypes
+
+
+
+
+
+
+
+
+ readonly ChannelType [] Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SupportedGuildChannelTypes
+
+
+
+
+static private
+
+
+
+
+
+
+
◆ BotMention
+
+
+
+
+
+
+
+
+ override string Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.BotMention
+
+
+
+
+get
+
+
+
+
+
+
◆ Connected
+
+
+
+
+
+
+
+
+ override bool Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.Connected
+
+
+
+
+get
+
+
+
+
+
The documentation for this class was generated from the following file:
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__coll__graph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__coll__graph.map
new file mode 100644
index 0000000000..66338c26f0
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__coll__graph.map
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__coll__graph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__coll__graph.md5
new file mode 100644
index 0000000000..78ed82fc16
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__coll__graph.md5
@@ -0,0 +1 @@
+f69ca44abae64ed4a52a517e999574c5
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__coll__graph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__coll__graph.png
new file mode 100644
index 0000000000..34a65a7f68
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__coll__graph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__inherit__graph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__inherit__graph.map
new file mode 100644
index 0000000000..beabac494c
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__inherit__graph.map
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__inherit__graph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__inherit__graph.md5
new file mode 100644
index 0000000000..01050aba15
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__inherit__graph.md5
@@ -0,0 +1 @@
+a2971eb8b7358a7270b1789d516e3ab4
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__inherit__graph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__inherit__graph.png
new file mode 100644
index 0000000000..7f00d55c1a
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider__inherit__graph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a1494b2b91cc869199100c9338f91d864_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a1494b2b91cc869199100c9338f91d864_cgraph.map
new file mode 100644
index 0000000000..bad37bc9e3
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a1494b2b91cc869199100c9338f91d864_cgraph.map
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a1494b2b91cc869199100c9338f91d864_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a1494b2b91cc869199100c9338f91d864_cgraph.md5
new file mode 100644
index 0000000000..da5c2b548b
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a1494b2b91cc869199100c9338f91d864_cgraph.md5
@@ -0,0 +1 @@
+1ec5ba9378b715ea2446e1005365bbd3
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a1494b2b91cc869199100c9338f91d864_cgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a1494b2b91cc869199100c9338f91d864_cgraph.png
new file mode 100644
index 0000000000..ccac37ccba
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a1494b2b91cc869199100c9338f91d864_cgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3cf5b9ba9079d6c9f582f61b5894f7c1_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3cf5b9ba9079d6c9f582f61b5894f7c1_icgraph.map
new file mode 100644
index 0000000000..fe1a73722c
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3cf5b9ba9079d6c9f582f61b5894f7c1_icgraph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3cf5b9ba9079d6c9f582f61b5894f7c1_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3cf5b9ba9079d6c9f582f61b5894f7c1_icgraph.md5
new file mode 100644
index 0000000000..59ec573cb8
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3cf5b9ba9079d6c9f582f61b5894f7c1_icgraph.md5
@@ -0,0 +1 @@
+8cedf3a5c64de9902f060a30764aba4a
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3cf5b9ba9079d6c9f582f61b5894f7c1_icgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3cf5b9ba9079d6c9f582f61b5894f7c1_icgraph.png
new file mode 100644
index 0000000000..e25f2e4f98
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3cf5b9ba9079d6c9f582f61b5894f7c1_icgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3fd130f635e4577bedefa9926a4e2c73_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3fd130f635e4577bedefa9926a4e2c73_cgraph.map
new file mode 100644
index 0000000000..53661ff437
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3fd130f635e4577bedefa9926a4e2c73_cgraph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3fd130f635e4577bedefa9926a4e2c73_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3fd130f635e4577bedefa9926a4e2c73_cgraph.md5
new file mode 100644
index 0000000000..563318c5ba
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3fd130f635e4577bedefa9926a4e2c73_cgraph.md5
@@ -0,0 +1 @@
+063710156fbe8ca11cb9c68b8b042ef5
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3fd130f635e4577bedefa9926a4e2c73_cgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3fd130f635e4577bedefa9926a4e2c73_cgraph.png
new file mode 100644
index 0000000000..70441adb89
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a3fd130f635e4577bedefa9926a4e2c73_cgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a48adcd32348dbab4150bd2c8087623e0_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a48adcd32348dbab4150bd2c8087623e0_cgraph.map
new file mode 100644
index 0000000000..002b55fc6d
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a48adcd32348dbab4150bd2c8087623e0_cgraph.map
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a48adcd32348dbab4150bd2c8087623e0_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a48adcd32348dbab4150bd2c8087623e0_cgraph.md5
new file mode 100644
index 0000000000..bec88335d1
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a48adcd32348dbab4150bd2c8087623e0_cgraph.md5
@@ -0,0 +1 @@
+8beb5278f7db613d002f1899306b67b8
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a48adcd32348dbab4150bd2c8087623e0_cgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a48adcd32348dbab4150bd2c8087623e0_cgraph.png
new file mode 100644
index 0000000000..7d5e4a1e18
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a48adcd32348dbab4150bd2c8087623e0_cgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a6b14b94a01f2a1478f1ade14ef9a7471_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a6b14b94a01f2a1478f1ade14ef9a7471_cgraph.map
new file mode 100644
index 0000000000..c65b881aee
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a6b14b94a01f2a1478f1ade14ef9a7471_cgraph.map
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a6b14b94a01f2a1478f1ade14ef9a7471_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a6b14b94a01f2a1478f1ade14ef9a7471_cgraph.md5
new file mode 100644
index 0000000000..b9f21ad518
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a6b14b94a01f2a1478f1ade14ef9a7471_cgraph.md5
@@ -0,0 +1 @@
+1a18a2ffcf4dd7985d0a71e5e823df8f
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a6b14b94a01f2a1478f1ade14ef9a7471_cgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a6b14b94a01f2a1478f1ade14ef9a7471_cgraph.png
new file mode 100644
index 0000000000..6656d47c62
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a6b14b94a01f2a1478f1ade14ef9a7471_cgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a8d7bbc5ddb64df2800554c354ff1974a_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a8d7bbc5ddb64df2800554c354ff1974a_cgraph.map
new file mode 100644
index 0000000000..f48c8e3fb4
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a8d7bbc5ddb64df2800554c354ff1974a_cgraph.map
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a8d7bbc5ddb64df2800554c354ff1974a_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a8d7bbc5ddb64df2800554c354ff1974a_cgraph.md5
new file mode 100644
index 0000000000..42792cae43
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a8d7bbc5ddb64df2800554c354ff1974a_cgraph.md5
@@ -0,0 +1 @@
+0473128b07a0b387c36d830b062461f3
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a8d7bbc5ddb64df2800554c354ff1974a_cgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a8d7bbc5ddb64df2800554c354ff1974a_cgraph.png
new file mode 100644
index 0000000000..5db04e312d
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a8d7bbc5ddb64df2800554c354ff1974a_cgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a9998d613750e44e779ae89931f7cfd98_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a9998d613750e44e779ae89931f7cfd98_icgraph.map
new file mode 100644
index 0000000000..4a422f1e54
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a9998d613750e44e779ae89931f7cfd98_icgraph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a9998d613750e44e779ae89931f7cfd98_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a9998d613750e44e779ae89931f7cfd98_icgraph.md5
new file mode 100644
index 0000000000..d0dc3be868
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a9998d613750e44e779ae89931f7cfd98_icgraph.md5
@@ -0,0 +1 @@
+5e04cac70189a30c54af7f288e1fdd8e
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a9998d613750e44e779ae89931f7cfd98_icgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a9998d613750e44e779ae89931f7cfd98_icgraph.png
new file mode 100644
index 0000000000..92d0352c38
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_a9998d613750e44e779ae89931f7cfd98_icgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_aa0b4853705d24be3e16314bf050f9e7c_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_aa0b4853705d24be3e16314bf050f9e7c_icgraph.map
new file mode 100644
index 0000000000..7ead927801
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_aa0b4853705d24be3e16314bf050f9e7c_icgraph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_aa0b4853705d24be3e16314bf050f9e7c_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_aa0b4853705d24be3e16314bf050f9e7c_icgraph.md5
new file mode 100644
index 0000000000..1a406e0cf9
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_aa0b4853705d24be3e16314bf050f9e7c_icgraph.md5
@@ -0,0 +1 @@
+2e934c4daaadcb9bebc1ead46ec63189
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_aa0b4853705d24be3e16314bf050f9e7c_icgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_aa0b4853705d24be3e16314bf050f9e7c_icgraph.png
new file mode 100644
index 0000000000..c9477a95ac
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_aa0b4853705d24be3e16314bf050f9e7c_icgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_cgraph.map
new file mode 100644
index 0000000000..6a1ff5cca9
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_cgraph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_cgraph.md5
new file mode 100644
index 0000000000..e2a92fcd8b
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_cgraph.md5
@@ -0,0 +1 @@
+ac4be14dc4cb6800ff871a97a617ddbf
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_cgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_cgraph.png
new file mode 100644
index 0000000000..8b3f8321de
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_cgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_icgraph.map
new file mode 100644
index 0000000000..d1b2425640
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_icgraph.map
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_icgraph.md5
new file mode 100644
index 0000000000..c34afb6354
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_icgraph.md5
@@ -0,0 +1 @@
+0cde56c15e753c61345d3a4c6c100c2c
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_icgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_icgraph.png
new file mode 100644
index 0000000000..6f7336a8df
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_discord_provider_ab92d4920074cec3e48fa204af595a498_icgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider-members.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider-members.html
index 673280882c..28bd3bfdf1 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider-members.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider-members.html
@@ -131,7 +131,7 @@ $(function() {
reconnectTaskLock Tgstation.Server.Host.Components.Chat.Providers.Provider private
SaslAuthenticate (CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProvider private
SendMessage (Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProvider
- SendUpdateMessage (Models.RevisionInformation revisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProvider
+ SendUpdateMessage (Models.RevisionInformation revisionInformation, Models.RevisionInformation? previousRevisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.IrcProvider
SetReconnectInterval (uint reconnectInterval, bool connectNow)Tgstation.Server.Host.Components.Chat.Providers.Provider
ssl Tgstation.Server.Host.Components.Chat.Providers.IrcProvider private
StopReconnectionTimer ()Tgstation.Server.Host.Components.Chat.Providers.Provider private
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider.html
index dadc259e09..5e0d6aafd5 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider.html
@@ -174,10 +174,11 @@ Public Member Functions
Returns A ValueTask representing the running operation.
-override async ValueTask< Func< string?, string, ValueTask< Func< bool, ValueTask > > > > SendUpdateMessage (Models.RevisionInformation revisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)
- Send the message for a deployment.Parameters
+override async ValueTask< Func< string?, string, ValueTask< Func< bool, ValueTask > > > > SendUpdateMessage (Models.RevisionInformation revisionInformation, Models.RevisionInformation ? previousRevisionInformation, EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)
+ Send the message for a deployment.Parameters
revisionInformation The RevisionInformation of the deployment.
+ previousRevisionInformation The RevisionInformation of the previous deployment if any.
engineVersion The Api.Models.EngineVersion of the deployment.
estimatedCompletionTime The optional DateTimeOffset the deployment is expected to be completed at.
gitHubOwner The repository GitHub owner, if any.
@@ -190,7 +191,7 @@ Public Member Functions
Returns A ValueTask<TResult> resulting in a Func<T1, T2, TResult> to call to update the message at the deployment's conclusion. Parameters: Error message if any, DreamMaker output if any. Returns another callback which should be called to mark the deployment as active.
-
+
async ValueTask Disconnect (CancellationToken cancellationToken)
Gracefully disconnects the provider. Permanently stops the reconnection timer.Parameters
@@ -250,10 +251,11 @@ Note that private messages will come in the form of Returns A ValueTask representing the running operation.
-ValueTask< Func< string?, string, ValueTask< Func< bool, ValueTask > > > > SendUpdateMessage (RevisionInformation revisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)
- Send the message for a deployment.Parameters
+ValueTask< Func< string?, string, ValueTask< Func< bool, ValueTask > > > > SendUpdateMessage (RevisionInformation revisionInformation, RevisionInformation ? previousRevisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)
+ Send the message for a deployment.Parameters
@@ -413,7 +415,7 @@ Additional Inherited Members
IProvider for internet relay chat.
-
Definition at line 28 of file IrcProvider.cs .
+
Definition at line 29 of file IrcProvider.cs .
◆ IrcProvider()
@@ -478,50 +480,50 @@ Additional Inherited Members
-Definition at line 120 of file IrcProvider.cs .
- 127 : base(
jobManager , asyncDelayer, logger, chatBot)
-
128 {
-
129 ArgumentNullException.ThrowIfNull(assemblyInformationProvider);
-
-
131
-
132 var builder = chatBot.CreateConnectionStringBuilder();
-
-
134 throw new InvalidOperationException("Invalid ChatConnectionStringBuilder!" );
-
135
-
-
137 port = ircBuilder.Port!.Value;
-
138 ssl = ircBuilder.UseSsl!.Value;
-
-
140
-
-
-
143
-
144 assemblyInfo = assemblyInformationProvider ??
throw new ArgumentNullException(nameof(assemblyInformationProvider));
-
-
146
-
-
148
-
-
-
-
152 }
+
Definition at line 121 of file IrcProvider.cs .
+
128 : base(
jobManager , asyncDelayer, logger, chatBot)
+
129 {
+
130 ArgumentNullException.ThrowIfNull(assemblyInformationProvider);
+
+
132
+
133 var builder = chatBot.CreateConnectionStringBuilder();
+
+
135 throw new InvalidOperationException("Invalid ChatConnectionStringBuilder!" );
+
136
+
+
138 port = ircBuilder.Port!.Value;
+
139 ssl = ircBuilder.UseSsl!.Value;
+
+
141
+
+
+
144
+
145 assemblyInfo = assemblyInformationProvider ??
throw new ArgumentNullException(nameof(assemblyInformationProvider));
+
+
147
+
+
149
+
+
+
+
153 }
ChatConnectionStringBuilder for ChatProvider.Irc.
-
IrcFeatures InstantiateClient()
Creates a new instance of the IRC client. Reusing the same client after a disconnection seems to caus...
-
readonly IAssemblyInformationProvider assemblyInfo
The IAssemblyInformationProvider obtained from constructor, used for the CTCP version string.
-
readonly ushort port
Port of the server to connect to.
-
readonly string password
Password which will used for authentication.
-
ulong channelIdCounter
Id counter for channelIdMap.
-
readonly string address
Address of the server to connect to.
-
readonly? IrcPasswordType passwordType
The IrcPasswordType of password.
-
readonly string nickname
IRC nickname.
-
IrcFeatures client
The IrcFeatures client.
-
readonly Dictionary< ulong, string > queryChannelIdMap
Map of ChannelRepresentation.RealIds to query users.
-
readonly bool ssl
Wether or not this IRC client is to use ssl.
-
readonly FileLoggingConfiguration loggingConfiguration
The FileLoggingConfiguration for the IrcProvider.
-
readonly Dictionary< ulong, string?> channelIdMap
Map of ChannelRepresentation.RealIds to channel names.
+
IrcFeatures InstantiateClient()
Creates a new instance of the IRC client. Reusing the same client after a disconnection seems to caus...
+
readonly IAssemblyInformationProvider assemblyInfo
The IAssemblyInformationProvider obtained from constructor, used for the CTCP version string.
+
readonly ushort port
Port of the server to connect to.
+
readonly string password
Password which will used for authentication.
+
ulong channelIdCounter
Id counter for channelIdMap.
+
readonly string address
Address of the server to connect to.
+
readonly? IrcPasswordType passwordType
The IrcPasswordType of password.
+
readonly string nickname
IRC nickname.
+
IrcFeatures client
The IrcFeatures client.
+
readonly Dictionary< ulong, string > queryChannelIdMap
Map of ChannelRepresentation.RealIds to query users.
+
readonly bool ssl
Wether or not this IRC client is to use ssl.
+
readonly FileLoggingConfiguration loggingConfiguration
The FileLoggingConfiguration for the IrcProvider.
+
readonly Dictionary< ulong, string?> channelIdMap
Map of ChannelRepresentation.RealIds to channel names.
readonly IJobManager jobManager
The IJobManager for the Provider.
-
References Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.address , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.assemblyInfo , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdCounter , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdMap , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.InstantiateClient() , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.loggingConfiguration , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.nickname , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.password , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.passwordType , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.port , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.queryChannelIdMap , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.ssl .
+
References Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.address , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.assemblyInfo , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdCounter , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdMap , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.InstantiateClient() , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.loggingConfiguration , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.nickname , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.password , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.passwordType , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.port , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.queryChannelIdMap , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.ssl .
@@ -652,83 +654,83 @@ Here is the call graph for this function:
-
Definition at line 365 of file IrcProvider.cs .
-
366 {
-
367 cancellationToken.ThrowIfCancellationRequested();
-
368 try
-
369 {
-
370 await Task.Factory.StartNew(
-
371 () =>
-
372 {
-
-
-
375 },
-
376 cancellationToken,
-
-
378 TaskScheduler.Current)
-
379 .WaitAsync(cancellationToken);
-
380
-
381 cancellationToken.ThrowIfCancellationRequested();
-
382
-
-
384 () =>
-
385 {
-
386 Logger .LogTrace(
"Starting blocking listen..." );
-
387 try
-
388 {
-
-
390 }
-
-
392 {
-
393 Logger .LogWarning(ex,
"IRC Main Listen Exception!" );
-
394 }
-
395
-
396 Logger .LogTrace(
"Exiting listening task..." );
-
397 },
-
398 cancellationToken,
-
-
400 TaskScheduler.Current);
+
Definition at line 384 of file IrcProvider.cs .
+
385 {
+
386 cancellationToken.ThrowIfCancellationRequested();
+
387 try
+
388 {
+
389 await Task.Factory.StartNew(
+
390 () =>
+
391 {
+
+
+
394 },
+
395 cancellationToken,
+
+
397 TaskScheduler.Current)
+
398 .WaitAsync(cancellationToken);
+
399
+
400 cancellationToken.ThrowIfCancellationRequested();
401
-
-
-
404 {
-
-
-
-
408 break ;
-
-
-
411 cancellationToken.ThrowIfCancellationRequested();
-
412 client .SendMessage(SendType.Message,
"NickServ" , String.Format(CultureInfo.InvariantCulture,
"IDENTIFY {0}" ,
password ));
-
413 break ;
-
-
-
416 break ;
-
-
-
419 cancellationToken.ThrowIfCancellationRequested();
-
-
421 break ;
-
422 case null :
-
-
424 break ;
-
425 default :
-
426 throw new InvalidOperationException($"Invalid IrcPasswordType: {passwordType.Value}" );
-
427 }
-
428
-
429 cancellationToken.ThrowIfCancellationRequested();
-
430
-
431 Logger .LogTrace(
"Connection established!" );
-
432 }
-
433 catch (
Exception e) when (e is not OperationCanceledException)
-
434 {
-
-
436 }
-
437 }
+
+
403 () =>
+
404 {
+
405 Logger .LogTrace(
"Starting blocking listen..." );
+
406 try
+
407 {
+
+
409 }
+
+
411 {
+
412 Logger .LogWarning(ex,
"IRC Main Listen Exception!" );
+
413 }
+
414
+
415 Logger .LogTrace(
"Exiting listening task..." );
+
416 },
+
417 cancellationToken,
+
+
419 TaskScheduler.Current);
+
420
+
+
+
423 {
+
+
+
+
427 break ;
+
+
+
430 cancellationToken.ThrowIfCancellationRequested();
+
431 client .SendMessage(SendType.Message,
"NickServ" , String.Format(CultureInfo.InvariantCulture,
"IDENTIFY {0}" ,
password ));
+
432 break ;
+
+
+
435 break ;
+
+
+
438 cancellationToken.ThrowIfCancellationRequested();
+
+
440 break ;
+
441 case null :
+
+
443 break ;
+
444 default :
+
445 throw new InvalidOperationException($"Invalid IrcPasswordType: {passwordType.Value}" );
+
446 }
+
447
+
448 cancellationToken.ThrowIfCancellationRequested();
+
449
+
450 Logger .LogTrace(
"Connection established!" );
+
451 }
+
452 catch (
Exception e) when (e is not OperationCanceledException)
+
453 {
+
+
455 }
+
456 }
-
async ValueTask SaslAuthenticate(CancellationToken cancellationToken)
Run SASL authentication on client.
-
async ValueTask Login(IrcFeatures client, string nickname, CancellationToken cancellationToken)
Register the client on the network.
-
Task? listenTask
The ValueTask used for IrcConnection.Listen(bool).
+
async ValueTask SaslAuthenticate(CancellationToken cancellationToken)
Run SASL authentication on client.
+
async ValueTask Login(IrcFeatures client, string nickname, CancellationToken cancellationToken)
Register the client on the network.
+
Task? listenTask
The ValueTask used for IrcConnection.Listen(bool).
ILogger< Provider > Logger
The ILogger for the Provider.
IIOManager that resolves paths to Environment.CurrentDirectory.
const TaskCreationOptions BlockingTaskCreationOptions
The TaskCreationOptions used to spawn Tasks for potentially long running, blocking operations.
@@ -766,37 +768,37 @@ Here is the call graph for this function:
-
Definition at line 440 of file IrcProvider.cs .
-
441 {
-
442 try
-
443 {
-
444 await Task.Factory.StartNew(
-
445 () =>
-
446 {
-
447 try
-
448 {
-
449 client .RfcQuit(
"Mr. Stark, I don't feel so good..." , Priority.Critical);
-
450 }
-
-
452 {
-
453 Logger .LogWarning(e,
"Error quitting IRC!" );
-
454 }
-
455 },
-
456 cancellationToken,
-
-
458 TaskScheduler.Current);
-
-
460 }
-
461 catch (OperationCanceledException)
+
Definition at line 459 of file IrcProvider.cs .
+
460 {
+
461 try
462 {
-
463 throw ;
-
464 }
-
-
466 {
-
467 Logger .LogWarning(e,
"Error disconnecting from IRC!" );
-
468 }
-
469 }
-
async ValueTask HardDisconnect(CancellationToken cancellationToken)
Attempt to disconnect from IRC immediately.
+
463 await Task.Factory.StartNew(
+
464 () =>
+
465 {
+
466 try
+
467 {
+
468 client .RfcQuit(
"Mr. Stark, I don't feel so good..." , Priority.Critical);
+
469 }
+
+
471 {
+
472 Logger .LogWarning(e,
"Error quitting IRC!" );
+
473 }
+
474 },
+
475 cancellationToken,
+
+
477 TaskScheduler.Current);
+
+
479 }
+
480 catch (OperationCanceledException)
+
481 {
+
482 throw ;
+
483 }
+
+
485 {
+
486 Logger .LogWarning(e,
"Error disconnecting from IRC!" );
+
487 }
+
488 }
+
async ValueTask HardDisconnect(CancellationToken cancellationToken)
Attempt to disconnect from IRC immediately.
References Tgstation.Server.Host.IO.DefaultIOManager.BlockingTaskCreationOptions .
@@ -829,15 +831,15 @@ Here is the call graph for this function:
Reimplemented from Tgstation.Server.Host.Components.Chat.Providers.Provider .
-
Definition at line 155 of file IrcProvider.cs .
-
156 {
-
157 await base.DisposeAsync();
-
158
-
159
-
-
161 }
+
Definition at line 156 of file IrcProvider.cs .
+
157 {
+
158 await base.DisposeAsync();
+
159
+
160
+
+
162 }
-
References Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.HardDisconnect() .
+
References Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.HardDisconnect() .
@@ -896,60 +898,60 @@ Here is the call graph for this function:
-
Definition at line 514 of file IrcProvider.cs .
-
515 {
-
516 if (e.Data.Nick.Equals(
client .Nickname, StringComparison.OrdinalIgnoreCase))
-
517 return ;
-
518
-
519 var username = e.Data.Nick;
-
520 var channelName = isPrivate ? username : e.Data.Channel;
-
521
-
522 ulong MapAndGetChannelId(Dictionary<ulong, string?> dicToCheck)
-
523 {
-
524 ulong? resultId = null ;
-
525 if (!dicToCheck.Any(x =>
-
526 {
-
527 if (x.Value != channelName)
-
528 return false;
-
529 resultId = x.Key;
-
530 return true;
-
531 }))
-
532 {
-
-
534 dicToCheck.Add(resultId.Value, channelName);
-
-
-
537 }
-
538
-
539 return resultId!.Value;
-
540 }
-
541
-
542 ulong userId, channelId;
-
-
544 {
-
-
546 .Cast<KeyValuePair<ulong, string?>>()));
-
547 channelId = isPrivate ? userId : MapAndGetChannelId(
channelIdMap );
-
548 }
-
549
-
550 var channelFriendlyName = isPrivate ? String.Format(CultureInfo.InvariantCulture, "PM: {0}" , channelName) : channelName;
-
551 var message = new Message(
-
552 new ChatUser(
-
553 new ChannelRepresentation(
address , channelFriendlyName, channelId)
-
554 {
-
555 IsPrivateChannel = isPrivate,
-
556 EmbedsSupported = false ,
+
Definition at line 533 of file IrcProvider.cs .
+
534 {
+
535 if (e.Data.Nick.Equals(
client .Nickname, StringComparison.OrdinalIgnoreCase))
+
536 return ;
+
537
+
538 var username = e.Data.Nick;
+
539 var channelName = isPrivate ? username : e.Data.Channel;
+
540
+
541 ulong MapAndGetChannelId(Dictionary<ulong, string?> dicToCheck)
+
542 {
+
543 ulong? resultId = null ;
+
544 if (!dicToCheck.Any(x =>
+
545 {
+
546 if (x.Value != channelName)
+
547 return false;
+
548 resultId = x.Key;
+
549 return true;
+
550 }))
+
551 {
+
+
553 dicToCheck.Add(resultId.Value, channelName);
+
+
+
556 }
557
-
558
-
559 },
-
560 username,
-
561 username,
-
562 userId),
-
563 e.Data.Message);
-
564
-
-
566 }
-
void EnqueueMessage(Message? message)
Queues a message for NextMessage(CancellationToken).
+
558 return resultId!.Value;
+
559 }
+
560
+
561 ulong userId, channelId;
+
+
563 {
+
+
565 .Cast<KeyValuePair<ulong, string?>>()));
+
566 channelId = isPrivate ? userId : MapAndGetChannelId(
channelIdMap );
+
567 }
+
568
+
569 var channelFriendlyName = isPrivate ? String.Format(CultureInfo.InvariantCulture, "PM: {0}" , channelName) : channelName;
+
570 var message = new Message(
+
571 new ChatUser(
+
572 new ChannelRepresentation(
address , channelFriendlyName, channelId)
+
573 {
+
574 IsPrivateChannel = isPrivate,
+
575 EmbedsSupported = false ,
+
576
+
577
+
578 },
+
579 username,
+
580 username,
+
581 userId),
+
582 e.Data.Message);
+
583
+
+
585 }
+
void EnqueueMessage(Message? message)
Queues a message for NextMessage(CancellationToken).
@@ -986,47 +988,47 @@ Here is the call graph for this function:
Returns A ValueTask representing the running operation.
-
Definition at line 679 of file IrcProvider.cs .
-
680 {
-
-
682 {
-
683 Logger .LogTrace(
"Not hard disconnecting, already offline" );
-
684 return ;
-
685 }
-
686
-
687 Logger .LogTrace(
"Hard disconnect" );
-
688
-
689
-
690
-
691 var disconnectTask = Task.Factory.StartNew(
-
692 () =>
-
693 {
-
694 try
-
695 {
-
-
697 }
-
-
699 {
-
700 Logger .LogWarning(e,
"Error disconnecting IRC!" );
-
701 }
-
702 },
-
703 cancellationToken,
-
-
705 TaskScheduler.Current);
-
706
-
707 await Task.WhenAny(
-
708 Task.WhenAll(
-
709 disconnectTask,
-
-
-
712 }
-
override bool Connected
If the IProvider is currently connected.
+
Definition at line 698 of file IrcProvider.cs .
+
699 {
+
+
701 {
+
702 Logger .LogTrace(
"Not hard disconnecting, already offline" );
+
703 return ;
+
704 }
+
705
+
706 Logger .LogTrace(
"Hard disconnect" );
+
707
+
708
+
709
+
710 var disconnectTask = Task.Factory.StartNew(
+
711 () =>
+
712 {
+
713 try
+
714 {
+
+
716 }
+
+
718 {
+
719 Logger .LogWarning(e,
"Error disconnecting IRC!" );
+
720 }
+
721 },
+
722 cancellationToken,
+
+
724 TaskScheduler.Current);
+
725
+
726 await Task.WhenAny(
+
727 Task.WhenAll(
+
728 disconnectTask,
+
+
+
731 }
+
override bool Connected
If the IProvider is currently connected.
async ValueTask Delay(TimeSpan timeSpan, CancellationToken cancellationToken)
Create a Task that completes after a given timeSpan .A ValueTask representing the running operation.
References Tgstation.Server.Host.IO.DefaultIOManager.BlockingTaskCreationOptions , and Tgstation.Server.Host.Utils.AsyncDelayer.Delay() .
-
Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.DisposeAsync() .
+
Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.DisposeAsync() .
@@ -1076,49 +1078,49 @@ Here is the caller graph for this function:
Creates a new instance of the IRC client. Reusing the same client after a disconnection seems to cause issues.
Returns The IrcFeatures client to use.
-
Definition at line 719 of file IrcProvider.cs .
-
720 {
-
721 var newClient = new IrcFeatures
-
722 {
-
723 SupportNonRfc = true ,
-
724 CtcpUserInfo = "You are going to play. And I am going to watch. And everything will be just fine..." ,
-
725 AutoRejoin = true ,
-
726 AutoRejoinOnKick = true ,
-
727 AutoRelogin = false ,
-
728 AutoRetry = false ,
-
729 AutoReconnect = false ,
-
730 ActiveChannelSyncing = true ,
-
731 AutoNickHandling = true ,
-
-
-
734 EnableUTF8Recode = true ,
-
735 };
-
-
737 newClient.ValidateServerCertificate = true ;
-
738
-
-
-
741
-
-
743 {
-
744 newClient.OnReadLine += (sender, e) =>
Logger .LogTrace(
"READ: {line}" , e.Line);
-
745 newClient.OnWriteLine += (sender, e) =>
Logger .LogTrace(
"WRITE: {line}" , e.Line);
-
746 }
-
747
-
748 newClient.OnError += (sender, e) =>
-
749 {
-
750 Logger .LogError(
"IRC ERROR: {error}" , e.ErrorMessage);
-
751 newClient.Disconnect();
-
752 };
-
753
-
754 return newClient;
-
755 }
+
Definition at line 738 of file IrcProvider.cs .
+
739 {
+
740 var newClient = new IrcFeatures
+
741 {
+
742 SupportNonRfc = true ,
+
743 CtcpUserInfo = "You are going to play. And I am going to watch. And everything will be just fine..." ,
+
744 AutoRejoin = true ,
+
745 AutoRejoinOnKick = true ,
+
746 AutoRelogin = false ,
+
747 AutoRetry = false ,
+
748 AutoReconnect = false ,
+
749 ActiveChannelSyncing = true ,
+
750 AutoNickHandling = true ,
+
+
+
753 EnableUTF8Recode = true ,
+
754 };
+
+
756 newClient.ValidateServerCertificate = true ;
+
757
+
+
+
760
+
+
762 {
+
763 newClient.OnReadLine += (sender, e) =>
Logger .LogTrace(
"READ: {line}" , e.Line);
+
764 newClient.OnWriteLine += (sender, e) =>
Logger .LogTrace(
"WRITE: {line}" , e.Line);
+
765 }
+
766
+
767 newClient.OnError += (sender, e) =>
+
768 {
+
769 Logger .LogError(
"IRC ERROR: {error}" , e.ErrorMessage);
+
770 newClient.Disconnect();
+
771 };
+
772
+
773 return newClient;
+
774 }
void Client_OnQueryMessage(object sender, IrcEventArgs e)
When a query message is received in IRC.
void Client_OnChannelMessage(object sender, IrcEventArgs e)
When a channel message is received in IRC.
bool ProviderNetworkDebug
If Chat Providers should log their network traffic. Normally disabled because it is too noisy.
-
Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
+
Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
@@ -1189,35 +1191,35 @@ Here is the caller graph for this function:
-
Definition at line 479 of file IrcProvider.cs .
-
480 {
-
481 var promise = new TaskCompletionSource<object>();
-
482
-
483 void Callback(object ? sender, EventArgs e)
-
484 {
-
485 Logger .LogTrace(
"IRC Registered." );
-
486 promise.TrySetResult(e);
-
487 }
-
488
-
489 client.OnRegistered += Callback;
-
490
-
-
492
-
493 using var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
-
494 cts.CancelAfter(TimeSpan.FromSeconds(30));
-
495
-
496 try
-
497 {
-
498 await promise.Task.WaitAsync(cts.Token);
-
499 client.OnRegistered -= Callback;
-
500 }
-
501 catch (OperationCanceledException)
-
502 {
-
-
-
505 throw new JobException (
"Timed out waiting for IRC Registration" );
+
Definition at line 498 of file IrcProvider.cs .
+
499 {
+
500 var promise = new TaskCompletionSource<object>();
+
501
+
502 void Callback(object ? sender, EventArgs e)
+
503 {
+
504 Logger .LogTrace(
"IRC Registered." );
+
505 promise.TrySetResult(e);
506 }
-
507 }
+
507
+
508 client.OnRegistered += Callback;
+
509
+
+
511
+
512 using var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+
513 cts.CancelAfter(TimeSpan.FromSeconds(30));
+
514
+
515 try
+
516 {
+
517 await promise.Task.WaitAsync(cts.Token);
+
518 client.OnRegistered -= Callback;
+
519 }
+
520 catch (OperationCanceledException)
+
521 {
+
+
+
524 throw new JobException (
"Timed out waiting for IRC Registration" );
+
525 }
+
526 }
@@ -1257,7 +1259,7 @@ Here is the caller graph for this function:
-
References Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdMap , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client .
+
References Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdMap , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client .
@@ -1329,70 +1331,70 @@ Here is the caller graph for this function:
Returns A ValueTask representing the running operation.
-Definition at line 609 of file IrcProvider.cs .
- 610 {
-
611 client .WriteLine(
"CAP REQ :sasl" , Priority.Critical);
-
612 cancellationToken.ThrowIfCancellationRequested();
-
613
-
614 Logger .LogTrace(
"Logging in..." );
-
-
616 cancellationToken.ThrowIfCancellationRequested();
-
617
-
618
-
619 var receivedAck = false ;
-
620 var receivedPlus = false ;
-
621
-
622 void AuthenticationDelegate(object sender, ReadLineEventArgs e)
-
623 {
-
624 if (e.Line.Contains("ACK :sasl" , StringComparison.Ordinal))
-
625 receivedAck = true ;
-
626 else if (e.Line.Contains("AUTHENTICATE +" , StringComparison.Ordinal))
-
627 receivedPlus = true ;
-
628 }
-
629
-
630 Logger .LogTrace(
"Performing handshake..." );
-
631 client.OnReadLine += AuthenticationDelegate;
-
632 try
-
633 {
-
634 using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
-
635 timeoutCts.CancelAfter(TimeSpan.FromSeconds(25));
-
636 var timeoutToken = timeoutCts.Token;
-
637
-
638 var listenTimeSpan = TimeSpan.FromMilliseconds(10);
-
639 for (; !receivedAck;
-
-
-
642
-
643 client .WriteLine(
"AUTHENTICATE PLAIN" , Priority.Critical);
-
644 timeoutToken.ThrowIfCancellationRequested();
-
645
-
646 for (; !receivedPlus;
-
-
-
649 }
-
650 finally
-
651 {
-
652 client.OnReadLine -= AuthenticationDelegate;
-
653 }
-
654
-
655 cancellationToken.ThrowIfCancellationRequested();
+
Definition at line 628 of file IrcProvider.cs .
+
629 {
+
630 client .WriteLine(
"CAP REQ :sasl" , Priority.Critical);
+
631 cancellationToken.ThrowIfCancellationRequested();
+
632
+
633 Logger .LogTrace(
"Logging in..." );
+
+
635 cancellationToken.ThrowIfCancellationRequested();
+
636
+
637
+
638 var receivedAck = false ;
+
639 var receivedPlus = false ;
+
640
+
641 void AuthenticationDelegate(object sender, ReadLineEventArgs e)
+
642 {
+
643 if (e.Line.Contains("ACK :sasl" , StringComparison.Ordinal))
+
644 receivedAck = true ;
+
645 else if (e.Line.Contains("AUTHENTICATE +" , StringComparison.Ordinal))
+
646 receivedPlus = true ;
+
647 }
+
648
+
649 Logger .LogTrace(
"Performing handshake..." );
+
650 client.OnReadLine += AuthenticationDelegate;
+
651 try
+
652 {
+
653 using var timeoutCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+
654 timeoutCts.CancelAfter(TimeSpan.FromSeconds(25));
+
655 var timeoutToken = timeoutCts.Token;
656
-
657
-
658 Logger .LogTrace(
"Sending credentials..." );
-
659 var authString = String.Format(
-
660 CultureInfo.InvariantCulture,
-
661 "{0}{1}{0}{1}{2}" ,
-
-
663 '\0' ,
-
-
665 var b64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(authString));
-
666 var authLine = $"AUTHENTICATE {b64}" ;
-
667 client .WriteLine(authLine, Priority.Critical);
-
668 cancellationToken.ThrowIfCancellationRequested();
-
669
-
670 Logger .LogTrace(
"Finishing authentication..." );
-
671 client .WriteLine(
"CAP END" , Priority.Critical);
-
672 }
+
657 var listenTimeSpan = TimeSpan.FromMilliseconds(10);
+
658 for (; !receivedAck;
+
+
+
661
+
662 client .WriteLine(
"AUTHENTICATE PLAIN" , Priority.Critical);
+
663 timeoutToken.ThrowIfCancellationRequested();
+
664
+
665 for (; !receivedPlus;
+
+
+
668 }
+
669 finally
+
670 {
+
671 client.OnReadLine -= AuthenticationDelegate;
+
672 }
+
673
+
674 cancellationToken.ThrowIfCancellationRequested();
+
675
+
676
+
677 Logger .LogTrace(
"Sending credentials..." );
+
678 var authString = String.Format(
+
679 CultureInfo.InvariantCulture,
+
680 "{0}{1}{0}{1}{2}" ,
+
+
682 '\0' ,
+
+
684 var b64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(authString));
+
685 var authLine = $"AUTHENTICATE {b64}" ;
+
686 client .WriteLine(authLine, Priority.Critical);
+
687 cancellationToken.ThrowIfCancellationRequested();
+
688
+
689 Logger .LogTrace(
"Finishing authentication..." );
+
690 client .WriteLine(
"CAP END" , Priority.Critical);
+
691 }
Task NonBlockingListen(CancellationToken cancellationToken)
Perform a non-blocking IrcConnection.Listen(bool).
References Tgstation.Server.Host.Utils.AsyncDelayer.Delay() .
@@ -1461,80 +1463,68 @@ Here is the call graph for this function:
Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider .
-Definition at line 164 of file IrcProvider.cs .
- 165 {
-
166 ArgumentNullException.ThrowIfNull(message);
-
167
-
168 await Task.Factory.StartNew(
-
169 () =>
-
170 {
-
171
-
172
-
173 var messageText = message.
Text ;
-
174 messageText ??= $"Embed Only: {JsonConvert.SerializeObject(message.Embed)}" ;
-
175
-
176 messageText = String.Concat(
-
177 messageText
-
178 .Where(x => x != '\r' )
-
179 .Select(x => x == '\n' ? '|' : x));
-
180
-
-
182 SendType sendType;
-
183 if (channelName == null )
-
184 {
-
-
186 sendType = SendType.Notice;
-
187 }
-
188 else
-
189 sendType = SendType.Message;
-
190
-
191 var messageSize = Encoding.UTF8.GetByteCount(messageText) + Encoding.UTF8.GetByteCount(channelName) +
PreambleMessageLength ;
-
-
193 if (messageTooLong)
-
194 messageText = $"TGS: Could not send message to IRC. Line write exceeded protocol limit of {MessageBytesLimit}B." ;
-
195
-
196 try
-
197 {
-
198 client .SendMessage(sendType, channelName, messageText);
-
199 }
-
-
201 {
-
202 Logger .LogWarning(e,
"Unable to send to channel {channelName}!" , channelName);
-
203 return ;
-
204 }
-
205
-
206 if (messageTooLong)
-
-
208 "Failed to send to channel {channelId}: Message size ({messageSize}B) exceeds IRC limit of 512B" ,
-
209 channelId,
-
210 messageSize);
-
211 },
-
212 cancellationToken,
-
-
214 TaskScheduler.Current);
-
215 }
-
const int PreambleMessageLength
Length of the preamble when writing a message to the server. Must be summed with the channel name to ...
-
const int MessageBytesLimit
Hard limit to sendable message size in bytes.
+
Definition at line 165 of file IrcProvider.cs .
+
166 {
+
167 ArgumentNullException.ThrowIfNull(message);
+
168
+
169 await Task.Factory.StartNew(
+
170 () =>
+
171 {
+
172
+
173
+
174 var messageText = message.
Text ;
+
175 messageText ??= $"Embed Only: {JsonConvert.SerializeObject(message.Embed)}" ;
+
176
+
177 messageText = String.Concat(
+
178 messageText
+
179 .Where(x => x != '\r' )
+
180 .Select(x => x == '\n' ? '|' : x));
+
181
+
+
183 SendType sendType;
+
184 if (channelName == null )
+
185 {
+
+
187 sendType = SendType.Notice;
+
188 }
+
189 else
+
190 sendType = SendType.Message;
+
191
+
192 var messageSize = Encoding.UTF8.GetByteCount(messageText) + Encoding.UTF8.GetByteCount(channelName) +
PreambleMessageLength ;
+
+
194 if (messageTooLong)
+
195 messageText = $"TGS: Could not send message to IRC. Line write exceeded protocol limit of {MessageBytesLimit}B." ;
+
196
+
197 try
+
198 {
+
199 client .SendMessage(sendType, channelName, messageText);
+
200 }
+
+
202 {
+
203 Logger .LogWarning(e,
"Unable to send to channel {channelName}!" , channelName);
+
204 return ;
+
205 }
+
206
+
207 if (messageTooLong)
+
+
209 "Failed to send to channel {channelId}: Message size ({messageSize}B) exceeds IRC limit of 512B" ,
+
210 channelId,
+
211 messageSize);
+
212 },
+
213 cancellationToken,
+
+
215 TaskScheduler.Current);
+
216 }
+
const int PreambleMessageLength
Length of the preamble when writing a message to the server. Must be summed with the channel name to ...
+
const int MessageBytesLimit
Hard limit to sendable message size in bytes.
string? Text
The message string.
-
References Tgstation.Server.Host.IO.DefaultIOManager.BlockingTaskCreationOptions , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdMap , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.MessageBytesLimit , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.PreambleMessageLength , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.queryChannelIdMap , and Tgstation.Server.Host.Components.Interop.MessageContent.Text .
-
-
Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendUpdateMessage() .
-
-
+
References Tgstation.Server.Host.IO.DefaultIOManager.BlockingTaskCreationOptions , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.channelIdMap , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.client , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.MessageBytesLimit , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.PreambleMessageLength , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.queryChannelIdMap , and Tgstation.Server.Host.Components.Interop.MessageContent.Text .
-
-◆ SendUpdateMessage()
+
+◆ SendUpdateMessage()
@@ -1545,6 +1535,12 @@ Here is the caller graph for this function:
Models::RevisionInformation
revisionInformation ,
+
+
+
+ Models::RevisionInformation ?
+ previousRevisionInformation ,
+
@@ -1598,6 +1594,7 @@ Here is the caller graph for this function:
Send the message for a deployment.
Parameters
revisionInformation The RevisionInformation of the deployment.
+ previousRevisionInformation The RevisionInformation of the previous deployment if any.
engineVersion The Api.Models.EngineVersion of the deployment.
estimatedCompletionTime The optional DateTimeOffset the deployment is expected to be completed at.
gitHubOwner The repository GitHub owner, if any.
@@ -1611,95 +1608,108 @@ Here is the caller graph for this function:
Returns A ValueTask<TResult> resulting in a Func<T1, T2, TResult> to call to update the message at the deployment's conclusion. Parameters: Error message if any, DreamMaker output if any. Returns another callback which should be called to mark the deployment as active.
-Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider .
+Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider .
-Definition at line 218 of file IrcProvider.cs .
- 227 {
-
228 ArgumentNullException.ThrowIfNull(revisionInformation);
-
229 ArgumentNullException.ThrowIfNull(engineVersion);
-
230
-
231 var commitInsert = revisionInformation.CommitSha![..7];
-
232 string remoteCommitInsert;
-
233 if (revisionInformation.CommitSha == revisionInformation.OriginCommitSha)
-
234 {
-
235 commitInsert = String.Format(CultureInfo.InvariantCulture, localCommitPushed ? "^{0}" : "{0}" , commitInsert);
-
236 remoteCommitInsert = String.Empty;
-
237 }
-
238 else
-
239 remoteCommitInsert = String.Format(CultureInfo.InvariantCulture, ". Remote commit: ^{0}" , revisionInformation.OriginCommitSha![..7]);
-
240
-
241 var testmergeInsert = (revisionInformation.ActiveTestMerges?.Count ?? 0) == 0
-
242 ? String.Empty
-
243 : String.Format(
-
244 CultureInfo.InvariantCulture,
-
245 " (Test Merges: {0})" ,
-
246 String.Join(
-
247 ", " ,
-
248 revisionInformation
-
249 .ActiveTestMerges!
-
-
251 .Select(x =>
-
252 {
-
253 var result = String.Format(CultureInfo.InvariantCulture, "#{0} at {1}" , x.Number, x.TargetCommitSha![..7]);
-
254 if (x.Comment != null )
-
255 result += String.Format(CultureInfo.InvariantCulture, " ({0})" , x.Comment);
-
256 return result;
-
257 })));
-
258
-
-
-
261 null ,
-
-
263 {
-
264 Text = String.Format(
-
265 CultureInfo.InvariantCulture,
-
266 $"{prefix}: Deploying revision: {0}{1}{2} BYOND Version: {3}{4}" ,
-
267 commitInsert,
-
268 testmergeInsert,
-
269 remoteCommitInsert,
-
-
271 estimatedCompletionTime.HasValue
-
272 ? $" ETA: {estimatedCompletionTime - DateTimeOffset.UtcNow}"
-
273 : String.Empty),
-
274 },
-
275 channelId,
-
276 cancellationToken);
+
Definition at line 219 of file IrcProvider.cs .
+
229 {
+
230 ArgumentNullException.ThrowIfNull(revisionInformation);
+
231 ArgumentNullException.ThrowIfNull(engineVersion);
+
232
+
233 var previousTestMerges = (IEnumerable<RevInfoTestMerge>?)previousRevisionInformation?.ActiveTestMerges ?? Enumerable.Empty<
RevInfoTestMerge >();
+
234 var currentTestMerges = (IEnumerable<RevInfoTestMerge>?)revisionInformation.ActiveTestMerges ?? Enumerable.Empty<
RevInfoTestMerge >();
+
235
+
236 var commitInsert = revisionInformation.CommitSha![..7];
+
237 string remoteCommitInsert;
+
238 if (revisionInformation.CommitSha == revisionInformation.OriginCommitSha)
+
239 {
+
240 commitInsert = String.Format(CultureInfo.InvariantCulture, localCommitPushed ? "^{0}" : "{0}" , commitInsert);
+
241 remoteCommitInsert = String.Empty;
+
242 }
+
243 else
+
244 remoteCommitInsert = String.Format(CultureInfo.InvariantCulture, ". Remote commit: ^{0}" , revisionInformation.OriginCommitSha![..7]);
+
245
+
246 var testmergeInsert = !currentTestMerges.Any()
+
247 ? String.Empty
+
248 : String.Format(
+
249 CultureInfo.InvariantCulture,
+
250 " (Test Merges: {0})" ,
+
251 String.Join(
+
252 ", " ,
+
253 currentTestMerges
+
254 .Select(x => x.TestMerge)
+
255 .Select(x =>
+
256 {
+
257 var status = string.Empty;
+
258 if (!previousTestMerges.Any(y => y.TestMerge.Number == x.Number))
+
259 status = "Added" ;
+
260 else if (previousTestMerges.Any(y => y.TestMerge.Number == x.Number && y.TestMerge.TargetCommitSha != x.TargetCommitSha))
+
261 status = "Updated" ;
+
262
+
263 var result = $"#{x.Number} at {x.TargetCommitSha![..7]}" ;
+
264
+
265 if (!string.IsNullOrEmpty(x.Comment))
+
266 {
+
267 if (!string.IsNullOrEmpty(status))
+
268 result += $" ({status} - {x.Comment})" ;
+
269 else
+
270 result += $" ({x.Comment})" ;
+
271 }
+
272 else if (!
string .IsNullOrEmpty(status))
+
273 result += $" ({status})" ;
+
274
+
275 return result;
+
276 })));
277
-
278 return async (errorMessage, dreamMakerOutput) =>
-
279 {
-
-
281 null ,
-
-
283 {
-
284 Text = $"{prefix}: Deployment {(errorMessage == null ? " complete" : " failed")}!" ,
-
285 },
-
286 channelId,
-
287 cancellationToken);
-
288
-
289 return active => ValueTask.CompletedTask;
-
290 };
-
291 }
+
+
+
280 null ,
+
+
282 {
+
283 Text = String.Format(
+
284 CultureInfo.InvariantCulture,
+
285 $"{prefix}: Deploying revision: {0}{1}{2} BYOND Version: {3}{4}" ,
+
286 commitInsert,
+
287 testmergeInsert,
+
288 remoteCommitInsert,
+
+
290 estimatedCompletionTime.HasValue
+
291 ? $" ETA: {estimatedCompletionTime - DateTimeOffset.UtcNow}"
+
292 : String.Empty),
+
293 },
+
294 channelId,
+
295 cancellationToken);
+
296
+
297 return async (errorMessage, dreamMakerOutput) =>
+
298 {
+
+
300 null ,
+
+
302 {
+
303 Text = $"{prefix}: Deployment {(errorMessage == null ? " complete" : " failed")}!" ,
+
304 },
+
305 channelId,
+
306 cancellationToken);
+
307
+
308 return active => ValueTask.CompletedTask;
+
309 };
+
310 }
override string ToString()
EngineType? Engine
The EngineType.
-
-
override async ValueTask SendMessage(Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)
Send a message to the IProvider.A ValueTask representing the running operation.
+
override async ValueTask SendMessage(Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)
Send a message to the IProvider.A ValueTask representing the running operation.
static string GetEngineCompilerPrefix(Api.Models.EngineType engineType)
Get the prefix for messages about deployments.
Represents a message to send to a chat provider.
+
Many to many relationship for Models.RevisionInformation and Models.TestMerge.
+
if(removedTestMerges.Count !=0) fields.Add(new EmbedField("Removed
-
References Tgstation.Server.Api.Models.EngineVersion.Engine , Tgstation.Server.Host.Components.Chat.Providers.Provider.GetEngineCompilerPrefix() , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() , and Tgstation.Server.Api.Models.EngineVersion.ToString() .
+
References Tgstation.Server.Host.Components.Chat.Providers.if() .
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
@@ -1728,9 +1738,9 @@ Here is the call graph for this function:
Address of the server to connect to.
-Definition at line 49 of file IrcProvider.cs .
+Definition at line 50 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
@@ -1756,9 +1766,9 @@ Here is the call graph for this function:
The IAssemblyInformationProvider obtained from constructor, used for the CTCP version string.
-Definition at line 89 of file IrcProvider.cs .
+Definition at line 90 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
@@ -1784,9 +1794,9 @@ Here is the call graph for this function:
Id counter for channelIdMap.
-Definition at line 109 of file IrcProvider.cs .
+Definition at line 110 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
@@ -1812,9 +1822,9 @@ Here is the call graph for this function:
Map of ChannelRepresentation.RealIds to channel names.
-Definition at line 79 of file IrcProvider.cs .
+Definition at line 80 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.MapChannelsImpl() , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.MapChannelsImpl() , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() .
@@ -1840,9 +1850,9 @@ Here is the call graph for this function:
The IrcFeatures client.
-Definition at line 99 of file IrcProvider.cs .
+Definition at line 100 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.MapChannelsImpl() , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.MapChannelsImpl() , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() .
@@ -1868,7 +1878,7 @@ Here is the call graph for this function:
The ValueTask used for IrcConnection.Listen(bool).
-Definition at line 104 of file IrcProvider.cs .
+Definition at line 105 of file IrcProvider.cs .
@@ -1894,9 +1904,9 @@ Here is the call graph for this function:
The FileLoggingConfiguration for the IrcProvider.
-Definition at line 94 of file IrcProvider.cs .
+Definition at line 95 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
@@ -1922,9 +1932,9 @@ Here is the call graph for this function:
Hard limit to sendable message size in bytes.
-Definition at line 38 of file IrcProvider.cs .
+Definition at line 39 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() .
@@ -1950,9 +1960,9 @@ Here is the call graph for this function:
IRC nickname.
-Definition at line 64 of file IrcProvider.cs .
+Definition at line 65 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
@@ -1978,9 +1988,9 @@ Here is the call graph for this function:
Password which will used for authentication.
-Definition at line 69 of file IrcProvider.cs .
+Definition at line 70 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
@@ -2006,9 +2016,9 @@ Here is the call graph for this function:
The IrcPasswordType of password.
-Definition at line 74 of file IrcProvider.cs .
+Definition at line 75 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
@@ -2034,9 +2044,9 @@ Here is the call graph for this function:
Port of the server to connect to.
-Definition at line 54 of file IrcProvider.cs .
+Definition at line 55 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
@@ -2062,9 +2072,9 @@ Here is the call graph for this function:
Length of the preamble when writing a message to the server. Must be summed with the channel name to get the true value.
-Definition at line 33 of file IrcProvider.cs .
+Definition at line 34 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() .
@@ -2090,9 +2100,9 @@ Here is the call graph for this function:
Map of ChannelRepresentation.RealIds to query users.
-Definition at line 84 of file IrcProvider.cs .
+Definition at line 85 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() .
@@ -2118,9 +2128,9 @@ Here is the call graph for this function:
Wether or not this IRC client is to use ssl.
-Definition at line 59 of file IrcProvider.cs .
+Definition at line 60 of file IrcProvider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.IrcProvider() .
@@ -2149,7 +2159,7 @@ Here is the call graph for this function:
Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider .
-Definition at line 44 of file IrcProvider.cs .
+Definition at line 45 of file IrcProvider.cs .
@@ -2177,7 +2187,7 @@ Here is the call graph for this function:
Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider .
-Definition at line 41 of file IrcProvider.cs .
+Definition at line 42 of file IrcProvider.cs .
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a22ba2f5d6507771c3d4ddfe1d3661fcd_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a22ba2f5d6507771c3d4ddfe1d3661fcd_cgraph.map
deleted file mode 100644
index 8a3733058a..0000000000
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a22ba2f5d6507771c3d4ddfe1d3661fcd_cgraph.map
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a22ba2f5d6507771c3d4ddfe1d3661fcd_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a22ba2f5d6507771c3d4ddfe1d3661fcd_cgraph.md5
deleted file mode 100644
index 31fc1eda5a..0000000000
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a22ba2f5d6507771c3d4ddfe1d3661fcd_cgraph.md5
+++ /dev/null
@@ -1 +0,0 @@
-d6f878e243d316a0737fc6c8849857b9
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a22ba2f5d6507771c3d4ddfe1d3661fcd_cgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a22ba2f5d6507771c3d4ddfe1d3661fcd_cgraph.png
deleted file mode 100644
index 961f8cd30e..0000000000
Binary files a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_a22ba2f5d6507771c3d4ddfe1d3661fcd_cgraph.png and /dev/null differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ab72edbeedce165d60ce0f2235ea9e3e6_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ab72edbeedce165d60ce0f2235ea9e3e6_cgraph.map
new file mode 100644
index 0000000000..738024e773
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ab72edbeedce165d60ce0f2235ea9e3e6_cgraph.map
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ab72edbeedce165d60ce0f2235ea9e3e6_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ab72edbeedce165d60ce0f2235ea9e3e6_cgraph.md5
new file mode 100644
index 0000000000..a824a0adbf
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ab72edbeedce165d60ce0f2235ea9e3e6_cgraph.md5
@@ -0,0 +1 @@
+d23adfc640581b5c7e85c72a8d0a63d9
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ab72edbeedce165d60ce0f2235ea9e3e6_cgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ab72edbeedce165d60ce0f2235ea9e3e6_cgraph.png
new file mode 100644
index 0000000000..3a3257dd89
Binary files /dev/null and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_ab72edbeedce165d60ce0f2235ea9e3e6_cgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_aba0049859728d558ecee46cefed5f930_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_aba0049859728d558ecee46cefed5f930_icgraph.map
deleted file mode 100644
index 098db21c8d..0000000000
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_aba0049859728d558ecee46cefed5f930_icgraph.map
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_aba0049859728d558ecee46cefed5f930_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_aba0049859728d558ecee46cefed5f930_icgraph.md5
deleted file mode 100644
index 4702e3e88d..0000000000
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_aba0049859728d558ecee46cefed5f930_icgraph.md5
+++ /dev/null
@@ -1 +0,0 @@
-802fe7082df7923577921fdc4961201c
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_aba0049859728d558ecee46cefed5f930_icgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_aba0049859728d558ecee46cefed5f930_icgraph.png
deleted file mode 100644
index 85405d3542..0000000000
Binary files a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_irc_provider_aba0049859728d558ecee46cefed5f930_icgraph.png and /dev/null differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_message.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_message.html
index d8a26ae4be..f45e49e5f3 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_message.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_message.html
@@ -188,7 +188,7 @@ Properties
Definition at line 13 of file Message.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Message.Message() , and Tgstation.Server.Host.Components.Chat.ChatManager.ProcessMessage() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.Message.Message() , and Tgstation.Server.Host.Components.Chat.ChatManager.ProcessMessage() .
@@ -217,7 +217,7 @@ Properties
Definition at line 18 of file Message.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Message.Message() , and Tgstation.Server.Host.Components.Chat.ChatManager.ProcessMessage() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.Message.Message() , and Tgstation.Server.Host.Components.Chat.ChatManager.ProcessMessage() .
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider-members.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider-members.html
index d449ba5888..a4c6ff99f5 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider-members.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider-members.html
@@ -107,7 +107,7 @@ $(function() {
reconnectTask Tgstation.Server.Host.Components.Chat.Providers.Provider private
reconnectTaskLock Tgstation.Server.Host.Components.Chat.Providers.Provider private
SendMessage (Message? replyTo, MessageContent message, ulong channelId, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider
- SendUpdateMessage (RevisionInformation revisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider
+ SendUpdateMessage (RevisionInformation revisionInformation, RevisionInformation? previousRevisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Chat.Providers.Provider
SetReconnectInterval (uint reconnectInterval, bool connectNow)Tgstation.Server.Host.Components.Chat.Providers.Provider
StopReconnectionTimer ()Tgstation.Server.Host.Components.Chat.Providers.Provider private
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 dfca072f80..b0c0ae389e 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
@@ -93,13 +93,15 @@ Inheritance diagram for Tgstation.Server.Host.Components.Chat.Providers.Provider
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
[legend ]
-
ValueTask< Func< string?, string, ValueTask< Func< bool, ValueTask > > > > SendUpdateMessage (RevisionInformation revisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)
-
Send the message for a deployment.Parameters
+ValueTask< Func< string?, string, ValueTask< Func< bool, ValueTask > > > > SendUpdateMessage (RevisionInformation revisionInformation, RevisionInformation ? previousRevisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, ulong channelId, bool localCommitPushed, CancellationToken cancellationToken)
+ Send the message for a deployment.Parameters
@@ -415,7 +418,7 @@ Private Attributes
Returns A ValueTask representing the running operation.
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() .
@@ -469,11 +472,11 @@ Here is the caller graph for this function:
139 Logger .LogTrace(
"Disconnected" );
140 }
141 }
-Task StopReconnectionTimer()
Stops and awaits the reconnectTask.
+Task StopReconnectionTimer()
Stops and awaits the reconnectTask.
ValueTask DisconnectImpl(CancellationToken cancellationToken)
Gracefully disconnects the provider.
bool Connected
If the IProvider is currently connected.
-References Tgstation.Server.Host.Components.Chat.Providers.Provider.Connected , Tgstation.Server.Host.Components.Chat.Providers.Provider.DisconnectImpl() , Tgstation.Server.Api.Rights.List , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
+References Tgstation.Server.Host.Components.Chat.Providers.Provider.Connected , Tgstation.Server.Host.Components.Chat.Providers.Provider.DisconnectImpl() , Tgstation.Server.Api.Rights.List , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
@@ -522,7 +525,7 @@ Here is the call graph for this function:
Returns A ValueTask representing the running operation.
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.Disconnect() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.Disconnect() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() .
@@ -565,7 +568,7 @@ Here is the caller graph for this function:
-Reimplemented in Tgstation.Server.Host.Components.Chat.Providers.IrcProvider .
+Reimplemented in Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider .
Definition at line 120 of file Provider.cs .
121 {
@@ -577,9 +580,9 @@ Here is the caller graph for this function:
127 Logger .LogTrace(
"Disposed" );
128 }
bool Disposed
If the IProvider was disposed.
-void EnqueueMessage(Message? message)
Queues a message for NextMessage(CancellationToken).
+void EnqueueMessage(Message? message)
Queues a message for NextMessage(CancellationToken).
-References Tgstation.Server.Host.Components.Chat.Providers.Provider.Disposed , Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage() , Tgstation.Server.Api.Rights.List , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
+References Tgstation.Server.Host.Components.Chat.Providers.Provider.Disposed , Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage() , Tgstation.Server.Api.Rights.List , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
@@ -627,33 +630,39 @@ Here is the call graph for this function:
-Definition at line 238 of file Provider.cs .
- 239 {
-
-
241 Logger .LogTrace(
"Requesting channel remap..." );
-
242
-
-
244 {
-
-
-
247 }
-
248 }
+
Definition at line 239 of file Provider.cs .
+
240 {
+
+
242 Logger .LogTrace(
"Requesting channel remap..." );
+
243
+
+
245 {
+
+
+
248 }
+
249 }
References Tgstation.Server.Api.Rights.List , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , Tgstation.Server.Host.Components.Chat.Providers.Provider.messageQueue , and Tgstation.Server.Host.Components.Chat.Providers.Provider.nextMessage .
-
Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.DisposeAsync() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() .
+
Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.DisposeAsync() , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.MapChannelsImpl() , Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.RespondAsync() , and Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendMessage() .
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -694,15 +703,15 @@ Here is the caller graph for this function:
References Tgstation.Server.Api.Rights.List .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendUpdateMessage() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendUpdateMessage() .
@@ -953,65 +962,65 @@ Note that private messages will come in the form of Returns A Task representing the running operation.
-Definition at line 280 of file Provider.cs .
- 281 {
-
282 do
-
283 {
-
284 try
-
285 {
-
-
-
288 else
-
-
-
291 {
-
-
-
294
-
-
-
-
298 {
-
299 try
-
300 {
-
-
302 {
-
303 Logger .LogTrace(
"Disconnecting..." );
-
-
305 }
-
306 else
-
307 Logger .LogTrace(
"Already disconnected not doing disconnection attempt!" );
-
308
-
309 Logger .LogTrace(
"Connecting..." );
-
-
311 Logger .LogTrace(
"Connected successfully" );
-
-
313 }
-
314 catch
-
315 {
-
316
-
-
318 throw ;
-
319 }
-
320 },
-
-
322
-
-
324 }
-
325 }
-
-
327 {
-
328 Logger .LogTrace(
e ,
"ReconnectionLoop cancelled" );
-
329 }
-
-
331 {
-
332 Logger .LogError(
e ,
"Error reconnecting!" );
-
333 }
-
334 }
-
-
336
-
337 Logger .LogTrace(
"ReconnectionLoop exiting..." );
-
338 }
+
Definition at line 281 of file Provider.cs .
+
282 {
+
283 do
+
284 {
+
285 try
+
286 {
+
+
+
289 else
+
+
+
292 {
+
+
+
295
+
+
+
+
299 {
+
300 try
+
301 {
+
+
303 {
+
304 Logger .LogTrace(
"Disconnecting..." );
+
+
306 }
+
307 else
+
308 Logger .LogTrace(
"Already disconnected not doing disconnection attempt!" );
+
309
+
310 Logger .LogTrace(
"Connecting..." );
+
+
312 Logger .LogTrace(
"Connected successfully" );
+
+
314 }
+
315 catch
+
316 {
+
317
+
+
319 throw ;
+
320 }
+
321 },
+
+
323
+
+
325 }
+
326 }
+
+
328 {
+
329 Logger .LogTrace(
e ,
"ReconnectionLoop cancelled" );
+
330 }
+
+
332 {
+
333 Logger .LogError(
e ,
"Error reconnecting!" );
+
334 }
+
335 }
+
+
337
+
338 Logger .LogTrace(
"ReconnectionLoop exiting..." );
+
339 }
ValueTask Connect(CancellationToken cancellationToken)
Attempt to connect the Provider.
Instance? Instance
The parent Models.Instance.
@@ -1023,7 +1032,7 @@ Note that private messages will come in the form of
ChatBotRights
Rights for chat bots.
@ Api
The ApiHeaders.ApiVersionHeader header is missing or invalid.
-References Tgstation.Server.Host.Components.Chat.Providers.Provider.Connect() , Tgstation.Server.Host.Components.Chat.Providers.Provider.Connected , Tgstation.Server.Host.Models.Job.Create() , Tgstation.Server.Host.Utils.AsyncDelayer.Delay() , Tgstation.Server.Host.Components.Chat.Providers.Provider.DisconnectImpl() , Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage() , Tgstation.Server.Host.Components.Chat.Providers.Provider.initialConnectionTcs , Tgstation.Server.Host.Models.ChatBot.Instance , Tgstation.Server.Host.Components.Chat.Providers.Provider.jobManager , Tgstation.Server.Api.Rights.List , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , Tgstation.Server.Host.Jobs.IJobManager.RegisterOperation() , and Tgstation.Server.Host.Jobs.IJobManager.WaitForJobCompletion() .
+References Tgstation.Server.Host.Components.Chat.Providers.Provider.Connect() , Tgstation.Server.Host.Components.Chat.Providers.Provider.Connected , Tgstation.Server.Host.Models.Job.Create() , Tgstation.Server.Host.Utils.AsyncDelayer.Delay() , Tgstation.Server.Host.Components.Chat.Providers.Provider.DisconnectImpl() , Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage() , Tgstation.Server.Host.Components.Chat.Providers.Provider.initialConnectionTcs , Tgstation.Server.Host.Models.ChatBot.Instance , Tgstation.Server.Host.Components.Chat.Providers.Provider.jobManager , Tgstation.Server.Api.Rights.List , Tgstation.Server.Host.Components.Chat.Providers.Provider.Logger , Tgstation.Server.Host.Jobs.IJobManager.RegisterOperation() , and Tgstation.Server.Host.Jobs.IJobManager.WaitForJobCompletion() .
Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.SetReconnectInterval() .
-
-◆ SendUpdateMessage()
+
+◆ SendUpdateMessage()
@@ -1138,6 +1147,12 @@ Here is the caller graph for this function:
RevisionInformation
revisionInformation ,
+
+
+
+ RevisionInformation ?
+ previousRevisionInformation ,
+
@@ -1196,6 +1211,7 @@ Here is the caller graph for this function:
Send the message for a deployment.
Parameters
revisionInformation The RevisionInformation of the deployment.
+ previousRevisionInformation The RevisionInformation of the previous deployment if any.
engineVersion The Api.Models.EngineVersion of the deployment.
estimatedCompletionTime The optional DateTimeOffset the deployment is expected to be completed at.
gitHubOwner The repository GitHub owner, if any.
@@ -1209,7 +1225,7 @@ Here is the caller graph for this function:
Returns A ValueTask<TResult> resulting in a Func<T1, T2, TResult> to call to update the message at the deployment's conclusion. Parameters: Error message if any, DreamMaker output if any. Returns another callback which should be called to mark the deployment as active.
-Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider .
+Implements Tgstation.Server.Host.Components.Chat.Providers.IProvider .
@@ -1267,10 +1283,10 @@ Here is the caller graph for this function:
194 }
CancellationTokenSource? reconnectCts
CancellationTokenSource for reconnectTask.
-async Task ReconnectionLoop(uint reconnectInterval, bool connectNow, CancellationToken cancellationToken)
Creates a Task that will attempt to reconnect the Provider every reconnectInterval minutes.
+async Task ReconnectionLoop(uint reconnectInterval, bool connectNow, CancellationToken cancellationToken)
Creates a Task that will attempt to reconnect the Provider every reconnectInterval minutes.
Task? reconnectTask
The auto reconnect Task.
-References Tgstation.Server.Api.Rights.List , Tgstation.Server.Host.Components.Chat.Providers.Provider.reconnectCts , Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() , Tgstation.Server.Host.Components.Chat.Providers.Provider.reconnectTask , Tgstation.Server.Host.Components.Chat.Providers.Provider.reconnectTaskLock , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
+References Tgstation.Server.Api.Rights.List , Tgstation.Server.Host.Components.Chat.Providers.Provider.reconnectCts , Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() , Tgstation.Server.Host.Components.Chat.Providers.Provider.reconnectTask , Tgstation.Server.Host.Components.Chat.Providers.Provider.reconnectTaskLock , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
@@ -1326,24 +1342,24 @@ Here is the call graph for this function:
Stops and awaits the reconnectTask.
Returns A Task representing the running operation.
-Definition at line 254 of file Provider.cs .
-
Definition at line 50 of file Provider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.MapChannels() , Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.MapChannels() , Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() .
@@ -1418,7 +1434,7 @@ Here is the caller graph for this function:
Definition at line 40 of file Provider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() .
@@ -1446,7 +1462,7 @@ Here is the caller graph for this function:
Definition at line 45 of file Provider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage() , Tgstation.Server.Host.Components.Chat.Providers.Provider.NextMessage() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage() , Tgstation.Server.Host.Components.Chat.Providers.Provider.NextMessage() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider() .
@@ -1474,7 +1490,7 @@ Here is the caller graph for this function:
Definition at line 60 of file Provider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage() , Tgstation.Server.Host.Components.Chat.Providers.Provider.NextMessage() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage() , Tgstation.Server.Host.Components.Chat.Providers.Provider.NextMessage() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider() .
@@ -1502,7 +1518,7 @@ Here is the caller graph for this function:
Definition at line 70 of file Provider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.SetReconnectInterval() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.SetReconnectInterval() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
@@ -1530,7 +1546,7 @@ Here is the caller graph for this function:
Definition at line 65 of file Provider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.SetReconnectInterval() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.SetReconnectInterval() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
@@ -1558,7 +1574,7 @@ Here is the caller graph for this function:
Definition at line 55 of file Provider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider() , Tgstation.Server.Host.Components.Chat.Providers.Provider.SetReconnectInterval() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider() , Tgstation.Server.Host.Components.Chat.Providers.Provider.SetReconnectInterval() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
@@ -1673,7 +1689,7 @@ Here is the caller graph for this function:
Definition at line 111 of file Provider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.Disconnect() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.Disconnect() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() .
@@ -1761,7 +1777,7 @@ Here is the caller graph for this function:
Definition at line 35 of file Provider.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.Providers.Provider.Disconnect() , Tgstation.Server.Host.Components.Chat.Providers.Provider.DisposeAsync() , Tgstation.Server.Host.Components.Chat.Providers.Provider.EnqueueMessage() , Tgstation.Server.Host.Components.Chat.Providers.Provider.Provider() , Tgstation.Server.Host.Components.Chat.Providers.Provider.ReconnectionLoop() , Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() , and Tgstation.Server.Host.Components.Chat.Providers.Provider.StopReconnectionTimer() .
+Referenced by Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.Connect() , ConvertEmbed() , Tgstation.Server.Host.Components.Chat.Providers.Provider.Disconnect() , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.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.DiscordProvider.GetAllAccessibleTextChannels() , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.MapChannelsImpl() , 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.DiscordProvider.RespondAsync() , 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_chat_1_1_providers_1_1_provider__inherit__graph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider__inherit__graph.map
index a9ea715c23..3993b0a0dd 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider__inherit__graph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider__inherit__graph.map
@@ -1,9 +1,11 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider__inherit__graph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider__inherit__graph.md5
index 39d0f90531..4981310fd5 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider__inherit__graph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider__inherit__graph.md5
@@ -1 +1 @@
-9f6ee08b5181c6c26cb1319c4741a947
\ No newline at end of file
+e5dff1a08377830eca504f728b3ef26e
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider__inherit__graph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider__inherit__graph.png
index d6487819fb..a287a92574 100644
Binary files a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider__inherit__graph.png and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider__inherit__graph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a6a6dd225ccb27e30c2cc06562b035ebe_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a6a6dd225ccb27e30c2cc06562b035ebe_icgraph.map
index 63112e12f3..24da140ebf 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a6a6dd225ccb27e30c2cc06562b035ebe_icgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a6a6dd225ccb27e30c2cc06562b035ebe_icgraph.map
@@ -1,9 +1,15 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a6a6dd225ccb27e30c2cc06562b035ebe_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a6a6dd225ccb27e30c2cc06562b035ebe_icgraph.md5
index 03a5d1def3..a86fc2468a 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a6a6dd225ccb27e30c2cc06562b035ebe_icgraph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a6a6dd225ccb27e30c2cc06562b035ebe_icgraph.md5
@@ -1 +1 @@
-57177943d82a39a426a11ca2e3583dbc
\ No newline at end of file
+7bed4a214969705852bd442f51062148
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a6a6dd225ccb27e30c2cc06562b035ebe_icgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a6a6dd225ccb27e30c2cc06562b035ebe_icgraph.png
index c5662699bb..f198e1dca3 100644
Binary files a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a6a6dd225ccb27e30c2cc06562b035ebe_icgraph.png and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a6a6dd225ccb27e30c2cc06562b035ebe_icgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a838ad29e96221a58a71b29358c086c0c_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a838ad29e96221a58a71b29358c086c0c_icgraph.map
index 0dec99891d..2cf9dcc03a 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a838ad29e96221a58a71b29358c086c0c_icgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a838ad29e96221a58a71b29358c086c0c_icgraph.map
@@ -1,5 +1,5 @@
-
-
-
+
+
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a838ad29e96221a58a71b29358c086c0c_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a838ad29e96221a58a71b29358c086c0c_icgraph.md5
index 2292273d0c..46b713538f 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a838ad29e96221a58a71b29358c086c0c_icgraph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a838ad29e96221a58a71b29358c086c0c_icgraph.md5
@@ -1 +1 @@
-ca38728d988c93ae0d4723e261277ab5
\ No newline at end of file
+b708af7e0a2cecd3d23252dda05b599f
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a838ad29e96221a58a71b29358c086c0c_icgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a838ad29e96221a58a71b29358c086c0c_icgraph.png
index 0813e2f57c..f90f075a49 100644
Binary files a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a838ad29e96221a58a71b29358c086c0c_icgraph.png and b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_chat_1_1_providers_1_1_provider_a838ad29e96221a58a71b29358c086c0c_icgraph.png differ
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker-members.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker-members.html
index 6df4559016..985d337508 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker-members.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker-members.html
@@ -85,7 +85,7 @@ $(function() {
CalculateExpectedDeploymentTime (IDatabaseContext databaseContext, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Deployment.DreamMaker private
chatManager Tgstation.Server.Host.Components.Deployment.DreamMaker private
CleanupFailedCompile (Models.CompileJob job, IRemoteDeploymentManager remoteDeploymentManager, Exception exception)Tgstation.Server.Host.Components.Deployment.DreamMaker private
- Compile (Models.Job job, Models.RevisionInformation revisionInformation, Api.Models.Internal.DreamMakerSettings dreamMakerSettings, DreamDaemonLaunchParameters launchParameters, IRepository repository, IRemoteDeploymentManager remoteDeploymentManager, JobProgressReporter progressReporter, TimeSpan? estimatedDuration, bool localCommitExistsOnRemote, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Deployment.DreamMaker private
+ Compile (Models.Job job, Models.CompileJob? oldCompileJob, Models.RevisionInformation revisionInformation, Api.Models.Internal.DreamMakerSettings dreamMakerSettings, DreamDaemonLaunchParameters launchParameters, IRepository repository, IRemoteDeploymentManager remoteDeploymentManager, JobProgressReporter progressReporter, TimeSpan? estimatedDuration, bool localCommitExistsOnRemote, CancellationToken cancellationToken)Tgstation.Server.Host.Components.Deployment.DreamMaker private
compileJobConsumer Tgstation.Server.Host.Components.Deployment.DreamMaker private
configuration Tgstation.Server.Host.Components.Deployment.DreamMaker private
currentChatCallback Tgstation.Server.Host.Components.Deployment.DreamMaker private
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker.html
index 22343c332a..2bb5cfbf4b 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker.html
@@ -186,9 +186,9 @@ Private Member Functions
async ValueTask< TimeSpan?> CalculateExpectedDeploymentTime (IDatabaseContext databaseContext, CancellationToken cancellationToken)
Calculate the average length of a deployment using a given databaseContext .
-async ValueTask< Models.CompileJob > Compile (Models.Job job, Models.RevisionInformation revisionInformation, Api.Models.Internal.DreamMakerSettings dreamMakerSettings, DreamDaemonLaunchParameters launchParameters, IRepository repository, IRemoteDeploymentManager remoteDeploymentManager, JobProgressReporter progressReporter, TimeSpan? estimatedDuration, bool localCommitExistsOnRemote, CancellationToken cancellationToken)
- Run the compile implementation.
-
+async ValueTask< Models.CompileJob > Compile (Models.Job job, Models.CompileJob ? oldCompileJob, Models.RevisionInformation revisionInformation, Api.Models.Internal.DreamMakerSettings dreamMakerSettings, DreamDaemonLaunchParameters launchParameters, IRepository repository, IRemoteDeploymentManager remoteDeploymentManager, JobProgressReporter progressReporter, TimeSpan? estimatedDuration, bool localCommitExistsOnRemote, CancellationToken cancellationToken)
+ Run the compile implementation.
+
async ValueTask RunCompileJob (JobProgressReporter progressReporter, Models.CompileJob job, Api.Models.Internal.DreamMakerSettings dreamMakerSettings, DreamDaemonLaunchParameters launchParameters, IEngineExecutableLock engineLock, IRepository repository, IRemoteDeploymentManager remoteDeploymentManager, CancellationToken cancellationToken)
Executes and populate a given job .
@@ -271,7 +271,7 @@ Private Attributes
lock object for deploying.
Func< string?, string, Action< bool > >? currentChatCallback
- The active callback from IChatManager.QueueDeploymentMessage .
+ The active callback from IChatManager.QueueDeploymentMessage .
string? currentDreamMakerOutput
Cached for currentChatCallback.
@@ -508,32 +508,32 @@ Static Private Attributes
Returns A ValueTask<TResult> resulting in the average TimeSpan of the 10 previous deployments or null if there are none.
-Definition at line 451 of file DreamMaker.cs .
- 452 {
-
453 var previousCompileJobs = await databaseContext
-
-
455 .AsQueryable()
-
456 .Where(x => x.Job.Instance!.Id ==
metadata .Id)
-
457 .OrderByDescending(x => x.Job.StoppedAt)
-
458 .Take(10)
-
459 .Select(x => new
-
460 {
-
461 StoppedAt = x.Job.StoppedAt!.Value,
-
462 StartedAt = x.Job.StartedAt!.Value,
-
463 })
-
464 .ToListAsync(cancellationToken);
-
465
-
466 TimeSpan? averageSpan = null ;
-
467 if (previousCompileJobs.Count != 0)
-
468 {
-
469 var totalSpan = TimeSpan.Zero;
-
470 foreach (var previousCompileJob in previousCompileJobs)
-
471 totalSpan += previousCompileJob.StoppedAt - previousCompileJob.StartedAt;
-
472 averageSpan = totalSpan / previousCompileJobs.Count;
-
473 }
-
474
-
475 return averageSpan;
-
476 }
+
Definition at line 455 of file DreamMaker.cs .
+
456 {
+
457 var previousCompileJobs = await databaseContext
+
+
459 .AsQueryable()
+
460 .Where(x => x.Job.Instance!.Id ==
metadata .Id)
+
461 .OrderByDescending(x => x.Job.StoppedAt)
+
462 .Take(10)
+
463 .Select(x => new
+
464 {
+
465 StoppedAt = x.Job.StoppedAt!.Value,
+
466 StartedAt = x.Job.StartedAt!.Value,
+
467 })
+
468 .ToListAsync(cancellationToken);
+
469
+
470 TimeSpan? averageSpan = null ;
+
471 if (previousCompileJobs.Count != 0)
+
472 {
+
473 var totalSpan = TimeSpan.Zero;
+
474 foreach (var previousCompileJob in previousCompileJobs)
+
475 totalSpan += previousCompileJob.StoppedAt - previousCompileJob.StartedAt;
+
476 averageSpan = totalSpan / previousCompileJobs.Count;
+
477 }
+
478
+
479 return averageSpan;
+
480 }
IDatabaseCollection< CompileJob > CompileJobs
The CompileJobs in the IDatabaseContext.
References Tgstation.Server.Host.Database.IDatabaseContext.CompileJobs , and Tgstation.Server.Host.Components.Deployment.DreamMaker.metadata .
@@ -611,41 +611,41 @@ Here is the caller graph for this function:
Returns A ValueTask representing the running operation.
-Definition at line 1010 of file DreamMaker.cs .
- 1011 {
-
1012 async ValueTask CleanDir()
-
1013 {
-
-
1015 {
-
1016 logger .LogDebug(
"Not cleaning up errored deployment directory {guid} due to config." , job.DirectoryName);
-
1017 return ;
-
1018 }
-
1019
-
1020 logger .LogTrace(
"Cleaning compile directory..." );
-
1021 var jobPath = job.DirectoryName!.Value.ToString();
-
1022 try
-
1023 {
-
1024
-
-
-
1027 }
-
-
1029 {
-
-
1031 }
-
1032 }
-
1033
-
1034 var dirCleanTask = CleanDir();
-
1035
-
1036 var failRemoteDeployTask = remoteDeploymentManager.
FailDeployment (
-
1037 job,
-
-
1039 CancellationToken.None);
+
Definition at line 1017 of file DreamMaker.cs .
+
1018 {
+
1019 async ValueTask CleanDir()
+
1020 {
+
+
1022 {
+
1023 logger .LogDebug(
"Not cleaning up errored deployment directory {guid} due to config." , job.DirectoryName);
+
1024 return ;
+
1025 }
+
1026
+
1027 logger .LogTrace(
"Cleaning compile directory..." );
+
1028 var jobPath = job.DirectoryName!.Value.ToString();
+
1029 try
+
1030 {
+
1031
+
+
+
1034 }
+
+
1036 {
+
+
1038 }
+
1039 }
1040
-
-
1042 dirCleanTask,
-
1043 failRemoteDeployTask);
-
1044 }
+
1041 var dirCleanTask = CleanDir();
+
1042
+
1043 var failRemoteDeployTask = remoteDeploymentManager.
FailDeployment (
+
1044 job,
+
+
1046 CancellationToken.None);
+
1047
+
+
1049 dirCleanTask,
+
1050 failRemoteDeployTask);
+
1051 }
Extension methods for the ValueTask and ValueTask<TResult> classes.
static async ValueTask WhenAll(IEnumerable< ValueTask > tasks)
Fully await a given list of tasks .
@@ -693,8 +693,8 @@ Here is the caller graph for this function:
-
-◆ Compile()
+
+◆ Compile()
@@ -708,6 +708,12 @@ Here is the caller graph for this function:
Models::Job
job ,
+
+
+
+ Models::CompileJob ?
+ oldCompileJob ,
+
@@ -779,6 +785,7 @@ Here is the caller graph for this function:
Parameters
job The currently running Job.
+ oldCompileJob The optional CompileJob of the previous deployment.
revisionInformation The RevisionInformation.
dreamMakerSettings The Api.Models.Internal.DreamMakerSettings.
launchParameters The DreamDaemonLaunchParameters.
@@ -793,103 +800,105 @@ Here is the caller graph for this function:
Returns A ValueTask<TResult> resulting in the completed CompileJob.
-Definition at line 492 of file DreamMaker.cs .
- 503 {
-
504 logger .LogTrace(
"Begin Compile" );
-
505
-
506 using var progressCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
-
507
-
508 progressReporter.StageName = "Reserving BYOND version" ;
-
509 var progressTask =
ProgressTask (progressReporter, estimatedDuration, progressCts.Token);
-
510 try
-
511 {
-
-
-
514 revisionInformation,
-
515 engineLock.Version,
-
516 DateTimeOffset.UtcNow + estimatedDuration,
-
-
-
519 localCommitExistsOnRemote);
-
520
-
521 var compileJob = new Models.CompileJob(job, revisionInformation, engineLock.Version.ToString())
-
522 {
-
523 DirectoryName = Guid.NewGuid(),
-
524 DmeName = dreamMakerSettings.ProjectName,
-
525 RepositoryOrigin = repository.
Origin .ToString(),
-
526 };
+
Definition at line 497 of file DreamMaker.cs .
+
509 {
+
510 logger .LogTrace(
"Begin Compile" );
+
511
+
512 using var progressCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
+
513
+
514 progressReporter.StageName = "Reserving BYOND version" ;
+
515 var progressTask =
ProgressTask (progressReporter, estimatedDuration, progressCts.Token);
+
516 try
+
517 {
+
+
+
520 revisionInformation,
+
+
522 engineLock.Version,
+
523 DateTimeOffset.UtcNow + estimatedDuration,
+
+
+
526 localCommitExistsOnRemote);
527
-
528 progressReporter.StageName = "Creating remote deployment notification" ;
-
-
530 repository,
-
531 compileJob,
-
532 cancellationToken);
-
533
-
534 logger .LogTrace(
"Deployment will timeout at {timeoutTime}" , DateTimeOffset.UtcNow + dreamMakerSettings.Timeout!.Value);
-
535 using var timeoutTokenSource = new CancellationTokenSource(dreamMakerSettings.Timeout.Value);
-
536 var timeoutToken = timeoutTokenSource.Token;
-
537 using (timeoutToken.Register(() =>
logger .LogWarning(
"Deployment timed out!" )))
-
538 {
-
539 using var combinedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(timeoutToken, cancellationToken);
-
540 try
-
541 {
-
-
543 progressReporter,
-
544 compileJob,
-
545 dreamMakerSettings,
-
546 launchParameters,
-
547 engineLock,
-
548 repository,
-
549 remoteDeploymentManager,
-
550 combinedTokenSource.Token);
-
551 }
-
552 catch (OperationCanceledException) when (timeoutToken.IsCancellationRequested)
-
553 {
-
-
555 }
-
556 }
-
557
-
558 return compileJob;
-
559 }
-
560 catch (OperationCanceledException)
-
561 {
-
562
-
563 progressReporter.StageName = "Running CompileCancelled event" ;
-
-
565 throw ;
+
528 var compileJob = new Models.CompileJob(job, revisionInformation, engineLock.Version.ToString())
+
529 {
+
530 DirectoryName = Guid.NewGuid(),
+
531 DmeName = dreamMakerSettings.ProjectName,
+
532 RepositoryOrigin = repository.
Origin .ToString(),
+
533 };
+
534
+
535 progressReporter.StageName = "Creating remote deployment notification" ;
+
+
537 repository,
+
538 compileJob,
+
539 cancellationToken);
+
540
+
541 logger .LogTrace(
"Deployment will timeout at {timeoutTime}" , DateTimeOffset.UtcNow + dreamMakerSettings.Timeout!.Value);
+
542 using var timeoutTokenSource = new CancellationTokenSource(dreamMakerSettings.Timeout.Value);
+
543 var timeoutToken = timeoutTokenSource.Token;
+
544 using (timeoutToken.Register(() =>
logger .LogWarning(
"Deployment timed out!" )))
+
545 {
+
546 using var combinedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(timeoutToken, cancellationToken);
+
547 try
+
548 {
+
+
550 progressReporter,
+
551 compileJob,
+
552 dreamMakerSettings,
+
553 launchParameters,
+
554 engineLock,
+
555 repository,
+
556 remoteDeploymentManager,
+
557 combinedTokenSource.Token);
+
558 }
+
559 catch (OperationCanceledException) when (timeoutToken.IsCancellationRequested)
+
560 {
+
+
562 }
+
563 }
+
564
+
565 return compileJob;
566 }
-
567 finally
+
567 catch (OperationCanceledException)
568 {
-
569 progressCts.Cancel();
-
570 await progressTask;
-
571 }
-
572 }
+
569
+
570 progressReporter.StageName = "Running CompileCancelled event" ;
+
+
572 throw ;
+
573 }
+
574 finally
+
575 {
+
576 progressCts.Cancel();
+
577 await progressTask;
+
578 }
+
579 }
+
Func< string?, string, Action< bool > >? currentChatCallback
The active callback from IChatManager.QueueDeploymentMessage.
-
async ValueTask ProgressTask(JobProgressReporter progressReporter, TimeSpan? estimatedDuration, CancellationToken cancellationToken)
Gradually triggers a given progressReporter over a given estimatedDuration .
-
async ValueTask RunCompileJob(JobProgressReporter progressReporter, Models.CompileJob job, Api.Models.Internal.DreamMakerSettings dreamMakerSettings, DreamDaemonLaunchParameters launchParameters, IEngineExecutableLock engineLock, IRepository repository, IRemoteDeploymentManager remoteDeploymentManager, CancellationToken cancellationToken)
Executes and populate a given job .
+
async ValueTask ProgressTask(JobProgressReporter progressReporter, TimeSpan? estimatedDuration, CancellationToken cancellationToken)
Gradually triggers a given progressReporter over a given estimatedDuration .
+
async ValueTask RunCompileJob(JobProgressReporter progressReporter, Models.CompileJob job, Api.Models.Internal.DreamMakerSettings dreamMakerSettings, DreamDaemonLaunchParameters launchParameters, IEngineExecutableLock engineLock, IRepository repository, IRemoteDeploymentManager remoteDeploymentManager, CancellationToken cancellationToken)
Executes and populate a given job .
Operation exceptions thrown from the context of a Models.Job.
-
Func< string?, string, Action< bool > > QueueDeploymentMessage(Models.RevisionInformation revisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, bool localCommitPushed)
Send the message for a deployment to configured deployment channels.
+
Func< string?, string, Action< bool > > QueueDeploymentMessage(Models.RevisionInformation revisionInformation, Models.RevisionInformation? previousRevisionInformation, Api.Models.EngineVersion engineVersion, DateTimeOffset? estimatedCompletionTime, string? gitHubOwner, string? gitHubRepo, bool localCommitPushed)
Send the message for a deployment to configured deployment channels.
ValueTask StartDeployment(Api.Models.Internal.IGitRemoteInformation remoteInformation, CompileJob compileJob, CancellationToken cancellationToken)
Start a deployment for a given compileJob .
ValueTask< IEngineExecutableLock > UseExecutables(EngineVersion? requiredVersion, string? trustDmbFullPath, CancellationToken cancellationToken)
Lock the current installation's location and return a IEngineExecutableLock.
Uri Origin
The current origin remote the IRepository is using.
ErrorCode
Types of Response.ErrorMessageResponses that the API may return.
-
References Tgstation.Server.Host.Components.Deployment.DreamMaker.chatManager , Tgstation.Server.Host.Components.Deployment.DreamMaker.currentChatCallback , Tgstation.Server.Host.Components.Deployment.DreamMaker.engineManager , Tgstation.Server.Host.Components.Deployment.DreamMaker.eventConsumer , Tgstation.Server.Host.Components.Events.IEventConsumer.HandleEvent() , Tgstation.Server.Host.Components.Deployment.DreamMaker.logger , Tgstation.Server.Host.Components.Repository.IRepository.Origin , Tgstation.Server.Host.Components.Deployment.DreamMaker.ProgressTask() , Tgstation.Server.Host.Components.Chat.IChatManager.QueueDeploymentMessage() , Tgstation.Server.Api.Models.Internal.IGitRemoteInformation.RemoteRepositoryName , Tgstation.Server.Api.Models.Internal.IGitRemoteInformation.RemoteRepositoryOwner , Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() , Tgstation.Server.Host.Components.Deployment.Remote.IRemoteDeploymentManager.StartDeployment() , and Tgstation.Server.Host.Components.Engine.IEngineManager.UseExecutables() .
+
References Tgstation.Server.Host.Components.Deployment.DreamMaker.chatManager , Tgstation.Server.Host.Components.Deployment.DreamMaker.currentChatCallback , Tgstation.Server.Host.Components.Deployment.DreamMaker.engineManager , Tgstation.Server.Host.Components.Deployment.DreamMaker.eventConsumer , Tgstation.Server.Host.Components.Events.IEventConsumer.HandleEvent() , Tgstation.Server.Host.Components.Deployment.DreamMaker.logger , Tgstation.Server.Host.Components.Repository.IRepository.Origin , Tgstation.Server.Host.Components.Deployment.DreamMaker.ProgressTask() , Tgstation.Server.Host.Components.Chat.IChatManager.QueueDeploymentMessage() , Tgstation.Server.Api.Models.Internal.IGitRemoteInformation.RemoteRepositoryName , Tgstation.Server.Api.Models.Internal.IGitRemoteInformation.RemoteRepositoryOwner , Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() , Tgstation.Server.Host.Components.Deployment.Remote.IRemoteDeploymentManager.StartDeployment() , and Tgstation.Server.Host.Components.Engine.IEngineManager.UseExecutables() .
Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.DeploymentProcess() .
-
-
+
+
-
+
@@ -930,8 +939,8 @@ Here is the call graph for this function:
-
-
+
+
@@ -1120,117 +1129,120 @@ Here is the caller graph for this function:
336 }
337 });
338
-
339 var likelyPushedTestMergeCommit =
-
340 repositorySettings!.PushTestMergeCommits!.Value
-
341 && repositorySettings.AccessToken != null
-
342 && repositorySettings.AccessUser != null ;
-
343 using (repo)
-
-
345 job,
-
346 revInfo!,
-
347 dreamMakerSettings!,
-
348 ddSettings!,
-
349 repo!,
-
350 remoteDeploymentManager!,
-
351 progressReporter,
-
352 averageSpan,
-
353 likelyPushedTestMergeCommit,
-
354 cancellationToken);
-
355
-
-
357 try
-
358 {
-
-
360 async databaseContext =>
-
361 {
-
362 var fullJob = compileJob.Job;
-
363 compileJob.Job = new Models.Job(job.Require(x => x.Id));
-
364 var fullRevInfo = compileJob.RevisionInformation;
-
365 compileJob.RevisionInformation = new Models.RevisionInformation
-
366 {
-
-
368 };
-
369
-
370 databaseContext.Jobs.Attach(compileJob.Job);
-
371 databaseContext.RevisionInformations.Attach(compileJob.RevisionInformation);
-
372 databaseContext.CompileJobs.Add(compileJob);
+
339 Models.CompileJob? oldCompileJob;
+
340 using (repo)
+
341 {
+
342 var likelyPushedTestMergeCommit =
+
343 repositorySettings!.PushTestMergeCommits!.Value
+
344 && repositorySettings.AccessToken != null
+
345 && repositorySettings.AccessUser != null ;
+
+
+
348 job,
+
349 oldCompileJob,
+
350 revInfo!,
+
351 dreamMakerSettings!,
+
352 ddSettings!,
+
353 repo!,
+
354 remoteDeploymentManager!,
+
355 progressReporter,
+
356 averageSpan,
+
357 likelyPushedTestMergeCommit,
+
358 cancellationToken);
+
359 }
+
360
+
361 try
+
362 {
+
+
364 async databaseContext =>
+
365 {
+
366 var fullJob = compileJob.Job;
+
367 compileJob.Job = new Models.Job(job.Require(x => x.Id));
+
368 var fullRevInfo = compileJob.RevisionInformation;
+
369 compileJob.RevisionInformation = new Models.RevisionInformation
+
370 {
+
+
372 };
373
-
374
-
375 await databaseContext.Save(cancellationToken);
-
376 logger .LogTrace(
"Created CompileJob {compileJobId}" , compileJob.Id);
-
377 try
-
378 {
-
-
-
381 success = true ;
-
382 }
-
383 catch
-
384 {
-
385
-
386 databaseContext.CompileJobs.Remove(compileJob);
-
387
-
388
-
389 await databaseContext.Save(CancellationToken.None);
-
390 throw ;
-
391 }
-
392
-
393 compileJob.Job = fullJob;
-
394 compileJob.RevisionInformation = fullRevInfo;
-
395 });
-
396 }
-
-
398 {
-
-
400 throw ;
-
401 }
-
402
-
-
404 compileJob,
-
-
406 repositorySettings,
-
407 repoOwner,
-
408 repoName,
-
409 cancellationToken);
-
410
-
-
412
-
413 try
-
414 {
-
-
416 }
-
+
374 databaseContext.Jobs.Attach(compileJob.Job);
+
375 databaseContext.RevisionInformations.Attach(compileJob.RevisionInformation);
+
376 databaseContext.CompileJobs.Add(compileJob);
+
377
+
378
+
379 await databaseContext.Save(cancellationToken);
+
380 logger .LogTrace(
"Created CompileJob {compileJobId}" , compileJob.Id);
+
381 try
+
382 {
+
+
+
385 success = true ;
+
386 }
+
387 catch
+
388 {
+
389
+
390 databaseContext.CompileJobs.Remove(compileJob);
+
391
+
392
+
393 await databaseContext.Save(CancellationToken.None);
+
394 throw ;
+
395 }
+
396
+
397 compileJob.Job = fullJob;
+
398 compileJob.RevisionInformation = fullRevInfo;
+
399 });
+
400 }
+
+
402 {
+
+
404 throw ;
+
405 }
+
406
+
+
408 compileJob,
+
+
410 repositorySettings,
+
411 repoOwner,
+
412 repoName,
+
413 cancellationToken);
+
414
+
+
416
+
417 try
418 {
-
+
420 }
-
421 finally
+
422 {
-
+
424 }
-
425 }
-
-
427 {
-
-
-
-
431
-
432 throw ;
-
433 }
-
434 finally
-
435 {
-
-
437 if (success)
-
-
439 else
-
-
441 }
-
442 }
+
425 finally
+
426 {
+
+
428 }
+
429 }
+
+
431 {
+
+
+
+
435
+
436 throw ;
+
437 }
+
438 finally
+
439 {
+
+
441 if (success)
+
+
443 else
+
+
445 }
+
446 }
Metadata about a server instance.
-
-
ValueTask CleanupFailedCompile(Models.CompileJob job, IRemoteDeploymentManager remoteDeploymentManager, Exception exception)
Cleans up a failed compile job .
+
async ValueTask< Models.CompileJob > Compile(Models.Job job, Models.CompileJob? oldCompileJob, Models.RevisionInformation revisionInformation, Api.Models.Internal.DreamMakerSettings dreamMakerSettings, DreamDaemonLaunchParameters launchParameters, IRepository repository, IRemoteDeploymentManager remoteDeploymentManager, JobProgressReporter progressReporter, TimeSpan? estimatedDuration, bool localCommitExistsOnRemote, CancellationToken cancellationToken)
Run the compile implementation.
+
ValueTask CleanupFailedCompile(Models.CompileJob job, IRemoteDeploymentManager remoteDeploymentManager, Exception exception)
Cleans up a failed compile job .
string? currentDreamMakerOutput
Cached for currentChatCallback.
-
async ValueTask< TimeSpan?> CalculateExpectedDeploymentTime(IDatabaseContext databaseContext, CancellationToken cancellationToken)
Calculate the average length of a deployment using a given databaseContext .
+
async ValueTask< TimeSpan?> CalculateExpectedDeploymentTime(IDatabaseContext databaseContext, CancellationToken cancellationToken)
Calculate the average length of a deployment using a given databaseContext .
bool deploying
If a compile job is running.
-
async ValueTask< Models.CompileJob > Compile(Models.Job job, Models.RevisionInformation revisionInformation, Api.Models.Internal.DreamMakerSettings dreamMakerSettings, DreamDaemonLaunchParameters launchParameters, IRepository repository, IRemoteDeploymentManager remoteDeploymentManager, JobProgressReporter progressReporter, TimeSpan? estimatedDuration, bool localCommitExistsOnRemote, CancellationToken cancellationToken)
Run the compile implementation.
Repository(LibGit2Sharp.IRepository libGitRepo, ILibGit2Commands commands, IIOManager ioManager, IEventConsumer eventConsumer, ICredentialsProvider credentialsProvider, IPostWriteHandler postWriteHandler, IGitRemoteFeaturesFactory gitRemoteFeaturesFactory, ILibGit2RepositoryFactory submoduleFactory, ILogger< Repository > logger, GeneralConfiguration generalConfiguration, Action disposeAction)
Initializes a new instance of the Repository class.
@@ -1246,7 +1258,7 @@ Here is the caller graph for this function:
ValueTask UseContext(Func< IDatabaseContext, ValueTask > operation)
Run an operation in the scope of an IDatabaseContext.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
-References Tgstation.Server.Host.Components.Deployment.DreamMaker.attemptedDeployments , Tgstation.Server.Host.Components.Deployment.DreamMaker.CalculateExpectedDeploymentTime() , Tgstation.Server.Host.Components.Deployment.DreamMaker.CleanupFailedCompile() , Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() , Tgstation.Server.Host.Components.Deployment.DreamMaker.compileJobConsumer , Tgstation.Server.Host.Components.Deployment.Remote.IRemoteDeploymentManagerFactory.CreateRemoteDeploymentManager() , Tgstation.Server.Host.Components.Deployment.DreamMaker.currentChatCallback , Tgstation.Server.Host.Components.Deployment.DreamMaker.currentDreamMakerOutput , Tgstation.Server.Host.Components.Deployment.DreamMaker.deploying , Tgstation.Server.Host.Components.Deployment.DreamMaker.deploymentLock , Tgstation.Server.Host.Components.Deployment.DreamMaker.eventConsumer , Tgstation.Server.Host.Components.Deployment.DreamMaker.failedDeployments , Tgstation.Server.Host.Components.Deployment.DreamMaker.FormatExceptionForUsers() , Tgstation.Server.Host.Components.Events.IEventConsumer.HandleEvent() , Tgstation.Server.Host.Components.Repository.IRepository.Head , Tgstation.Server.Host.Components.Deployment.ILatestCompileJobProvider.LatestCompileJob() , Tgstation.Server.Host.Components.Deployment.ICompileJobSink.LoadCompileJob() , Tgstation.Server.Host.Components.Repository.IRepositoryManager.LoadRepository() , Tgstation.Server.Host.Components.Deployment.DreamMaker.logger , Tgstation.Server.Host.Components.Deployment.DreamMaker.metadata , Tgstation.Server.Host.Components.Deployment.Remote.IRemoteDeploymentManager.PostDeploymentComments() , Tgstation.Server.Host.Components.Deployment.DreamMaker.remoteDeploymentManagerFactory , Tgstation.Server.Api.Models.Internal.IGitRemoteInformation.RemoteGitProvider , Tgstation.Server.Api.Models.Internal.IGitRemoteInformation.RemoteRepositoryName , Tgstation.Server.Api.Models.Internal.IGitRemoteInformation.RemoteRepositoryOwner , Tgstation.Server.Host.Components.Repository.Repository.Repository() , Tgstation.Server.Host.Components.Deployment.DreamMaker.repositoryManager , Tgstation.Server.Host.Components.Deployment.DreamMaker.successfulDeployments , Tgstation.Server.Host.Components.Repository.IRepository.TimestampCommit() , Tgstation.Server.Host.Database.IDatabaseContextFactory.UseContext() , and Tgstation.Server.Common.Extensions.ValueTaskExtensions.WhenAll() .
+References Tgstation.Server.Host.Components.Deployment.DreamMaker.attemptedDeployments , Tgstation.Server.Host.Components.Deployment.DreamMaker.CalculateExpectedDeploymentTime() , Tgstation.Server.Host.Components.Deployment.DreamMaker.CleanupFailedCompile() , Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() , Tgstation.Server.Host.Components.Deployment.DreamMaker.compileJobConsumer , Tgstation.Server.Host.Components.Deployment.Remote.IRemoteDeploymentManagerFactory.CreateRemoteDeploymentManager() , Tgstation.Server.Host.Components.Deployment.DreamMaker.currentChatCallback , Tgstation.Server.Host.Components.Deployment.DreamMaker.currentDreamMakerOutput , Tgstation.Server.Host.Components.Deployment.DreamMaker.deploying , Tgstation.Server.Host.Components.Deployment.DreamMaker.deploymentLock , Tgstation.Server.Host.Components.Deployment.DreamMaker.eventConsumer , Tgstation.Server.Host.Components.Deployment.DreamMaker.failedDeployments , Tgstation.Server.Host.Components.Deployment.DreamMaker.FormatExceptionForUsers() , Tgstation.Server.Host.Components.Events.IEventConsumer.HandleEvent() , Tgstation.Server.Host.Components.Repository.IRepository.Head , Tgstation.Server.Host.Components.Deployment.ILatestCompileJobProvider.LatestCompileJob() , Tgstation.Server.Host.Components.Deployment.ICompileJobSink.LoadCompileJob() , Tgstation.Server.Host.Components.Repository.IRepositoryManager.LoadRepository() , Tgstation.Server.Host.Components.Deployment.DreamMaker.logger , Tgstation.Server.Host.Components.Deployment.DreamMaker.metadata , Tgstation.Server.Host.Components.Deployment.Remote.IRemoteDeploymentManager.PostDeploymentComments() , Tgstation.Server.Host.Components.Deployment.DreamMaker.remoteDeploymentManagerFactory , Tgstation.Server.Api.Models.Internal.IGitRemoteInformation.RemoteGitProvider , Tgstation.Server.Api.Models.Internal.IGitRemoteInformation.RemoteRepositoryName , Tgstation.Server.Api.Models.Internal.IGitRemoteInformation.RemoteRepositoryOwner , Tgstation.Server.Host.Components.Repository.Repository.Repository() , Tgstation.Server.Host.Components.Deployment.DreamMaker.repositoryManager , Tgstation.Server.Host.Components.Deployment.DreamMaker.successfulDeployments , Tgstation.Server.Host.Components.Repository.IRepository.TimestampCommit() , Tgstation.Server.Host.Database.IDatabaseContextFactory.UseContext() , and Tgstation.Server.Common.Extensions.ValueTaskExtensions.WhenAll() .
Referenced by Tgstation.Server.Host.Components.Instance.AutoUpdateAction() .
-
+
@@ -1289,7 +1301,7 @@ Here is the call graph for this function:
-
+
@@ -1447,70 +1459,70 @@ Here is the caller graph for this function:
Returns A ValueTask representing the running operation.
-Definition at line 945 of file DreamMaker.cs .
- 946 {
-
947 var dmeFileName = String.Join(
'.' , job.DmeName,
DmeExtension );
-
948 var stringDirectoryName = job.DirectoryName!.Value.ToString();
-
-
-
951
-
-
953 dmeFileName,
-
-
-
956 stringDirectoryName,
-
-
958 cancellationToken);
-
959
-
960 var dmeBytes = await dmeReadTask;
-
961 var dme = Encoding.UTF8.GetString(dmeBytes);
-
962
-
963 var dmeModifications = await dmeModificationsTask;
-
964
-
965 if (dmeModifications == null || dmeModifications.TotalDmeOverwrite)
-
966 {
-
967 if (dmeModifications != null )
-
968 logger .LogDebug(
".dme replacement configured!" );
-
969 else
-
970 logger .LogTrace(
"No .dme modifications required." );
-
971 return ;
-
972 }
-
973
-
974 var dmeLines = new List<string>(dme.Split('\n' , StringSplitOptions.None));
-
975 for (var dmeLineIndex = 0; dmeLineIndex < dmeLines.Count; ++dmeLineIndex)
-
976 {
-
977 var line = dmeLines[dmeLineIndex];
-
978 if (line.Contains("BEGIN_INCLUDE" , StringComparison.Ordinal) && dmeModifications.HeadIncludeLine != null )
-
979 {
-
980 var headIncludeLineNumber = dmeLineIndex + 1;
-
-
982 "Inserting HeadInclude.dm at line {lineNumber}: {includeLine}" ,
-
983 headIncludeLineNumber,
-
984 dmeModifications.HeadIncludeLine);
-
985 dmeLines.Insert(headIncludeLineNumber, dmeModifications.HeadIncludeLine);
-
986 ++dmeLineIndex;
-
987 }
-
988 else if (line.Contains("END_INCLUDE" , StringComparison.Ordinal) && dmeModifications.TailIncludeLine != null )
-
989 {
-
-
991 "Inserting TailInclude.dm at line {lineNumber}: {includeLine}" ,
-
992 dmeLineIndex,
-
993 dmeModifications.TailIncludeLine);
-
994 dmeLines.Insert(dmeLineIndex, dmeModifications.TailIncludeLine);
-
995 break ;
-
996 }
-
997 }
-
998
-
999 dmeBytes = Encoding.UTF8.GetBytes(String.Join('\n' , dmeLines));
-
-
1001 }
+
Definition at line 952 of file DreamMaker.cs .
+
953 {
+
954 var dmeFileName = String.Join(
'.' , job.DmeName,
DmeExtension );
+
955 var stringDirectoryName = job.DirectoryName!.Value.ToString();
+
+
+
958
+
+
960 dmeFileName,
+
+
+
963 stringDirectoryName,
+
+
965 cancellationToken);
+
966
+
967 var dmeBytes = await dmeReadTask;
+
968 var dme = Encoding.UTF8.GetString(dmeBytes);
+
969
+
970 var dmeModifications = await dmeModificationsTask;
+
971
+
972 if (dmeModifications == null || dmeModifications.TotalDmeOverwrite)
+
973 {
+
974 if (dmeModifications != null )
+
975 logger .LogDebug(
".dme replacement configured!" );
+
976 else
+
977 logger .LogTrace(
"No .dme modifications required." );
+
978 return ;
+
979 }
+
980
+
981 var dmeLines = new List<string>(dme.Split('\n' , StringSplitOptions.None));
+
982 for (var dmeLineIndex = 0; dmeLineIndex < dmeLines.Count; ++dmeLineIndex)
+
983 {
+
984 var line = dmeLines[dmeLineIndex];
+
985 if (line.Contains("BEGIN_INCLUDE" , StringComparison.Ordinal) && dmeModifications.HeadIncludeLine != null )
+
986 {
+
987 var headIncludeLineNumber = dmeLineIndex + 1;
+
+
989 "Inserting HeadInclude.dm at line {lineNumber}: {includeLine}" ,
+
990 headIncludeLineNumber,
+
991 dmeModifications.HeadIncludeLine);
+
992 dmeLines.Insert(headIncludeLineNumber, dmeModifications.HeadIncludeLine);
+
993 ++dmeLineIndex;
+
994 }
+
995 else if (line.Contains("END_INCLUDE" , StringComparison.Ordinal) && dmeModifications.TailIncludeLine != null )
+
996 {
+
+
998 "Inserting TailInclude.dm at line {lineNumber}: {includeLine}" ,
+
999 dmeLineIndex,
+
1000 dmeModifications.TailIncludeLine);
+
1001 dmeLines.Insert(dmeLineIndex, dmeModifications.TailIncludeLine);
+
1002 break ;
+
1003 }
+
1004 }
+
1005
+
1006 dmeBytes = Encoding.UTF8.GetBytes(String.Join('\n' , dmeLines));
+
+
1008 }
const string DmeExtension
Extension for .dmes.
ValueTask< byte[]> ReadAllBytes(string path, CancellationToken cancellationToken)
Returns all the contents of a file at path as a byte array.
string ConcatPath(params string[] paths)
Combines an array of strings into a path.
string GetDirectoryName(string path)
Gets the directory portion of a given path .
ValueTask WriteAllBytes(string path, byte[] contents, CancellationToken cancellationToken)
Writes some contents to a file at path overwriting previous content.
-
Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
+
Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
@@ -1519,7 +1531,7 @@ Here is the caller graph for this function:
-
+
@@ -1587,62 +1599,62 @@ Here is the caller graph for this function:
Returns A ValueTask representing the running operation.
-Definition at line 745 of file DreamMaker.cs .
- 746 {
-
747 double ? lastReport = estimatedDuration.HasValue ? 0 : null ;
-
-
749
-
750 var minimumSleepInterval = TimeSpan.FromMilliseconds(250);
-
751 var sleepInterval = estimatedDuration.HasValue ? estimatedDuration.Value / 100 : minimumSleepInterval;
-
752
-
753 if (estimatedDuration.HasValue)
-
754 {
-
755 logger .LogDebug(
"Compile is expected to take: {estimatedDuration}" , estimatedDuration);
-
756 }
-
757 else
-
758 {
-
759 logger .LogTrace(
"No metric to estimate compile time." );
-
760 }
-
761
-
762 try
-
763 {
-
764 for (var iteration = 0; iteration < (estimatedDuration.HasValue ? 99 : Int32.MaxValue); ++iteration)
-
765 {
-
766 if (estimatedDuration.HasValue)
-
767 {
-
768 var nextInterval = DateTimeOffset.UtcNow + sleepInterval;
-
769 do
-
770 {
-
771 var remainingSleepThisInterval = nextInterval - DateTimeOffset.UtcNow;
-
772 var nextSleepSpan = remainingSleepThisInterval < minimumSleepInterval ? minimumSleepInterval : remainingSleepThisInterval;
-
773
-
-
-
776 }
-
777 while (DateTimeOffset.UtcNow < nextInterval);
-
778 }
-
779 else
-
-
781
-
782 lastReport = estimatedDuration.HasValue ? sleepInterval * (iteration + 1) / estimatedDuration.Value : null;
-
-
784 }
-
785 }
-
786 catch (OperationCanceledException ex)
-
787 {
-
788 logger .LogTrace(ex,
"ProgressTask aborted." );
-
789 }
-
-
791 {
-
792 logger .LogError(ex,
"ProgressTask crashed!" );
-
793 }
-
794 }
+
Definition at line 752 of file DreamMaker.cs .
+
753 {
+
754 double ? lastReport = estimatedDuration.HasValue ? 0 : null ;
+
+
756
+
757 var minimumSleepInterval = TimeSpan.FromMilliseconds(250);
+
758 var sleepInterval = estimatedDuration.HasValue ? estimatedDuration.Value / 100 : minimumSleepInterval;
+
759
+
760 if (estimatedDuration.HasValue)
+
761 {
+
762 logger .LogDebug(
"Compile is expected to take: {estimatedDuration}" , estimatedDuration);
+
763 }
+
764 else
+
765 {
+
766 logger .LogTrace(
"No metric to estimate compile time." );
+
767 }
+
768
+
769 try
+
770 {
+
771 for (var iteration = 0; iteration < (estimatedDuration.HasValue ? 99 : Int32.MaxValue); ++iteration)
+
772 {
+
773 if (estimatedDuration.HasValue)
+
774 {
+
775 var nextInterval = DateTimeOffset.UtcNow + sleepInterval;
+
776 do
+
777 {
+
778 var remainingSleepThisInterval = nextInterval - DateTimeOffset.UtcNow;
+
779 var nextSleepSpan = remainingSleepThisInterval < minimumSleepInterval ? minimumSleepInterval : remainingSleepThisInterval;
+
780
+
+
+
783 }
+
784 while (DateTimeOffset.UtcNow < nextInterval);
+
785 }
+
786 else
+
+
788
+
789 lastReport = estimatedDuration.HasValue ? sleepInterval * (iteration + 1) / estimatedDuration.Value : null;
+
+
791 }
+
792 }
+
793 catch (OperationCanceledException ex)
+
794 {
+
795 logger .LogTrace(ex,
"ProgressTask aborted." );
+
796 }
+
+
798 {
+
799 logger .LogError(ex,
"ProgressTask crashed!" );
+
800 }
+
801 }
void ReportProgress(double? progress)
Report progress.
ValueTask Delay(TimeSpan timeSpan, CancellationToken cancellationToken)
Create a Task that completes after a given timeSpan .
References Tgstation.Server.Host.Jobs.JobProgressReporter.ReportProgress() .
-
Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() .
+
Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() .
@@ -1659,7 +1671,7 @@ Here is the caller graph for this function:
-
+
@@ -1762,155 +1774,155 @@ Here is the caller graph for this function:
Returns A ValueTask representing the running operation.
-Definition at line 586 of file DreamMaker.cs .
- 595 {
-
596 var outputDirectory = job.DirectoryName!.Value.ToString();
-
597 logger .LogTrace(
"Compile output GUID: {dirGuid}" , outputDirectory);
-
598
-
599 try
-
600 {
-
601
-
602 logger .LogTrace(
"Copying repository to game directory" );
-
603 progressReporter.StageName = "Copying repository" ;
-
-
605 var repoOrigin = repository.
Origin ;
-
606 var repoReference = repository.
Reference ;
-
607 using (repository)
-
608 await repository.
CopyTo (resolvedOutputDirectory, cancellationToken);
-
609
-
610
-
611
-
612
-
613 progressReporter.StageName = "Running PreCompile event" ;
-
-
-
616 new List<string>
-
617 {
-
618 resolvedOutputDirectory,
-
619 repoOrigin.ToString(),
-
-
621 repoReference,
-
622 },
-
623 true ,
-
624 cancellationToken);
-
625
-
626
-
627 progressReporter.StageName = "Determining .dme" ;
-
628 if (job.DmeName == null )
-
629 {
-
630 logger .LogTrace(
"Searching for available .dmes" );
-
-
632 var foundPath = foundPaths.FirstOrDefault();
-
633 if (foundPath == default )
-
-
635 job.DmeName = foundPath.Substring(
-
636 resolvedOutputDirectory.Length + 1,
-
637 foundPath.Length - resolvedOutputDirectory.Length -
DmeExtension .Length - 2);
-
638 }
-
639 else
-
640 {
-
-
-
-
644
-
-
646 if (!targetDmeExists)
-
-
648 }
-
649
-
650 logger .LogDebug(
"Selected \"{dmeName}.dme\" for compilation!" , job.DmeName);
+
Definition at line 593 of file DreamMaker.cs .
+
602 {
+
603 var outputDirectory = job.DirectoryName!.Value.ToString();
+
604 logger .LogTrace(
"Compile output GUID: {dirGuid}" , outputDirectory);
+
605
+
606 try
+
607 {
+
608
+
609 logger .LogTrace(
"Copying repository to game directory" );
+
610 progressReporter.StageName = "Copying repository" ;
+
+
612 var repoOrigin = repository.
Origin ;
+
613 var repoReference = repository.
Reference ;
+
614 using (repository)
+
615 await repository.
CopyTo (resolvedOutputDirectory, cancellationToken);
+
616
+
617
+
618
+
619
+
620 progressReporter.StageName = "Running PreCompile event" ;
+
+
+
623 new List<string>
+
624 {
+
625 resolvedOutputDirectory,
+
626 repoOrigin.ToString(),
+
+
628 repoReference,
+
629 },
+
630 true ,
+
631 cancellationToken);
+
632
+
633
+
634 progressReporter.StageName = "Determining .dme" ;
+
635 if (job.DmeName == null )
+
636 {
+
637 logger .LogTrace(
"Searching for available .dmes" );
+
+
639 var foundPath = foundPaths.FirstOrDefault();
+
640 if (foundPath == default )
+
+
642 job.DmeName = foundPath.Substring(
+
643 resolvedOutputDirectory.Length + 1,
+
644 foundPath.Length - resolvedOutputDirectory.Length -
DmeExtension .Length - 2);
+
645 }
+
646 else
+
647 {
+
+
+
651
-
652 progressReporter.StageName = "Modifying .dme" ;
-
-
654
-
655
-
656 progressReporter.StageName = "Running PreDreamMaker event" ;
-
-
-
659 new List<string>
-
660 {
-
661 resolvedOutputDirectory,
-
662 repoOrigin.ToString(),
-
663 engineLock.Version.ToString(),
-
664 },
-
665 true ,
-
666 cancellationToken);
-
667
-
668
-
669 progressReporter.StageName = "Running Compiler" ;
-
670 var compileSuceeded = await
RunDreamMaker (engineLock, job, dreamMakerSettings.CompilerAdditionalArguments, cancellationToken);
-
671
-
672
-
673 var engineVersion = engineLock.
Version ;
+
+
653 if (!targetDmeExists)
+
+
655 }
+
656
+
657 logger .LogDebug(
"Selected \"{dmeName}.dme\" for compilation!" , job.DmeName);
+
658
+
659 progressReporter.StageName = "Modifying .dme" ;
+
+
661
+
662
+
663 progressReporter.StageName = "Running PreDreamMaker event" ;
+
+
+
666 new List<string>
+
667 {
+
668 resolvedOutputDirectory,
+
669 repoOrigin.ToString(),
+
670 engineLock.Version.ToString(),
+
671 },
+
672 true ,
+
673 cancellationToken);
674
-
675
-
676 try
-
677 {
-
678 if (!compileSuceeded)
-
-
-
681 new JobException ($
"Compilation failed:{Environment.NewLine}{Environment.NewLine}{job.Output}" ));
-
682
-
-
-
685 dreamMakerSettings.ApiValidationSecurityLevel!.Value,
-
686 job,
-
687 progressReporter,
-
688 engineLock,
-
689 dreamMakerSettings.ApiValidationPort!.Value,
-
690 dreamMakerSettings.DMApiValidationMode!.Value,
-
-
692 cancellationToken);
-
693 }
-
-
695 {
-
696
-
697 progressReporter.StageName = "Running CompileFailure event" ;
-
-
-
700 new List<string>
-
701 {
-
702 resolvedOutputDirectory,
-
703 compileSuceeded ? "1" : "0" ,
-
704 engineVersion.ToString(),
-
705 },
-
706 true ,
-
707 cancellationToken);
-
708 throw ;
-
709 }
-
710
-
711 progressReporter.StageName = "Running CompileComplete event" ;
-
-
-
714 new List<string>
-
715 {
-
716 resolvedOutputDirectory,
-
717 engineVersion.ToString(),
-
718 },
-
719 true ,
-
720 cancellationToken);
-
721
-
722 logger .LogTrace(
"Applying static game file symlinks..." );
-
723 progressReporter.StageName = "Symlinking GameStaticFiles" ;
-
724
-
725
-
726 await
configuration .SymlinkStaticFilesTo(resolvedOutputDirectory, cancellationToken);
-
727
-
728 logger .LogDebug(
"Compile complete!" );
-
729 }
-
-
731 {
-
732 progressReporter.StageName = "Cleaning output directory" ;
-
-
734 throw ;
-
735 }
-
736 }
+
675
+
676 progressReporter.StageName = "Running Compiler" ;
+
677 var compileSuceeded = await
RunDreamMaker (engineLock, job, dreamMakerSettings.CompilerAdditionalArguments, cancellationToken);
+
678
+
679
+
680 var engineVersion = engineLock.
Version ;
+
681
+
682
+
683 try
+
684 {
+
685 if (!compileSuceeded)
+
+
+
688 new JobException ($
"Compilation failed:{Environment.NewLine}{Environment.NewLine}{job.Output}" ));
+
689
+
+
+
692 dreamMakerSettings.ApiValidationSecurityLevel!.Value,
+
693 job,
+
694 progressReporter,
+
695 engineLock,
+
696 dreamMakerSettings.ApiValidationPort!.Value,
+
697 dreamMakerSettings.DMApiValidationMode!.Value,
+
+
699 cancellationToken);
+
700 }
+
+
702 {
+
703
+
704 progressReporter.StageName = "Running CompileFailure event" ;
+
+
+
707 new List<string>
+
708 {
+
709 resolvedOutputDirectory,
+
710 compileSuceeded ? "1" : "0" ,
+
711 engineVersion.ToString(),
+
712 },
+
713 true ,
+
714 cancellationToken);
+
715 throw ;
+
716 }
+
717
+
718 progressReporter.StageName = "Running CompileComplete event" ;
+
+
+
721 new List<string>
+
722 {
+
723 resolvedOutputDirectory,
+
724 engineVersion.ToString(),
+
725 },
+
726 true ,
+
727 cancellationToken);
+
728
+
729 logger .LogTrace(
"Applying static game file symlinks..." );
+
730 progressReporter.StageName = "Symlinking GameStaticFiles" ;
+
731
+
732
+
733 await
configuration .SymlinkStaticFilesTo(resolvedOutputDirectory, cancellationToken);
+
734
+
735 logger .LogDebug(
"Compile complete!" );
+
736 }
+
+
738 {
+
739 progressReporter.StageName = "Cleaning output directory" ;
+
+
741 throw ;
+
742 }
+
743 }
override string ToString()
bool? LogOutput
If process output/error text should be logged.
uint? StartupTimeout
The DreamDaemon startup timeout in seconds.
-
async ValueTask VerifyApi(uint timeout, DreamDaemonSecurity securityLevel, Models.CompileJob job, JobProgressReporter progressReporter, IEngineExecutableLock engineLock, ushort portToUse, DMApiValidationMode validationMode, bool logOutput, CancellationToken cancellationToken)
Run a quick DD instance to test the DMAPI is installed on the target code.
-
async ValueTask ModifyDme(Models.CompileJob job, CancellationToken cancellationToken)
Adds server side includes to the .dme being compiled.
-
async ValueTask< bool > RunDreamMaker(IEngineExecutableLock engineLock, Models.CompileJob job, string? additionalCompilerArguments, CancellationToken cancellationToken)
Compiles a .dme with DreamMaker.
+
async ValueTask VerifyApi(uint timeout, DreamDaemonSecurity securityLevel, Models.CompileJob job, JobProgressReporter progressReporter, IEngineExecutableLock engineLock, ushort portToUse, DMApiValidationMode validationMode, bool logOutput, CancellationToken cancellationToken)
Run a quick DD instance to test the DMAPI is installed on the target code.
+
async ValueTask ModifyDme(Models.CompileJob job, CancellationToken cancellationToken)
Adds server side includes to the .dme being compiled.
+
async ValueTask< bool > RunDreamMaker(IEngineExecutableLock engineLock, Models.CompileJob job, string? additionalCompilerArguments, CancellationToken cancellationToken)
Compiles a .dme with DreamMaker.
EngineVersion Version
The EngineVersion of the IEngineInstallation.
string Reference
The current reference the IRepository HEAD is using. This can be a branch or tag.
ValueTask CopyTo(string path, CancellationToken cancellationToken)
Copies the current working directory to a given path .
@@ -1918,9 +1930,9 @@ Here is the caller graph for this function:
Task< bool > FileExists(string path, CancellationToken cancellationToken)
Check that the file at path exists.
Task< List< string > > GetFilesWithExtension(string path, string extension, bool recursive, CancellationToken cancellationToken)
Gets a list of files in path with the given extension .
-References Tgstation.Server.Host.IO.IIOManager.ConcatPath() , Tgstation.Server.Host.Components.Deployment.DreamMaker.configuration , Tgstation.Server.Host.Components.Repository.IRepository.CopyTo() , Tgstation.Server.Host.Components.Deployment.DreamMaker.DmeExtension , Tgstation.Server.Host.Components.Deployment.DreamMaker.eventConsumer , Tgstation.Server.Host.IO.IIOManager.FileExists() , Tgstation.Server.Host.IO.IIOManager.GetFilesWithExtension() , Tgstation.Server.Host.Components.Events.IEventConsumer.HandleEvent() , Tgstation.Server.Host.Components.Deployment.DreamMaker.ioManager , Tgstation.Server.Host.Components.Deployment.DreamMaker.logger , Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.LogOutput , Tgstation.Server.Host.Components.Deployment.DreamMaker.ModifyDme() , Tgstation.Server.Host.Components.Repository.IRepository.Origin , Tgstation.Server.Host.IO.IIOManager.PathIsChildOf() , Tgstation.Server.Host.Components.Repository.IRepository.Reference , Tgstation.Server.Host.IO.IIOManager.ResolvePath() , Tgstation.Server.Host.Components.Deployment.DreamMaker.RunDreamMaker() , Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.StartupTimeout , Tgstation.Server.Api.Models.EngineVersion.ToString() , Tgstation.Server.Host.Components.Deployment.DreamMaker.VerifyApi() , and Tgstation.Server.Host.Components.Engine.IEngineInstallation.Version .
+References Tgstation.Server.Host.IO.IIOManager.ConcatPath() , Tgstation.Server.Host.Components.Deployment.DreamMaker.configuration , Tgstation.Server.Host.Components.Repository.IRepository.CopyTo() , Tgstation.Server.Host.Components.Deployment.DreamMaker.DmeExtension , Tgstation.Server.Host.Components.Deployment.DreamMaker.eventConsumer , Tgstation.Server.Host.IO.IIOManager.FileExists() , Tgstation.Server.Host.IO.IIOManager.GetFilesWithExtension() , Tgstation.Server.Host.Components.Events.IEventConsumer.HandleEvent() , Tgstation.Server.Host.Components.Deployment.DreamMaker.ioManager , Tgstation.Server.Host.Components.Deployment.DreamMaker.logger , Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.LogOutput , Tgstation.Server.Host.Components.Deployment.DreamMaker.ModifyDme() , Tgstation.Server.Host.Components.Repository.IRepository.Origin , Tgstation.Server.Host.IO.IIOManager.PathIsChildOf() , Tgstation.Server.Host.Components.Repository.IRepository.Reference , Tgstation.Server.Host.IO.IIOManager.ResolvePath() , Tgstation.Server.Host.Components.Deployment.DreamMaker.RunDreamMaker() , Tgstation.Server.Api.Models.Internal.DreamDaemonLaunchParameters.StartupTimeout , Tgstation.Server.Api.Models.EngineVersion.ToString() , Tgstation.Server.Host.Components.Deployment.DreamMaker.VerifyApi() , and Tgstation.Server.Host.Components.Engine.IEngineInstallation.Version .
-Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() .
+Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() .
@@ -1962,7 +1974,7 @@ Here is the caller graph for this function:
-
+
@@ -2037,36 +2049,36 @@ Here is the caller graph for this function:
Returns A ValueTask<TResult> resulting in true if compilation succeeded, false otherwise.
-Definition at line 904 of file DreamMaker.cs .
- 909 {
-
910 var environment = await engineLock.
LoadEnv (
logger ,
true , cancellationToken);
-
911 var arguments = engineLock.
FormatCompilerArguments ($
"{job.DmeName}.{DmeExtension}" , additionalCompilerArguments);
-
912
-
-
-
-
916 job.DirectoryName!.Value.ToString()),
-
917 arguments,
-
918 cancellationToken,
-
919 environment,
-
920 readStandardHandles: true,
-
921 noShellExecute: true);
-
922
-
-
924 dm.AdjustPriority(false );
-
925
-
926 int exitCode;
-
927 using (cancellationToken.Register(() => dm.Terminate()))
-
928 exitCode = (await dm.Lifetime).Value;
-
929 cancellationToken.ThrowIfCancellationRequested();
-
930
-
931 logger .LogDebug(
"DreamMaker exit code: {exitCode}" , exitCode);
-
932 job.Output = $"{await dm.GetCombinedOutput(cancellationToken)}{Environment.NewLine}{Environment.NewLine}Exit Code: {exitCode}" ;
-
933 logger .LogDebug(
"DreamMaker output: {newLine}{output}" , Environment.NewLine, job.Output);
-
934
-
-
936 return exitCode == 0;
-
937 }
+
Definition at line 911 of file DreamMaker.cs .
+
916 {
+
917 var environment = await engineLock.
LoadEnv (
logger ,
true , cancellationToken);
+
918 var arguments = engineLock.
FormatCompilerArguments ($
"{job.DmeName}.{DmeExtension}" , additionalCompilerArguments);
+
919
+
+
+
+
923 job.DirectoryName!.Value.ToString()),
+
924 arguments,
+
925 cancellationToken,
+
926 environment,
+
927 readStandardHandles: true,
+
928 noShellExecute: true);
+
929
+
+
931 dm.AdjustPriority(false );
+
932
+
933 int exitCode;
+
934 using (cancellationToken.Register(() => dm.Terminate()))
+
935 exitCode = (await dm.Lifetime).Value;
+
936 cancellationToken.ThrowIfCancellationRequested();
+
937
+
938 logger .LogDebug(
"DreamMaker exit code: {exitCode}" , exitCode);
+
939 job.Output = $"{await dm.GetCombinedOutput(cancellationToken)}{Environment.NewLine}{Environment.NewLine}Exit Code: {exitCode}" ;
+
940 logger .LogDebug(
"DreamMaker output: {newLine}{output}" , Environment.NewLine, job.Output);
+
941
+
+
943 return exitCode == 0;
+
944 }
bool LowPriorityDeploymentProcesses
If the deployment DreamMaker and DreamDaemon instances are set to be below normal priority processes.
string FormatCompilerArguments(string dmePath, string? additionalArguments)
Return the command line arguments for compiling a given dmePath if compilation is necessary.
ValueTask< Dictionary< string, string >?> LoadEnv(ILogger logger, bool forCompiler, CancellationToken cancellationToken)
Loads the environment settings for either the server or compiler.
@@ -2075,7 +2087,7 @@ Here is the caller graph for this function:
References Tgstation.Server.Host.Components.Engine.IEngineInstallation.CompilerExePath , Tgstation.Server.Host.Components.Engine.IEngineInstallation.FormatCompilerArguments() , and Tgstation.Server.Host.Components.Engine.IEngineInstallation.LoadEnv() .
-Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
+Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
@@ -2096,7 +2108,7 @@ Here is the caller graph for this function:
-
+
@@ -2206,83 +2218,83 @@ Here is the caller graph for this function:
Returns A ValueTask representing the running operation.
-Definition at line 809 of file DreamMaker.cs .
- 819 {
-
-
821 {
-
822 logger .LogDebug(
"Skipping DMAPI validation" );
-
-
824 return ;
-
825 }
-
826
-
827 progressReporter.StageName = "Validating DMAPI" ;
-
828
-
-
830 logger .LogTrace(
"Verifying {possiblyRequired}DMAPI..." , requireValidate ?
"required " : String.Empty);
-
-
832 {
-
833 AllowWebClient = false ,
-
834 Port = portToUse,
-
835 OpenDreamTopicPort = 0,
-
836 SecurityLevel = securityLevel,
-
-
838 StartupTimeout = timeout,
-
839 TopicRequestTimeout = 0,
-
840 HealthCheckSeconds = 0,
-
841 StartProfiler = false ,
-
842 LogOutput = logOutput,
-
843 MapThreads = 1,
-
844 };
-
845
-
846 job.MinimumSecurityLevel = securityLevel;
-
847
-
-
849 await using (var provider = new TemporaryDmbProvider(
-
-
851 job,
-
-
-
854 {
-
855 var launchResult = await controller.LaunchResult.WaitAsync(cancellationToken);
-
856
-
857 if (launchResult.StartupTime.HasValue)
-
858 await controller.Lifetime.WaitAsync(cancellationToken);
-
859
-
860 if (!controller.Lifetime.IsCompleted)
-
861 await controller.DisposeAsync();
-
862
-
863 validationStatus = controller.ApiValidationStatus;
-
864
-
865 logger .LogTrace(
"API validation status: {validationStatus}" , validationStatus);
+
Definition at line 816 of file DreamMaker.cs .
+
826 {
+
+
828 {
+
829 logger .LogDebug(
"Skipping DMAPI validation" );
+
+
831 return ;
+
832 }
+
833
+
834 progressReporter.StageName = "Validating DMAPI" ;
+
835
+
+
837 logger .LogTrace(
"Verifying {possiblyRequired}DMAPI..." , requireValidate ?
"required " : String.Empty);
+
+
839 {
+
840 AllowWebClient = false ,
+
841 Port = portToUse,
+
842 OpenDreamTopicPort = 0,
+
843 SecurityLevel = securityLevel,
+
+
845 StartupTimeout = timeout,
+
846 TopicRequestTimeout = 0,
+
847 HealthCheckSeconds = 0,
+
848 StartProfiler = false ,
+
849 LogOutput = logOutput,
+
850 MapThreads = 1,
+
851 };
+
852
+
853 job.MinimumSecurityLevel = securityLevel;
+
854
+
+
856 await using (var provider = new TemporaryDmbProvider(
+
+
858 job,
+
+
+
861 {
+
862 var launchResult = await controller.LaunchResult.WaitAsync(cancellationToken);
+
863
+
864 if (launchResult.StartupTime.HasValue)
+
865 await controller.Lifetime.WaitAsync(cancellationToken);
866
-
867 job.DMApiVersion = controller.DMApiVersion;
-
868 }
+
867 if (!controller.Lifetime.IsCompleted)
+
868 await controller.DisposeAsync();
869
-
870 switch (validationStatus)
-
871 {
-
-
-
874 return ;
-
-
-
877 return ;
-
-
-
880 return ;
-
-
882 if (requireValidate)
-
-
-
885 break ;
-
-
-
-
-
890 default :
-
891 throw new InvalidOperationException(
-
892 $"Session controller returned unexpected ApiValidationStatus: {validationStatus}" );
-
893 }
-
894 }
+
870 validationStatus = controller.ApiValidationStatus;
+
871
+
872 logger .LogTrace(
"API validation status: {validationStatus}" , validationStatus);
+
873
+
874 job.DMApiVersion = controller.DMApiVersion;
+
875 }
+
876
+
877 switch (validationStatus)
+
878 {
+
+
+
881 return ;
+
+
+
884 return ;
+
+
+
887 return ;
+
+
889 if (requireValidate)
+
+
+
892 break ;
+
+
+
+
+
897 default :
+
898 throw new InvalidOperationException(
+
899 $"Session controller returned unexpected ApiValidationStatus: {validationStatus}" );
+
900 }
+
901 }
Launch settings for DreamDaemon.
ValueTask< ISessionController > LaunchNew(IDmbProvider dmbProvider, IEngineExecutableLock? currentByondLock, DreamDaemonLaunchParameters launchParameters, bool apiValidate, CancellationToken cancellationToken)
Create a ISessionController from a freshly launch DreamDaemon instance.
DreamDaemonVisibility
The visibility setting for DreamDaemon.
@@ -2292,7 +2304,7 @@ Here is the caller graph for this function:
References Tgstation.Server.Host.Components.Engine.IEngineInstallation.Version .
-Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
+Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
@@ -2301,7 +2313,7 @@ Here is the caller graph for this function:
-
+
@@ -2399,7 +2411,7 @@ Here is the caller graph for this function:
Definition at line 68 of file DreamMaker.cs .
-Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() .
+Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() .
@@ -2455,7 +2467,7 @@ Here is the caller graph for this function:
Definition at line 53 of file DreamMaker.cs .
-Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
+Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
@@ -2479,11 +2491,11 @@ Here is the caller graph for this function:
@@ -2595,7 +2607,7 @@ Here is the caller graph for this function:
Definition at line 38 of file DreamMaker.cs .
-Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
+Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
@@ -2623,7 +2635,7 @@ Here is the caller graph for this function:
Definition at line 43 of file DreamMaker.cs .
-Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() .
+Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() .
@@ -2651,7 +2663,7 @@ Here is the caller graph for this function:
Definition at line 63 of file DreamMaker.cs .
-Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() , Tgstation.Server.Host.Components.Deployment.DreamMaker.DeploymentProcess() , Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
+Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() , Tgstation.Server.Host.Components.Deployment.DreamMaker.DeploymentProcess() , Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
@@ -2707,7 +2719,7 @@ Here is the caller graph for this function:
Definition at line 48 of file DreamMaker.cs .
-Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
+Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
@@ -2735,7 +2747,7 @@ Here is the caller graph for this function:
Definition at line 98 of file DreamMaker.cs .
-Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() , Tgstation.Server.Host.Components.Deployment.DreamMaker.DeploymentProcess() , Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
+Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.Compile() , Tgstation.Server.Host.Components.Deployment.DreamMaker.DeploymentProcess() , Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.RunCompileJob() .
@@ -2763,7 +2775,7 @@ Here is the caller graph for this function:
Definition at line 108 of file DreamMaker.cs .
-Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.CalculateExpectedDeploymentTime() , Tgstation.Server.Host.Components.Deployment.DreamMaker.DeploymentProcess() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() .
+Referenced by Tgstation.Server.Host.Components.Deployment.DreamMaker.CalculateExpectedDeploymentTime() , Tgstation.Server.Host.Components.Deployment.DreamMaker.DeploymentProcess() , and Tgstation.Server.Host.Components.Deployment.DreamMaker.DreamMaker() .
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_cgraph.map
similarity index 99%
rename from class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_cgraph.map
rename to class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_cgraph.map
index eb4425c3b4..c49f0b38f3 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_cgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_cgraph.map
@@ -4,7 +4,7 @@
-
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_cgraph.md5
new file mode 100644
index 0000000000..687f038c78
--- /dev/null
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_cgraph.md5
@@ -0,0 +1 @@
+2d3aed81a6b81c168f4f722432222c5e
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_cgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_cgraph.png
similarity index 100%
rename from class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_cgraph.png
rename to class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_cgraph.png
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_icgraph.map
similarity index 100%
rename from class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_icgraph.map
rename to class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_icgraph.map
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_icgraph.md5
similarity index 100%
rename from class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_icgraph.md5
rename to class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_icgraph.md5
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_icgraph.png b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_icgraph.png
similarity index 100%
rename from class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_icgraph.png
rename to class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a06dba3c351744dea4044270664675ed9_icgraph.png
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a143fbc68ad876ca7e7ce4145d97d9278_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a143fbc68ad876ca7e7ce4145d97d9278_icgraph.map
index 2b6283698c..b0814a1c6e 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a143fbc68ad876ca7e7ce4145d97d9278_icgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a143fbc68ad876ca7e7ce4145d97d9278_icgraph.map
@@ -1,6 +1,6 @@
-
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a143fbc68ad876ca7e7ce4145d97d9278_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a143fbc68ad876ca7e7ce4145d97d9278_icgraph.md5
index b98a0a1a35..a294f2aa24 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a143fbc68ad876ca7e7ce4145d97d9278_icgraph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a143fbc68ad876ca7e7ce4145d97d9278_icgraph.md5
@@ -1 +1 @@
-f26c066983f05eda7fd64e9992a5f1fa
\ No newline at end of file
+93a9de7448629916611842066971bdea
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a188d9b663c305c1ed438b5ca1494652c_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a188d9b663c305c1ed438b5ca1494652c_icgraph.map
index 6309c325f0..9aa18c6d91 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a188d9b663c305c1ed438b5ca1494652c_icgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a188d9b663c305c1ed438b5ca1494652c_icgraph.map
@@ -2,7 +2,7 @@
-
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a188d9b663c305c1ed438b5ca1494652c_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a188d9b663c305c1ed438b5ca1494652c_icgraph.md5
index f2b517821b..899e772aeb 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a188d9b663c305c1ed438b5ca1494652c_icgraph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a188d9b663c305c1ed438b5ca1494652c_icgraph.md5
@@ -1 +1 @@
-37cc8904afe59aa2c434fbae9a8d917f
\ No newline at end of file
+372f0e208f49a16f47f16902f6e129fa
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a2394e942cf255412fe358bef742b580c_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a2394e942cf255412fe358bef742b580c_icgraph.map
index c42c6d9883..7d82847b40 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a2394e942cf255412fe358bef742b580c_icgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a2394e942cf255412fe358bef742b580c_icgraph.map
@@ -1,6 +1,6 @@
-
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a2394e942cf255412fe358bef742b580c_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a2394e942cf255412fe358bef742b580c_icgraph.md5
index 54c3f1e7f0..c58b1d7fce 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a2394e942cf255412fe358bef742b580c_icgraph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a2394e942cf255412fe358bef742b580c_icgraph.md5
@@ -1 +1 @@
-93e87c2123c034c0a994a36ba04845e4
\ No newline at end of file
+f58c00b5bab82a62240db2be8fb37fad
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a38ea1632011a37a072e9d1c9e3d04c13_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a38ea1632011a37a072e9d1c9e3d04c13_cgraph.map
index 33f9de5223..e4c8dd3cec 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a38ea1632011a37a072e9d1c9e3d04c13_cgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a38ea1632011a37a072e9d1c9e3d04c13_cgraph.map
@@ -6,7 +6,7 @@
-
+
@@ -34,7 +34,7 @@
-
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a38ea1632011a37a072e9d1c9e3d04c13_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a38ea1632011a37a072e9d1c9e3d04c13_cgraph.md5
index 0d6dd19170..32cc652c04 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a38ea1632011a37a072e9d1c9e3d04c13_cgraph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_a38ea1632011a37a072e9d1c9e3d04c13_cgraph.md5
@@ -1 +1 @@
-e5e46d797265d36eb714a0a10945e05a
\ No newline at end of file
+67c34b538c53fdc3fd4972b573ff5c42
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_acd0b61739ab535d67d9081d8071b8f0b_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_acd0b61739ab535d67d9081d8071b8f0b_icgraph.map
index ae0bcc53fd..fd2adf967d 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_acd0b61739ab535d67d9081d8071b8f0b_icgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_acd0b61739ab535d67d9081d8071b8f0b_icgraph.map
@@ -2,7 +2,7 @@
-
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_acd0b61739ab535d67d9081d8071b8f0b_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_acd0b61739ab535d67d9081d8071b8f0b_icgraph.md5
index 69c1da6581..664d83c6ee 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_acd0b61739ab535d67d9081d8071b8f0b_icgraph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_acd0b61739ab535d67d9081d8071b8f0b_icgraph.md5
@@ -1 +1 @@
-65203b1183904e60168abb7ce154da07
\ No newline at end of file
+920d46980c2dce15e0467a48b861707f
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_cgraph.md5
deleted file mode 100644
index 139ef5fa67..0000000000
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_ad489ef5c91d097ff3366d5bc63d8277e_cgraph.md5
+++ /dev/null
@@ -1 +0,0 @@
-a5f08d741e9d3bff78dd387a59d36ebe
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_adf43fc4a80b8b41e1d3030ba446971c6_icgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_adf43fc4a80b8b41e1d3030ba446971c6_icgraph.map
index 6bd58aa8d2..caeaf8edd7 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_adf43fc4a80b8b41e1d3030ba446971c6_icgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_adf43fc4a80b8b41e1d3030ba446971c6_icgraph.map
@@ -2,7 +2,7 @@
-
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_adf43fc4a80b8b41e1d3030ba446971c6_icgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_adf43fc4a80b8b41e1d3030ba446971c6_icgraph.md5
index d392d73d05..1dfa1d8d6e 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_adf43fc4a80b8b41e1d3030ba446971c6_icgraph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_dream_maker_adf43fc4a80b8b41e1d3030ba446971c6_icgraph.md5
@@ -1 +1 @@
-2bb1fb3b85498072acd11dcc12c0636b
\ No newline at end of file
+a12ae40dadac9e2e0cec1475fad83c0a
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_remote_1_1_base_remote_deployment_manager.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_remote_1_1_base_remote_deployment_manager.html
index 4e5df6af04..6f4e615339 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_remote_1_1_base_remote_deployment_manager.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_deployment_1_1_remote_1_1_base_remote_deployment_manager.html
@@ -348,15 +348,15 @@ Private Attributes
Implements Tgstation.Server.Host.Components.Deployment.Remote.IRemoteDeploymentManager .
-
Definition at line 165 of file BaseRemoteDeploymentManager.cs .
-
Returns A ValueTask representing the running operation.
-
Referenced by Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.ApplyDeployment() .
+
Referenced by Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.ApplyDeployment() .
@@ -696,15 +696,15 @@ Here is the caller graph for this function:
Implements Tgstation.Server.Host.Components.Deployment.Remote.IRemoteDeploymentManager .
-
Definition at line 179 of file BaseRemoteDeploymentManager.cs .
-
Returns A ValueTask representing the running operation.
-
Referenced by Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.MarkInactive() .
+
Referenced by Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.MarkInactive() .
@@ -855,100 +855,92 @@ Here is the caller graph for this function:
67 return ;
68
-
-
70 if ((previousRevisionInformation != null && previousRevisionInformation.CommitSha == deployedRevisionInformation.CommitSha)
+
+
70 if ((previousRevisionInformation != null && previousRevisionInformation.CommitSha == revisionInformation.CommitSha)
72 return ;
73
-
-
75 previousRevisionInformation.ActiveTestMerges ??= new List<RevInfoTestMerge>();
+
74 var previousTestMerges = (IEnumerable<RevInfoTestMerge>?)previousRevisionInformation?.ActiveTestMerges ?? Enumerable.Empty<
RevInfoTestMerge >();
+
75 var currentTestMerges = (IEnumerable<RevInfoTestMerge>?)revisionInformation.ActiveTestMerges ?? Enumerable.Empty<
RevInfoTestMerge >();
76
-
77 deployedRevisionInformation.ActiveTestMerges ??= new List<RevInfoTestMerge>();
-
78
-
79
-
80 var addedTestMerges = deployedRevisionInformation
-
81 .ActiveTestMerges
-
82 .Select(x => x.TestMerge)
-
83 .Where(x => !previousRevisionInformation
-
84 .ActiveTestMerges
-
85 .Any(y => y.TestMerge.Number == x.Number))
-
86 .ToList();
-
87 var removedTestMerges = previousRevisionInformation
-
88 .ActiveTestMerges
+
77
+
78 var addedTestMerges = currentTestMerges
+
79 .Select(x => x.TestMerge)
+
80 .Where(x => !previousTestMerges
+
81 .Any(y => y.TestMerge.Number == x.Number))
+
82 .ToList();
+
83 var removedTestMerges = previousTestMerges
+
84 .Select(x => x.TestMerge)
+
85 .Where(x => !currentTestMerges
+
86 .Any(y => y.TestMerge.Number == x.Number))
+
87 .ToList();
+
88 var updatedTestMerges = currentTestMerges
89 .Select(x => x.TestMerge)
-
90 .Where(x => !deployedRevisionInformation
-
91 .ActiveTestMerges
-
92 .Any(y => y.TestMerge.Number == x.Number))
-
93 .ToList();
-
94 var updatedTestMerges = deployedRevisionInformation
-
95 .ActiveTestMerges
-
96 .Select(x => x.TestMerge)
-
97 .Where(x => previousRevisionInformation
-
98 .ActiveTestMerges
-
99 .Any(y => y.TestMerge.Number == x.Number))
-
100 .ToList();
-
101
-
102 if (addedTestMerges.Count == 0 && removedTestMerges.Count == 0 && updatedTestMerges.Count == 0)
-
103 return ;
-
104
-
-
106 "Commenting on {addedCount} added, {removedCount} removed, and {updatedCount} updated test merge sources..." ,
-
107 addedTestMerges.Count,
-
108 removedTestMerges.Count,
-
109 updatedTestMerges.Count);
-
110
-
111 var tasks = new List<ValueTask>(addedTestMerges.Count + updatedTestMerges.Count + removedTestMerges.Count);
-
112 foreach (var addedTestMerge in addedTestMerges)
-
113 {
-
-
115 repositorySettings,
-
116 repoOwner,
-
117 repoName,
-
-
119 repositorySettings,
-
120 compileJob,
-
121 addedTestMerge,
-
122 repoOwner,
-
123 repoName,
-
124 false ),
-
125 addedTestMerge.Number,
-
126 cancellationToken);
-
127 tasks.Add(addCommentTask);
-
128 }
-
129
-
130 foreach (var removedTestMerge in removedTestMerges)
-
131 {
-
-
133 repositorySettings,
-
134 repoOwner,
-
135 repoName,
-
136 "#### Test Merge Removed" ,
-
137 removedTestMerge.Number,
-
138 cancellationToken);
-
139 tasks.Add(removeCommentTask);
-
140 }
-
141
-
142 foreach (var updatedTestMerge in updatedTestMerges)
-
143 {
-
-
145 repositorySettings,
-
146 repoOwner,
-
147 repoName,
-
-
149 repositorySettings,
-
150 compileJob,
-
151 updatedTestMerge,
-
152 repoOwner,
-
153 repoName,
-
154 true ),
-
155 updatedTestMerge.Number,
-
156 cancellationToken);
-
157 tasks.Add(updateCommentTask);
-
158 }
-
159
-
160 if (tasks.Count > 0)
-
-
162 }
+
90 .Where(x => previousTestMerges
+
91 .Any(y => y.TestMerge.Number == x.Number))
+
92 .ToList();
+
93
+
94 if (addedTestMerges.Count == 0 && removedTestMerges.Count == 0 && updatedTestMerges.Count == 0)
+
95 return ;
+
96
+
+
98 "Commenting on {addedCount} added, {removedCount} removed, and {updatedCount} updated test merge sources..." ,
+
99 addedTestMerges.Count,
+
100 removedTestMerges.Count,
+
101 updatedTestMerges.Count);
+
102
+
103 var tasks = new List<ValueTask>(addedTestMerges.Count + updatedTestMerges.Count + removedTestMerges.Count);
+
104 foreach (var addedTestMerge in addedTestMerges)
+
105 {
+
+
107 repositorySettings,
+
108 repoOwner,
+
109 repoName,
+
+
111 repositorySettings,
+
112 compileJob,
+
113 addedTestMerge,
+
114 repoOwner,
+
115 repoName,
+
116 false ),
+
117 addedTestMerge.Number,
+
118 cancellationToken);
+
119 tasks.Add(addCommentTask);
+
120 }
+
121
+
122 foreach (var removedTestMerge in removedTestMerges)
+
123 {
+
+
125 repositorySettings,
+
126 repoOwner,
+
127 repoName,
+
128 "#### Test Merge Removed" ,
+
129 removedTestMerge.Number,
+
130 cancellationToken);
+
131 tasks.Add(removeCommentTask);
+
132 }
+
133
+
134 foreach (var updatedTestMerge in updatedTestMerges)
+
135 {
+
+
137 repositorySettings,
+
138 repoOwner,
+
139 repoName,
+
+
141 repositorySettings,
+
142 compileJob,
+
143 updatedTestMerge,
+
144 repoOwner,
+
145 repoName,
+
146 true ),
+
147 updatedTestMerge.Number,
+
148 cancellationToken);
+
149 tasks.Add(updateCommentTask);
+
150 }
+
151
+
152 if (tasks.Count > 0)
+
+
154 }
bool? PostTestMergeComment
If test merging should create a comment. Requires AccessToken to be set to function.
string? AccessToken
The token/password to access the git repository with. Can also be a TGS encoded app private key....
Extension methods for the ValueTask and ValueTask<TResult> classes.
@@ -956,9 +948,9 @@ Here is the caller graph for this function:
ValueTask CommentOnTestMergeSource(RepositorySettings repositorySettings, string remoteRepositoryOwner, string remoteRepositoryName, string comment, int testMergeNumber, CancellationToken cancellationToken)
Create a comment of a given testMergeNumber 's source.
string FormatTestMerge(RepositorySettings repositorySettings, CompileJob compileJob, TestMerge testMerge, string remoteRepositoryOwner, string remoteRepositoryName, bool updated)
Formats a comment for a given testMerge .
RevisionInformation RevisionInformation
See CompileJobResponse.RevisionInformation.
-
+Many to many relationship for Models.RevisionInformation and Models.TestMerge.
-References Tgstation.Server.Api.Models.RepositorySettings.AccessToken , Tgstation.Server.Host.Models.RevisionInformation.ActiveTestMerges , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.CommentOnTestMergeSource() , Tgstation.Server.Api.Models.Internal.RevisionInformation.CommitSha , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.FormatTestMerge() , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.Logger , Tgstation.Server.Api.Models.RepositorySettings.PostTestMergeComment , Tgstation.Server.Host.Models.CompileJob.RevisionInformation , and Tgstation.Server.Common.Extensions.ValueTaskExtensions.WhenAll() .
+References Tgstation.Server.Api.Models.RepositorySettings.AccessToken , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.CommentOnTestMergeSource() , Tgstation.Server.Api.Models.Internal.RevisionInformation.CommitSha , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.FormatTestMerge() , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.Logger , Tgstation.Server.Api.Models.RepositorySettings.PostTestMergeComment , Tgstation.Server.Host.Models.CompileJob.RevisionInformation , and Tgstation.Server.Common.Extensions.ValueTaskExtensions.WhenAll() .
@@ -1083,16 +1075,16 @@ Here is the call graph for this function:
Implements Tgstation.Server.Host.Components.Deployment.Remote.IRemoteDeploymentManager .
-Definition at line 197 of file BaseRemoteDeploymentManager.cs .
- 198 {
-
199 ArgumentNullException.ThrowIfNull(compileJob);
-
200
-
201 var compileJobId = compileJob.Require(x => x.Id);
-
202 if (activationCallback !=
null && !
activationCallbacks .TryAdd(compileJobId, activationCallback))
-
203 Logger .LogError(
"activationCallbacks conflicted on CompileJob #{id}!" , compileJobId);
-
204
-
-
206 }
+
Definition at line 189 of file BaseRemoteDeploymentManager.cs .
+
190 {
+
191 ArgumentNullException.ThrowIfNull(compileJob);
+
192
+
193 var compileJobId = compileJob.Require(x => x.Id);
+
194 if (activationCallback !=
null && !
activationCallbacks .TryAdd(compileJobId, activationCallback))
+
195 Logger .LogError(
"activationCallbacks conflicted on CompileJob #{id}!" , compileJobId);
+
196
+
+
198 }
ValueTask StageDeploymentImpl(CompileJob compileJob, CancellationToken cancellationToken)
Implementation of StageDeployment(CompileJob, Action<bool>, CancellationToken).
References Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.activationCallbacks , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.Logger , and Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.StageDeploymentImpl() .
@@ -1153,7 +1145,7 @@ Here is the call graph for this function:
Returns A ValueTask representing the running operation.
-Referenced by Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.StageDeployment() .
+Referenced by Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.StageDeployment() .
@@ -1247,7 +1239,7 @@ Here is the caller graph for this function:
Definition at line 34 of file BaseRemoteDeploymentManager.cs .
-Referenced by Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.ApplyDeployment() , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.BaseRemoteDeploymentManager() , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.MarkInactive() , and Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.StageDeployment() .
+Referenced by Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.ApplyDeployment() , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.BaseRemoteDeploymentManager() , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.MarkInactive() , and Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.StageDeployment() .
@@ -1277,7 +1269,7 @@ Here is the caller graph for this function:
Definition at line 29 of file BaseRemoteDeploymentManager.cs .
-Referenced by Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.BaseRemoteDeploymentManager() , Tgstation.Server.Host.Components.Deployment.Remote.GitHubRemoteDeploymentManager.CommentOnTestMergeSource() , Tgstation.Server.Host.Components.Deployment.Remote.GitLabRemoteDeploymentManager.CommentOnTestMergeSource() , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.PostDeploymentComments() , Tgstation.Server.Host.Components.Deployment.Remote.GitHubRemoteDeploymentManager.RemoveMergedTestMerges() , Tgstation.Server.Host.Components.Deployment.Remote.GitLabRemoteDeploymentManager.RemoveMergedTestMerges() , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.StageDeployment() , Tgstation.Server.Host.Components.Deployment.Remote.GitHubRemoteDeploymentManager.StartDeployment() , and Tgstation.Server.Host.Components.Deployment.Remote.GitHubRemoteDeploymentManager.UpdateDeployment() .
+Referenced by Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.BaseRemoteDeploymentManager() , Tgstation.Server.Host.Components.Deployment.Remote.GitHubRemoteDeploymentManager.CommentOnTestMergeSource() , Tgstation.Server.Host.Components.Deployment.Remote.GitLabRemoteDeploymentManager.CommentOnTestMergeSource() , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.PostDeploymentComments() , Tgstation.Server.Host.Components.Deployment.Remote.GitHubRemoteDeploymentManager.RemoveMergedTestMerges() , Tgstation.Server.Host.Components.Deployment.Remote.GitLabRemoteDeploymentManager.RemoveMergedTestMerges() , Tgstation.Server.Host.Components.Deployment.Remote.BaseRemoteDeploymentManager.StageDeployment() , Tgstation.Server.Host.Components.Deployment.Remote.GitHubRemoteDeploymentManager.StartDeployment() , and Tgstation.Server.Host.Components.Deployment.Remote.GitHubRemoteDeploymentManager.UpdateDeployment() .
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance.html
index f8a65cab3d..2e53122c01 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance.html
@@ -594,7 +594,7 @@ Here is the call graph for this function:
-
+
@@ -621,7 +621,7 @@ Here is the call graph for this function:
-
+
@@ -1092,7 +1092,7 @@ Here is the call graph for this function:
-
+
@@ -1119,7 +1119,7 @@ Here is the call graph for this function:
-
+
@@ -1471,7 +1471,7 @@ Here is the call graph for this function:
-
+
@@ -1620,7 +1620,7 @@ Here is the call graph for this function:
-
+
@@ -1647,7 +1647,7 @@ Here is the call graph for this function:
-
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a11cc04923d2557eefd57ad2ded9eb7f2_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a11cc04923d2557eefd57ad2ded9eb7f2_cgraph.map
index 81531a04e6..ffbde6723f 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a11cc04923d2557eefd57ad2ded9eb7f2_cgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a11cc04923d2557eefd57ad2ded9eb7f2_cgraph.map
@@ -36,7 +36,7 @@
-
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a11cc04923d2557eefd57ad2ded9eb7f2_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a11cc04923d2557eefd57ad2ded9eb7f2_cgraph.md5
index 0e1ab55058..14ba0a84d4 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a11cc04923d2557eefd57ad2ded9eb7f2_cgraph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a11cc04923d2557eefd57ad2ded9eb7f2_cgraph.md5
@@ -1 +1 @@
-2aee551ae0bd6f61d460d09871550325
\ No newline at end of file
+5ae0c24f39a1533d7ca435039acfcd33
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a76b97c61b214295da99e737ab2570b5a_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a76b97c61b214295da99e737ab2570b5a_cgraph.map
index 4c9a9c39e3..d866c36abc 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a76b97c61b214295da99e737ab2570b5a_cgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a76b97c61b214295da99e737ab2570b5a_cgraph.map
@@ -26,7 +26,7 @@
-
+
@@ -53,7 +53,7 @@
-
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a76b97c61b214295da99e737ab2570b5a_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a76b97c61b214295da99e737ab2570b5a_cgraph.md5
index e82e896562..373abe32d2 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a76b97c61b214295da99e737ab2570b5a_cgraph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a76b97c61b214295da99e737ab2570b5a_cgraph.md5
@@ -1 +1 @@
-0114cee1a51384c8866cc35d16224794
\ No newline at end of file
+9e79c294434a3f00ad3547c87d2859a8
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a9ab4ae1f451c0feaf8845768bfb461c2_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a9ab4ae1f451c0feaf8845768bfb461c2_cgraph.map
index 4dadefd25e..4f284e49ab 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a9ab4ae1f451c0feaf8845768bfb461c2_cgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a9ab4ae1f451c0feaf8845768bfb461c2_cgraph.map
@@ -22,7 +22,7 @@
-
+
@@ -49,7 +49,7 @@
-
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a9ab4ae1f451c0feaf8845768bfb461c2_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a9ab4ae1f451c0feaf8845768bfb461c2_cgraph.md5
index ea3d5f4c4e..26c42f1497 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a9ab4ae1f451c0feaf8845768bfb461c2_cgraph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_a9ab4ae1f451c0feaf8845768bfb461c2_cgraph.md5
@@ -1 +1 @@
-f9bee548df93c5a814243156a58cd18f
\ No newline at end of file
+505426f24112abbf0e8c5511533bb8f3
\ No newline at end of file
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_afc1fd9e8dc3bd57b78dbcbc4e7f449b4_cgraph.map b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_afc1fd9e8dc3bd57b78dbcbc4e7f449b4_cgraph.map
index 360a7c81f5..403d65aeb3 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_afc1fd9e8dc3bd57b78dbcbc4e7f449b4_cgraph.map
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_afc1fd9e8dc3bd57b78dbcbc4e7f449b4_cgraph.map
@@ -30,7 +30,7 @@
-
+
@@ -57,7 +57,7 @@
-
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_afc1fd9e8dc3bd57b78dbcbc4e7f449b4_cgraph.md5 b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_afc1fd9e8dc3bd57b78dbcbc4e7f449b4_cgraph.md5
index 1bb0f20765..4b1367d396 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_afc1fd9e8dc3bd57b78dbcbc4e7f449b4_cgraph.md5
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_instance_afc1fd9e8dc3bd57b78dbcbc4e7f449b4_cgraph.md5
@@ -1 +1 @@
-774a29d85f481f315f444dff7625ec46
\ No newline at end of file
+110d1d8b3e83fb49460df328a9ec973b
\ No newline at end of file
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 ac3543d99f..0b711778f7 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
@@ -153,6 +153,8 @@ Properties
Definition at line 65 of file ChatEmbed.cs .
+Referenced by ConvertEmbed() .
+
@@ -180,6 +182,8 @@ Properties
Definition at line 35 of file ChatEmbed.cs .
+Referenced by ConvertEmbed() .
+
@@ -234,6 +238,8 @@ Properties
Definition at line 70 of file ChatEmbed.cs .
+Referenced by ConvertEmbed() .
+
@@ -261,6 +267,8 @@ Properties
Definition at line 40 of file ChatEmbed.cs .
+Referenced by ConvertEmbed() .
+
@@ -288,6 +296,8 @@ Properties
Definition at line 45 of file ChatEmbed.cs .
+Referenced by ConvertEmbed() .
+
@@ -342,6 +352,8 @@ Properties
Definition at line 50 of file ChatEmbed.cs .
+Referenced by ConvertEmbed() .
+
@@ -369,6 +381,8 @@ Properties
Definition at line 30 of file ChatEmbed.cs .
+Referenced by 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 9533a9c46a..c0c8139ab4 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
@@ -180,6 +180,8 @@ Properties
Definition at line 11 of file ChatEmbedFooter.cs .
+Referenced by ConvertEmbed() .
+
The documentation for this class was generated from the following file:
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 c967034ddf..5c9f6027cd 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
@@ -183,6 +183,8 @@ Properties
Definition at line 12 of file ChatEmbedMedia.cs .
+Referenced by 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 ca6a762ee7..e09cc981e4 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,6 +133,8 @@ Properties
Definition at line 11 of file ChatEmbedProvider.cs .
+Referenced by ConvertEmbed() .
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_message_content.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_message_content.html
index 86d762c52d..352b48ab45 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_message_content.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_interop_1_1_message_content.html
@@ -133,7 +133,7 @@ Properties
Definition at line 16 of file MessageContent.cs .
-Referenced by Tgstation.Server.Host.Components.Chat.ChatManager.SendMessage() .
+Referenced by Tgstation.Server.Host.Components.Chat.ChatManager.SendMessage() , and Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendMessage() .
@@ -162,7 +162,7 @@ Properties
Definition at line 11 of file MessageContent.cs .
-Referenced by Tgstation.Server.Host.Components.Watchdog.WatchdogBase.HandleChatCommand() , Tgstation.Server.Host.Components.Session.SessionController.ProcessBridgeCommand() , Tgstation.Server.Host.Components.Chat.ChatManager.SendMessage() , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() .
+Referenced by Tgstation.Server.Host.Components.Watchdog.WatchdogBase.HandleChatCommand() , Tgstation.Server.Host.Components.Session.SessionController.ProcessBridgeCommand() , Tgstation.Server.Host.Components.Chat.ChatManager.SendMessage() , Tgstation.Server.Host.Components.Chat.Providers.DiscordProvider.SendMessage() , and Tgstation.Server.Host.Components.Chat.Providers.IrcProvider.SendMessage() .
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_static_files_1_1_configuration.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_static_files_1_1_configuration.html
index 6e9902053d..b3954a0e07 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_static_files_1_1_configuration.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_static_files_1_1_configuration.html
@@ -593,7 +593,7 @@ Static Private Attributes
238 tailFileExistsTask.Result
240 : null,
- 241 false);
+
242 }
243 }
Task EnsureDirectories(CancellationToken cancellationToken)
Ensures standard configuration directories exist.
@@ -605,6 +605,7 @@ Static Private Attributes
string ConcatPath(params string[] paths)
Combines an array of strings into a path.
Task< bool > FileExists(string path, CancellationToken cancellationToken)
Check that the file at path exists.
ValueTask CopyDirectory(IEnumerable< string >? ignore, Func< string, string, ValueTask >? postCopyCallback, string src, string dest, int? taskThrottle, CancellationToken cancellationToken)
Copies a directory from src to dest .
+
References Tgstation.Server.Host.Components.StaticFiles.Configuration.CodeModificationsHeadFile , Tgstation.Server.Host.Components.StaticFiles.Configuration.CodeModificationsSubdirectory , Tgstation.Server.Host.Components.StaticFiles.Configuration.CodeModificationsTailFile , Tgstation.Server.Host.IO.IIOManager.ConcatPath() , Tgstation.Server.Host.IO.IIOManager.CopyDirectory() , Tgstation.Server.Host.Components.StaticFiles.Configuration.EnsureDirectories() , Tgstation.Server.Host.IO.IIOManager.FileExists() , Tgstation.Server.Host.Components.StaticFiles.Configuration.generalConfiguration , Tgstation.Server.Host.Components.StaticFiles.Configuration.ioManager , Tgstation.Server.Host.Utils.SemaphoreSlimContext.Lock() , Tgstation.Server.Host.Components.StaticFiles.Configuration.logger , and Tgstation.Server.Host.Components.StaticFiles.Configuration.semaphore .
-Returns A ValueTask<TResult> resulting in true if a reboot is required, false otherwise.
+Returns A ValueTask<TResult> resulting in true if a reboot is required, false otherwise.
async ValueTask< MessageContent > HandleChatCommand (string commandName, string arguments, ChatUser sender, CancellationToken cancellationToken)
@@ -288,7 +288,7 @@ Public Member Functions
Handle a restart of the server.Parameters
updateVersion The Version being updated to, null if not being changed.
- handlerMayDelayShutdownWithExtremelyLongRunningTasks If false the IRestartHandler should aim to complete the Task returned from this function ASAP.
+ handlerMayDelayShutdownWithExtremelyLongRunningTasks If false the IRestartHandler should aim to complete the Task returned from this function ASAP.
cancellationToken The CancellationToken for the operation.
@@ -325,7 +325,7 @@ Public Member Functions
-Returns A ValueTask<TResult> resulting in true if the broadcast succeeded., false otherwise.
+Returns A ValueTask<TResult> resulting in true if the broadcast succeeded., false otherwise.
void RunMetricsScrape ()
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_basic_watchdog.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_basic_watchdog.html
index f6ab5eb736..cc9652f7b7 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_basic_watchdog.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_basic_watchdog.html
@@ -213,7 +213,7 @@ Public Member Functions
-Returns A ValueTask<TResult> resulting in true if a reboot is required, false otherwise.
+Returns A ValueTask<TResult> resulting in true if a reboot is required, false otherwise.
async ValueTask< MessageContent > HandleChatCommand (string commandName, string arguments, ChatUser sender, CancellationToken cancellationToken)
@@ -269,7 +269,7 @@ Public Member Functions
Handle a restart of the server.Parameters
updateVersion The Version being updated to, null if not being changed.
- handlerMayDelayShutdownWithExtremelyLongRunningTasks If false the IRestartHandler should aim to complete the Task returned from this function ASAP.
+ handlerMayDelayShutdownWithExtremelyLongRunningTasks If false the IRestartHandler should aim to complete the Task returned from this function ASAP.
cancellationToken The CancellationToken for the operation.
@@ -306,7 +306,7 @@ Public Member Functions
-Returns A ValueTask<TResult> resulting in true if the broadcast succeeded., false otherwise.
+Returns A ValueTask<TResult> resulting in true if the broadcast succeeded., false otherwise.
void RunMetricsScrape ()
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_posix_watchdog.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_posix_watchdog.html
index c0c100ed0c..79a513b867 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_posix_watchdog.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_posix_watchdog.html
@@ -245,7 +245,7 @@ Public Member Functions
-Returns A ValueTask<TResult> resulting in true if a reboot is required, false otherwise.
+Returns A ValueTask<TResult> resulting in true if a reboot is required, false otherwise.
async ValueTask< MessageContent > HandleChatCommand (string commandName, string arguments, ChatUser sender, CancellationToken cancellationToken)
@@ -301,7 +301,7 @@ Public Member Functions
Handle a restart of the server.
Parameters
updateVersion The Version being updated to, null if not being changed.
- handlerMayDelayShutdownWithExtremelyLongRunningTasks If false the IRestartHandler should aim to complete the Task returned from this function ASAP.
+ handlerMayDelayShutdownWithExtremelyLongRunningTasks If false the IRestartHandler should aim to complete the Task returned from this function ASAP.
cancellationToken The CancellationToken for the operation.
@@ -3992,7 +3993,7 @@ Here is the call graph for this function:
Stops MonitorLifetimes(CancellationToken). Doesn't kill the servers.
-
Returns A ValueTask<TResult> resulting in true if the monitor was running, false otherwise.
+
Returns A ValueTask<TResult> resulting in true if the monitor was running, false otherwise.
Definition at line 662 of file WatchdogBase.cs .
663 {
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_windows_watchdog.html b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_windows_watchdog.html
index 4e6056e693..d706f128ef 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_windows_watchdog.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_components_1_1_watchdog_1_1_windows_watchdog.html
@@ -233,7 +233,7 @@ Public Member Functions
-
Returns A ValueTask<TResult> resulting in true if a reboot is required, false otherwise.
+
Returns A ValueTask<TResult> resulting in true if a reboot is required, false otherwise.
async ValueTask< MessageContent > HandleChatCommand (string commandName, string arguments, ChatUser sender, CancellationToken cancellationToken)
@@ -289,7 +289,7 @@ Public Member Functions
Handle a restart of the server.Parameters
updateVersion The Version being updated to, null if not being changed.
- handlerMayDelayShutdownWithExtremelyLongRunningTasks If false the IRestartHandler should aim to complete the Task returned from this function ASAP.
+ handlerMayDelayShutdownWithExtremelyLongRunningTasks If false the IRestartHandler should aim to complete the Task returned from this function ASAP.
cancellationToken The CancellationToken for the operation.
@@ -326,7 +326,7 @@ Public Member Functions
-
Returns A ValueTask<TResult> resulting in true if the broadcast succeeded., false otherwise.
+
Returns A ValueTask<TResult> resulting in true if the broadcast succeeded., false otherwise.
void RunMetricsScrape ()
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_configuration_controller.html b/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_configuration_controller.html
index 1026063525..bac612da7c 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_configuration_controller.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_configuration_controller.html
@@ -764,7 +764,7 @@ Here is the call graph for this function:
-
Returns true if a ForbidResult should be returned, false otherwise.
+
Returns true if a ForbidResult should be returned, false otherwise.
Definition at line 345 of file ConfigurationController.cs .
346 {
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_repository_controller.html b/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_repository_controller.html
index aa254421e8..deea92ad59 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_repository_controller.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_controllers_1_1_repository_controller.html
@@ -816,7 +816,7 @@ Here is the call graph for this function:
-
Returns A ValueTask<TResult> resulting in true if the databaseContext was modified in a way that requires saving, false otherwise.
+
Returns A ValueTask<TResult> resulting in true if the databaseContext was modified in a way that requires saving, false otherwise.
Definition at line 533 of file RepositoryController.cs .
539 {
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_o_auth_connections.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_o_auth_connections.html
index 6b8a8ef208..22569c12e4 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_o_auth_connections.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_o_auth_connections.html
@@ -1026,7 +1026,7 @@ Protected Member Functions
21 Id = table.Column<
long >(nullable:
false )
22 .Annotation("SqlServer:Identity" , "1, 1" ),
23 Provider = table.Column<int >(nullable: false ),
-
24 ExternalUserId = table.Column<string >(nullable: false, maxLength: 100),
+
24 ExternalUserId = table.Column<
string >(nullable:
false , maxLength: 100),
25 UserId = table.Column<long>(nullable: true),
26 },
27 constraints: table =>
@@ -1053,6 +1053,7 @@ Protected Member Functions
48 }
@ UserId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.User.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_user_groups.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_user_groups.html
index 6450cfe051..9313fd2cb7 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_user_groups.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_add_user_groups.html
@@ -1103,14 +1103,14 @@ Protected Member Functions
233 Id = table.Column<
long >(type:
"bigint" , nullable:
false )
234 .Annotation("SqlServer:Identity" , "1, 1" ),
235 ByondRights = table.Column<decimal>(type: "decimal(20,0)" , nullable: false ),
- 236 ChatBotRights = table.Column<decimal>(type: "decimal(20,0)" , nullable: false),
-
- 238 DreamDaemonRights = table.Column<decimal>(type:
"decimal(20,0)" , nullable: false),
- 239 DreamMakerRights = table.Column<decimal>(type:
"decimal(20,0)" , nullable: false),
- 240 InstanceId = table.Column<long>(type: "bigint" , nullable: false),
- 241 InstanceUserRights = table.Column<decimal>(type: "decimal(20,0)" , nullable: false),
- 242 RepositoryRights = table.Column<decimal>(type:
"decimal(20,0)" , nullable: false),
- 243 UserId = table.Column<long>(type:
"bigint" , nullable: false),
+ 236 ChatBotRights = table.Column<decimal>(type:
"decimal(20,0)" , nullable:
false ),
+
+
+
+ 240 InstanceId = table.Column<long>(type:
"bigint" , nullable:
false ),
+ 241 InstanceUserRights = table.Column<decimal>(type:
"decimal(20,0)" , nullable:
false ),
+
+ 243 UserId = table.Column<long>(type:
"bigint" , nullable:
false ),
244 },
245 constraints: table =>
246 {
@@ -1179,6 +1179,7 @@ Protected Member Functions
DreamDaemonRights
Rights for managing DreamDaemon.
@ UserId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.User.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
@@ -1263,7 +1264,7 @@ Protected Member Functions
65 Id = table.Column<
long >(nullable:
false )
66 .Annotation("SqlServer:Identity" , "1, 1" ),
- 68 InstanceManagerRights = table.Column<decimal>(nullable: false),
+ 68 InstanceManagerRights = table.Column<decimal>(nullable:
false ),
69 UserId = table.Column<long>(nullable: true),
70 GroupId = table.Column<long>(nullable: true),
71 },
@@ -1291,14 +1292,14 @@ Protected Member Functions
93 Id = table.Column<
long >(nullable:
false )
94 .Annotation("SqlServer:Identity" , "1, 1" ),
95 PermissionSetId = table.Column<long >(nullable: false ),
- 96 InstancePermissionSetRights = table.Column<decimal>(nullable: false),
- 97 ByondRights = table.Column<decimal>(nullable: false),
-
-
-
-
-
- 103 InstanceId = table.Column<long>(nullable: false),
+ 96 InstancePermissionSetRights = table.Column<decimal>(nullable:
false ),
+ 97 ByondRights = table.Column<decimal>(nullable:
false ),
+
+
+
+
+
+ 103 InstanceId = table.Column<long>(nullable:
false ),
104 },
105 constraints: table =>
106 {
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_initial_create.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_initial_create.html
index b06be432c7..e58d379fd7 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_initial_create.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_initial_create.html
@@ -921,14 +921,14 @@ Protected Member Functions
23 Id = table.Column<
long >(nullable:
false )
24 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
25 Enabled = table.Column<
bool >(nullable:
false ),
- 26 CreatedAt = table.Column<DateTimeOffset>(nullable: false),
+ 26 CreatedAt = table.Column<DateTimeOffset>(nullable:
false ),
27 SystemIdentifier = table.Column<string>(nullable: true),
- 28 Name = table.Column<string>(nullable: false),
-
-
+ 28 Name = table.Column<string>(nullable:
false ),
+
+
31 PasswordHash = table.Column<string>(nullable: true),
32 CreatedById = table.Column<long>(nullable: true),
- 33 CanonicalName = table.Column<string>(nullable: false),
+ 33 CanonicalName = table.Column<string>(nullable:
false ),
34 LastPasswordUpdate = table.Column<DateTimeOffset>(nullable: true),
35 },
36 constraints: table =>
@@ -948,13 +948,13 @@ Protected Member Functions
50 {
51 IrcChannel = table.Column<string >(nullable: true ),
52 DiscordChannelId = table.Column<decimal>(nullable: true),
- 53 IsAdminChannel = table.Column<bool>(nullable: false),
- 54 IsWatchdogChannel = table.Column<bool>(nullable: false),
- 55 IsUpdatesChannel = table.Column<bool>(nullable: false),
+ 53 IsAdminChannel = table.Column<bool>(nullable:
false ),
+ 54 IsWatchdogChannel = table.Column<bool>(nullable:
false ),
+ 55 IsUpdatesChannel = table.Column<bool>(nullable:
false ),
56 Tag = table.Column<string>(nullable: true),
- 57 Id = table.Column<long>(nullable: false)
+ 57 Id = table.Column<long>(nullable:
false )
58 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
- 59 ChatSettingsId = table.Column<long>(nullable: false),
+ 59 ChatSettingsId = table.Column<long>(nullable:
false ),
60 },
61 constraints: table =>
62 {
@@ -966,14 +966,14 @@ Protected Member Functions
68 columns: table => new
69 {
70 ChatCommandsJson = table.Column<string >(nullable: false ),
- 71 ChatChannelsJson = table.Column<string >(nullable: false),
- 72 ServerCommandsJson = table.Column<string>(nullable: false),
- 73 AccessIdentifier = table.Column<string>(nullable: false),
- 74 ProcessId = table.Column<int>(nullable: false),
- 75 IsPrimary = table.Column<bool>(nullable: false),
- 76 Port = table.Column<int>(nullable: false),
-
- 78 Id = table.Column<long>(nullable: false)
+ 71 ChatChannelsJson = table.Column<
string >(nullable:
false ),
+ 72 ServerCommandsJson = table.Column<string>(nullable:
false ),
+ 73 AccessIdentifier = table.Column<string>(nullable:
false ),
+ 74 ProcessId = table.Column<int>(nullable:
false ),
+ 75 IsPrimary = table.Column<bool>(nullable:
false ),
+ 76 Port = table.Column<int>(nullable:
false ),
+
+ 78 Id = table.Column<long>(nullable:
false )
79 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
80 CompileJobId = table.Column<long>(nullable: true),
81 },
@@ -987,7 +987,7 @@ Protected Member Functions
89 columns: table => new
90 {
91 AlphaIsActive = table.Column<bool >(nullable: false ),
- 92 Id = table.Column<long >(nullable: false)
+ 92 Id = table.Column<
long >(nullable:
false )
93 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
94 AlphaId = table.Column<long>(nullable: true),
95 BravoId = table.Column<long>(nullable: true),
@@ -1016,10 +1016,10 @@ Protected Member Functions
118 Id = table.Column<
long >(nullable:
false )
119 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
120 Name = table.Column<string >(nullable: false ),
- 121 Path = table.Column<string >(nullable: false),
- 122 Online = table.Column<bool>(nullable: false),
-
- 124 AutoUpdateInterval = table.Column<long>(nullable: false),
+ 121 Path = table.Column<
string >(nullable:
false ),
+
+
+ 124 AutoUpdateInterval = table.Column<long>(nullable:
false ),
125 WatchdogReattachInformationId = table.Column<long>(nullable: true),
126 },
127 constraints: table =>
@@ -1042,8 +1042,8 @@ Protected Member Functions
144 Name = table.Column<string >(nullable: false ),
145 Enabled = table.Column<
bool >(nullable: true),
146 Provider = table.Column<int>(nullable: true),
- 147 ConnectionString = table.Column<string>(nullable: false),
- 148 InstanceId = table.Column<long>(nullable: false),
+ 147 ConnectionString = table.Column<string>(nullable:
false ),
+ 148 InstanceId = table.Column<long>(nullable:
false ),
149 },
150 constraints: table =>
151 {
@@ -1061,18 +1061,18 @@ Protected Member Functions
163 columns: table => new
164 {
165 AllowWebClient = table.Column<bool >(nullable: false ),
- 166 SecurityLevel = table.Column<int >(nullable: false),
- 167 PrimaryPort = table.Column<int>(nullable: false),
- 168 SecondaryPort = table.Column<int>(nullable: false),
- 169 StartupTimeout = table.Column<long>(nullable: false),
- 170 AutoStart = table.Column<bool>(nullable: false),
-
-
- 173 Id = table.Column<long>(nullable: false)
+ 166 SecurityLevel = table.Column<
int >(nullable:
false ),
+ 167 PrimaryPort = table.Column<int>(nullable:
false ),
+ 168 SecondaryPort = table.Column<int>(nullable:
false ),
+ 169 StartupTimeout = table.Column<long>(nullable:
false ),
+ 170 AutoStart = table.Column<bool>(nullable:
false ),
+
+
+ 173 Id = table.Column<long>(nullable:
false )
174 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
175 ProcessId = table.Column<int>(nullable: true),
176 AccessToken = table.Column<string>(nullable: true),
- 177 InstanceId = table.Column<long>(nullable: false),
+ 177 InstanceId = table.Column<long>(nullable:
false ),
178 },
179 constraints: table =>
180 {
@@ -1090,10 +1090,10 @@ Protected Member Functions
192 columns: table => new
193 {
194 ProjectName = table.Column<string >(nullable: true ),
- 195 ApiValidationPort = table.Column<int >(nullable: false),
- 196 Id = table.Column<long>(nullable: false)
+ 195 ApiValidationPort = table.Column<
int >(nullable:
false ),
+ 196 Id = table.Column<long>(nullable:
false )
197 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
- 198 InstanceId = table.Column<long>(nullable: false),
+ 198 InstanceId = table.Column<long>(nullable:
false ),
199 },
200 constraints: table =>
201 {
@@ -1111,16 +1111,16 @@ Protected Member Functions
213 columns: table => new
214 {
215 UserId = table.Column<
long >(nullable:
false ),
- 216 InstanceUserRights = table.Column<decimal>(nullable: false),
- 217 ByondRights = table.Column<decimal>(nullable: false),
-
-
-
-
-
- 223 Id = table.Column<long>(nullable: false)
+ 216 InstanceUserRights = table.Column<decimal>(nullable:
false ),
+ 217 ByondRights = table.Column<decimal>(nullable:
false ),
+
+
+
+
+
+ 223 Id = table.Column<long>(nullable:
false )
224 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
- 225 InstanceId = table.Column<long>(nullable: false),
+ 225 InstanceId = table.Column<long>(nullable:
false ),
226 },
227 constraints: table =>
228 {
@@ -1147,14 +1147,14 @@ Protected Member Functions
249 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
250 Description = table.Column<string >(nullable: false ),
251 ExceptionDetails = table.Column<string >(nullable: true),
- 252 StartedAt = table.Column<DateTimeOffset>(nullable: false),
+ 252 StartedAt = table.Column<DateTimeOffset>(nullable:
false ),
253 StoppedAt = table.Column<DateTimeOffset>(nullable: true),
- 254 Cancelled = table.Column<bool>(nullable: false),
+ 254 Cancelled = table.Column<bool>(nullable:
false ),
255 CancelRightsType = table.Column<decimal>(nullable: true),
256 CancelRight = table.Column<decimal>(nullable: true),
- 257 StartedById = table.Column<long>(nullable: false),
+ 257 StartedById = table.Column<long>(nullable:
false ),
258 CancelledById = table.Column<long>(nullable: true),
- 259 InstanceId = table.Column<long>(nullable: false),
+ 259 InstanceId = table.Column<long>(nullable:
false ),
260 },
261 constraints: table =>
262 {
@@ -1184,16 +1184,16 @@ Protected Member Functions
286 columns: table => new
287 {
288 CommitterName = table.Column<string >(nullable: false ),
- 289 CommitterEmail = table.Column<string >(nullable: false),
+ 289 CommitterEmail = table.Column<
string >(nullable:
false ),
290 AccessUser = table.Column<string>(nullable: true),
291 AccessToken = table.Column<string>(nullable: true),
- 292 PushTestMergeCommits = table.Column<bool>(nullable: false),
- 293 ShowTestMergeCommitters = table.Column<bool>(nullable: false),
- 294 AutoUpdatesKeepTestMerges = table.Column<bool>(nullable: false),
- 295 AutoUpdatesSynchronize = table.Column<bool>(nullable: false),
- 296 Id = table.Column<long>(nullable: false)
+ 292 PushTestMergeCommits = table.Column<bool>(nullable:
false ),
+ 293 ShowTestMergeCommitters = table.Column<bool>(nullable:
false ),
+ 294 AutoUpdatesKeepTestMerges = table.Column<bool>(nullable:
false ),
+ 295 AutoUpdatesSynchronize = table.Column<bool>(nullable:
false ),
+ 296 Id = table.Column<long>(nullable:
false )
297 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
- 298 InstanceId = table.Column<long>(nullable: false),
+ 298 InstanceId = table.Column<long>(nullable:
false ),
299 },
300 constraints: table =>
301 {
@@ -1211,10 +1211,10 @@ Protected Member Functions
313 columns: table => new
314 {
315 CommitSha = table.Column<string >(maxLength: 40, nullable: false ),
- 316 OriginCommitSha = table.Column<string >(maxLength: 40, nullable: false),
- 317 Id = table.Column<long>(nullable: false)
+ 316 OriginCommitSha = table.Column<
string >(maxLength: 40, nullable:
false ),
+ 317 Id = table.Column<long>(nullable:
false )
318 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
- 319 InstanceId = table.Column<long>(nullable: false),
+ 319 InstanceId = table.Column<long>(nullable:
false ),
320 },
321 constraints: table =>
322 {
@@ -1237,8 +1237,8 @@ Protected Member Functions
339 Output = table.Column<string >(nullable: true),
340 DirectoryName = table.Column<Guid>(nullable: true),
341 JobId = table.Column<long>(nullable: true),
- 342 RevisionInformationId = table.Column<long>(nullable: false),
- 343 ByondVersion = table.Column<string>(nullable: false),
+ 342 RevisionInformationId = table.Column<long>(nullable:
false ),
+ 343 ByondVersion = table.Column<string>(nullable:
false ),
344 },
345 constraints: table =>
346 {
@@ -1262,16 +1262,16 @@ Protected Member Functions
364 columns: table => new
365 {
366 Number = table.Column<int >(nullable: false ),
- 367 PullRequestRevision = table.Column<string >(nullable: false),
+ 367 PullRequestRevision = table.Column<
string >(nullable:
false ),
368 Comment = table.Column<string>(nullable: true),
- 369 TitleAtMerge = table.Column<string>(nullable: false),
- 370 BodyAtMerge = table.Column<string>(nullable: false),
- 371 Url = table.Column<string>(nullable: false),
- 372 Author = table.Column<string>(nullable: false),
- 373 Id = table.Column<long>(nullable: false)
+ 369 TitleAtMerge = table.Column<string>(nullable:
false ),
+ 370 BodyAtMerge = table.Column<string>(nullable:
false ),
+ 371 Url = table.Column<string>(nullable:
false ),
+ 372 Author = table.Column<string>(nullable:
false ),
+ 373 Id = table.Column<long>(nullable:
false )
374 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
- 375 MergedAt = table.Column<DateTimeOffset>(nullable: false),
- 376 MergedById = table.Column<long>(nullable: false),
+ 375 MergedAt = table.Column<DateTimeOffset>(nullable:
false ),
+ 376 MergedById = table.Column<long>(nullable:
false ),
377 PrimaryRevisionInformationId = table.Column<long>(nullable: true),
378 },
379 constraints: table =>
@@ -1298,7 +1298,7 @@ Protected Member Functions
400 Id = table.Column<
long >(nullable:
false )
401 .Annotation("SqlServer:ValueGenerationStrategy" , SqlServerValueGenerationStrategy.IdentityColumn),
402 TestMergeId = table.Column<long >(nullable: false ),
- 403 RevisionInformationId = table.Column<long >(nullable: false),
+ 403 RevisionInformationId = table.Column<
long >(nullable:
false ),
404 },
405 constraints: table =>
406 {
@@ -1500,6 +1500,7 @@ Protected Member Functions
AdministrationRights
Administration rights for the server.
@ UserId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.User.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
RebootState
Represents the action to take when /world/Reboot() is called.
@ Enabled
The OAuth Gateway is enabled.
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_remove_experimental_watchdog.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_remove_experimental_watchdog.html
index aa5d6d8b7c..596c9b3e5d 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_remove_experimental_watchdog.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_s_remove_experimental_watchdog.html
@@ -955,9 +955,9 @@ Protected Member Functions
62 Id = table.Column<
long >(type:
"bigint" , nullable:
false )
63 .Annotation("SqlServer:Identity" , "1, 1" ),
64 AlphaId = table.Column<long >(type: "bigint" , nullable: true ),
- 65 AlphaIsActive = table.Column<bool >(type: "bit" , nullable: false),
+ 65 AlphaIsActive = table.Column<
bool >(type:
"bit" , nullable:
false ),
66 BravoId = table.Column<long>(type: "bigint" , nullable: true),
- 67 InstanceId = table.Column<long>(type: "bigint" , nullable: false),
+ 67 InstanceId = table.Column<long>(type:
"bigint" , nullable:
false ),
68 },
69 constraints: table =>
70 {
@@ -999,6 +999,7 @@ Protected Member Functions
106 unique: true);
107 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_o_auth_connections.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_o_auth_connections.html
index 16ed4a0222..8f1287522c 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_o_auth_connections.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_o_auth_connections.html
@@ -1016,7 +1016,7 @@ Protected Member Functions
22 Id = table.Column<
long >(nullable:
false )
23 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
24 Provider = table.Column<int >(nullable: false ),
- 25 ExternalUserId = table.Column<string >(nullable: false, maxLength: 100),
+ 25 ExternalUserId = table.Column<
string >(nullable:
false , maxLength: 100),
26 UserId = table.Column<long>(nullable: true),
27 },
28 constraints: table =>
@@ -1043,6 +1043,7 @@ Protected Member Functions
49 }
@ UserId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.User.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_user_groups.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_user_groups.html
index d5f7217b85..555b68c21a 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_user_groups.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_add_user_groups.html
@@ -1089,14 +1089,14 @@ Protected Member Functions
232 Id = table.Column<
long >(type:
"bigint" , nullable:
false )
233 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
234 ByondRights = table.Column<ulong>(type: "bigint unsigned" , nullable: false ),
- 235 ChatBotRights = table.Column<ulong>(type: "bigint unsigned" , nullable: false),
-
- 237 DreamDaemonRights = table.Column<ulong>(type:
"bigint unsigned" , nullable: false),
- 238 DreamMakerRights = table.Column<ulong>(type:
"bigint unsigned" , nullable: false),
- 239 InstanceId = table.Column<long>(type: "bigint" , nullable: false),
- 240 InstanceUserRights = table.Column<ulong>(type: "bigint unsigned" , nullable: false),
- 241 RepositoryRights = table.Column<ulong>(type:
"bigint unsigned" , nullable: false),
- 242 UserId = table.Column<long>(type:
"bigint" , nullable: false),
+ 235 ChatBotRights = table.Column<ulong>(type:
"bigint unsigned" , nullable:
false ),
+
+
+
+ 239 InstanceId = table.Column<long>(type:
"bigint" , nullable:
false ),
+ 240 InstanceUserRights = table.Column<ulong>(type:
"bigint unsigned" , nullable:
false ),
+
+ 242 UserId = table.Column<long>(type:
"bigint" , nullable:
false ),
243 },
244 constraints: table =>
245 {
@@ -1165,6 +1165,7 @@ Protected Member Functions
DreamDaemonRights
Rights for managing DreamDaemon.
@ UserId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.User.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
@@ -1249,7 +1250,7 @@ Protected Member Functions
66 Id = table.Column<
long >(nullable:
false )
67 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
- 69 InstanceManagerRights = table.Column<ulong>(nullable: false),
+ 69 InstanceManagerRights = table.Column<ulong>(nullable:
false ),
70 UserId = table.Column<long>(nullable: true),
71 GroupId = table.Column<long>(nullable: true),
72 },
@@ -1277,14 +1278,14 @@ Protected Member Functions
94 Id = table.Column<
long >(nullable:
false )
95 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
96 PermissionSetId = table.Column<long >(nullable: false ),
- 97 InstancePermissionSetRights = table.Column<ulong>(nullable: false),
- 98 ByondRights = table.Column<ulong>(nullable: false),
-
-
-
-
-
- 104 InstanceId = table.Column<long>(nullable: false),
+ 97 InstancePermissionSetRights = table.Column<ulong>(nullable:
false ),
+ 98 ByondRights = table.Column<ulong>(nullable:
false ),
+
+
+
+
+
+ 104 InstanceId = table.Column<long>(nullable:
false ),
105 },
106 constraints: table =>
107 {
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_initial_create.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_initial_create.html
index 1c299cd83a..c412cecb73 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_initial_create.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_initial_create.html
@@ -895,14 +895,14 @@ Protected Member Functions
23 Id = table.Column<
long >(nullable:
false )
24 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
25 Enabled = table.Column<
bool >(nullable:
false ),
- 26 CreatedAt = table.Column<DateTimeOffset>(nullable: false),
+ 26 CreatedAt = table.Column<DateTimeOffset>(nullable:
false ),
27 SystemIdentifier = table.Column<string>(nullable: true),
- 28 Name = table.Column<string>(nullable: false),
-
-
+ 28 Name = table.Column<string>(nullable:
false ),
+
+
31 PasswordHash = table.Column<string>(nullable: true),
32 CreatedById = table.Column<long>(nullable: true),
- 33 CanonicalName = table.Column<string>(nullable: false),
+ 33 CanonicalName = table.Column<string>(nullable:
false ),
34 LastPasswordUpdate = table.Column<DateTimeOffset>(nullable: true),
35 },
36 constraints: table =>
@@ -922,13 +922,13 @@ Protected Member Functions
50 {
51 IrcChannel = table.Column<string >(nullable: true ),
52 DiscordChannelId = table.Column<ulong>(nullable: true),
- 53 IsAdminChannel = table.Column<bool>(nullable: false),
- 54 IsWatchdogChannel = table.Column<bool>(nullable: false),
- 55 IsUpdatesChannel = table.Column<bool>(nullable: false),
+ 53 IsAdminChannel = table.Column<bool>(nullable:
false ),
+ 54 IsWatchdogChannel = table.Column<bool>(nullable:
false ),
+ 55 IsUpdatesChannel = table.Column<bool>(nullable:
false ),
56 Tag = table.Column<string>(nullable: true),
- 57 Id = table.Column<long>(nullable: false)
+ 57 Id = table.Column<long>(nullable:
false )
58 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
- 59 ChatSettingsId = table.Column<long>(nullable: false),
+ 59 ChatSettingsId = table.Column<long>(nullable:
false ),
60 },
61 constraints: table =>
62 {
@@ -940,14 +940,14 @@ Protected Member Functions
68 columns: table => new
69 {
70 ChatCommandsJson = table.Column<string >(nullable: false ),
- 71 ChatChannelsJson = table.Column<string >(nullable: false),
- 72 ServerCommandsJson = table.Column<string>(nullable: false),
- 73 AccessIdentifier = table.Column<string>(nullable: false),
- 74 ProcessId = table.Column<int>(nullable: false),
- 75 IsPrimary = table.Column<bool>(nullable: false),
- 76 Port = table.Column<ushort>(nullable: false),
-
- 78 Id = table.Column<long>(nullable: false)
+ 71 ChatChannelsJson = table.Column<
string >(nullable:
false ),
+ 72 ServerCommandsJson = table.Column<string>(nullable:
false ),
+ 73 AccessIdentifier = table.Column<string>(nullable:
false ),
+ 74 ProcessId = table.Column<int>(nullable:
false ),
+ 75 IsPrimary = table.Column<bool>(nullable:
false ),
+ 76 Port = table.Column<ushort>(nullable:
false ),
+
+ 78 Id = table.Column<long>(nullable:
false )
79 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
80 CompileJobId = table.Column<long>(nullable: true),
81 },
@@ -961,7 +961,7 @@ Protected Member Functions
89 columns: table => new
90 {
91 AlphaIsActive = table.Column<bool >(nullable: false ),
- 92 Id = table.Column<long >(nullable: false)
+ 92 Id = table.Column<
long >(nullable:
false )
93 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
94 AlphaId = table.Column<long>(nullable: true),
95 BravoId = table.Column<long>(nullable: true),
@@ -990,10 +990,10 @@ Protected Member Functions
118 Id = table.Column<
long >(nullable:
false )
119 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
120 Name = table.Column<string >(nullable: false ),
- 121 Path = table.Column<string >(nullable: false),
- 122 Online = table.Column<bool>(nullable: false),
-
- 124 AutoUpdateInterval = table.Column<uint>(nullable: false),
+ 121 Path = table.Column<
string >(nullable:
false ),
+
+
+ 124 AutoUpdateInterval = table.Column<uint>(nullable:
false ),
125 WatchdogReattachInformationId = table.Column<long>(nullable: true),
126 },
127 constraints: table =>
@@ -1016,8 +1016,8 @@ Protected Member Functions
144 Name = table.Column<string >(nullable: false ),
145 Enabled = table.Column<
bool >(nullable: true),
146 Provider = table.Column<int>(nullable: true),
- 147 ConnectionString = table.Column<string>(nullable: false),
- 148 InstanceId = table.Column<long>(nullable: false),
+ 147 ConnectionString = table.Column<string>(nullable:
false ),
+ 148 InstanceId = table.Column<long>(nullable:
false ),
149 },
150 constraints: table =>
151 {
@@ -1035,18 +1035,18 @@ Protected Member Functions
163 columns: table => new
164 {
165 AllowWebClient = table.Column<bool >(nullable: false ),
- 166 SecurityLevel = table.Column<int >(nullable: false),
- 167 PrimaryPort = table.Column<ushort>(nullable: false),
- 168 SecondaryPort = table.Column<ushort>(nullable: false),
- 169 StartupTimeout = table.Column<uint>(nullable: false),
- 170 AutoStart = table.Column<bool>(nullable: false),
-
-
- 173 Id = table.Column<long>(nullable: false)
+ 166 SecurityLevel = table.Column<
int >(nullable:
false ),
+ 167 PrimaryPort = table.Column<ushort>(nullable:
false ),
+ 168 SecondaryPort = table.Column<ushort>(nullable:
false ),
+ 169 StartupTimeout = table.Column<uint>(nullable:
false ),
+ 170 AutoStart = table.Column<bool>(nullable:
false ),
+
+
+ 173 Id = table.Column<long>(nullable:
false )
174 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
175 ProcessId = table.Column<int>(nullable: true),
176 AccessToken = table.Column<string>(nullable: true),
- 177 InstanceId = table.Column<long>(nullable: false),
+ 177 InstanceId = table.Column<long>(nullable:
false ),
178 },
179 constraints: table =>
180 {
@@ -1064,10 +1064,10 @@ Protected Member Functions
192 columns: table => new
193 {
194 ProjectName = table.Column<string >(nullable: true ),
- 195 ApiValidationPort = table.Column<ushort>(nullable: false),
- 196 Id = table.Column<long>(nullable: false)
+ 195 ApiValidationPort = table.Column<ushort>(nullable:
false ),
+ 196 Id = table.Column<long>(nullable:
false )
197 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
- 198 InstanceId = table.Column<long>(nullable: false),
+ 198 InstanceId = table.Column<long>(nullable:
false ),
199 },
200 constraints: table =>
201 {
@@ -1085,16 +1085,16 @@ Protected Member Functions
213 columns: table => new
214 {
215 UserId = table.Column<
long >(nullable:
false ),
- 216 InstanceUserRights = table.Column<ulong>(nullable: false),
- 217 ByondRights = table.Column<ulong>(nullable: false),
-
-
-
-
-
- 223 Id = table.Column<long>(nullable: false)
+ 216 InstanceUserRights = table.Column<ulong>(nullable:
false ),
+ 217 ByondRights = table.Column<ulong>(nullable:
false ),
+
+
+
+
+
+ 223 Id = table.Column<long>(nullable:
false )
224 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
- 225 InstanceId = table.Column<long>(nullable: false),
+ 225 InstanceId = table.Column<long>(nullable:
false ),
226 },
227 constraints: table =>
228 {
@@ -1121,14 +1121,14 @@ Protected Member Functions
249 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
250 Description = table.Column<string >(nullable: false ),
251 ExceptionDetails = table.Column<string >(nullable: true),
- 252 StartedAt = table.Column<DateTimeOffset>(nullable: false),
+ 252 StartedAt = table.Column<DateTimeOffset>(nullable:
false ),
253 StoppedAt = table.Column<DateTimeOffset>(nullable: true),
- 254 Cancelled = table.Column<bool>(nullable: false),
+ 254 Cancelled = table.Column<bool>(nullable:
false ),
255 CancelRightsType = table.Column<ulong>(nullable: true),
256 CancelRight = table.Column<ulong>(nullable: true),
- 257 StartedById = table.Column<long>(nullable: false),
+ 257 StartedById = table.Column<long>(nullable:
false ),
258 CancelledById = table.Column<long>(nullable: true),
- 259 InstanceId = table.Column<long>(nullable: false),
+ 259 InstanceId = table.Column<long>(nullable:
false ),
260 },
261 constraints: table =>
262 {
@@ -1158,16 +1158,16 @@ Protected Member Functions
286 columns: table => new
287 {
288 CommitterName = table.Column<string >(nullable: false ),
- 289 CommitterEmail = table.Column<string >(nullable: false),
+ 289 CommitterEmail = table.Column<
string >(nullable:
false ),
290 AccessUser = table.Column<string>(nullable: true),
291 AccessToken = table.Column<string>(nullable: true),
- 292 PushTestMergeCommits = table.Column<bool>(nullable: false),
- 293 ShowTestMergeCommitters = table.Column<bool>(nullable: false),
- 294 AutoUpdatesKeepTestMerges = table.Column<bool>(nullable: false),
- 295 AutoUpdatesSynchronize = table.Column<bool>(nullable: false),
- 296 Id = table.Column<long>(nullable: false)
+ 292 PushTestMergeCommits = table.Column<bool>(nullable:
false ),
+ 293 ShowTestMergeCommitters = table.Column<bool>(nullable:
false ),
+ 294 AutoUpdatesKeepTestMerges = table.Column<bool>(nullable:
false ),
+ 295 AutoUpdatesSynchronize = table.Column<bool>(nullable:
false ),
+ 296 Id = table.Column<long>(nullable:
false )
297 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
- 298 InstanceId = table.Column<long>(nullable: false),
+ 298 InstanceId = table.Column<long>(nullable:
false ),
299 },
300 constraints: table =>
301 {
@@ -1185,10 +1185,10 @@ Protected Member Functions
313 columns: table => new
314 {
315 CommitSha = table.Column<string >(maxLength: 40, nullable: false ),
- 316 OriginCommitSha = table.Column<string >(maxLength: 40, nullable: false),
- 317 Id = table.Column<long>(nullable: false)
+ 316 OriginCommitSha = table.Column<
string >(maxLength: 40, nullable:
false ),
+ 317 Id = table.Column<long>(nullable:
false )
318 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
- 319 InstanceId = table.Column<long>(nullable: false),
+ 319 InstanceId = table.Column<long>(nullable:
false ),
320 },
321 constraints: table =>
322 {
@@ -1211,8 +1211,8 @@ Protected Member Functions
339 Output = table.Column<string >(nullable: true),
340 DirectoryName = table.Column<Guid>(nullable: true),
341 JobId = table.Column<long>(nullable: true),
- 342 RevisionInformationId = table.Column<long>(nullable: false),
- 343 ByondVersion = table.Column<string>(nullable: false),
+ 342 RevisionInformationId = table.Column<long>(nullable:
false ),
+ 343 ByondVersion = table.Column<string>(nullable:
false ),
344 },
345 constraints: table =>
346 {
@@ -1236,16 +1236,16 @@ Protected Member Functions
364 columns: table => new
365 {
366 Number = table.Column<int >(nullable: false ),
- 367 PullRequestRevision = table.Column<string >(nullable: false),
+ 367 PullRequestRevision = table.Column<
string >(nullable:
false ),
368 Comment = table.Column<string>(nullable: true),
- 369 TitleAtMerge = table.Column<string>(nullable: false),
- 370 BodyAtMerge = table.Column<string>(nullable: false),
- 371 Url = table.Column<string>(nullable: false),
- 372 Author = table.Column<string>(nullable: false),
- 373 Id = table.Column<long>(nullable: false)
+ 369 TitleAtMerge = table.Column<string>(nullable:
false ),
+ 370 BodyAtMerge = table.Column<string>(nullable:
false ),
+ 371 Url = table.Column<string>(nullable:
false ),
+ 372 Author = table.Column<string>(nullable:
false ),
+ 373 Id = table.Column<long>(nullable:
false )
374 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
- 375 MergedAt = table.Column<DateTimeOffset>(nullable: false),
- 376 MergedById = table.Column<long>(nullable: false),
+ 375 MergedAt = table.Column<DateTimeOffset>(nullable:
false ),
+ 376 MergedById = table.Column<long>(nullable:
false ),
377 PrimaryRevisionInformationId = table.Column<long>(nullable: true),
378 },
379 constraints: table =>
@@ -1272,7 +1272,7 @@ Protected Member Functions
400 Id = table.Column<
long >(nullable:
false )
401 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
402 TestMergeId = table.Column<long >(nullable: false ),
- 403 RevisionInformationId = table.Column<long >(nullable: false),
+ 403 RevisionInformationId = table.Column<
long >(nullable:
false ),
404 },
405 constraints: table =>
406 {
@@ -1471,6 +1471,7 @@ Protected Member Functions
AdministrationRights
Administration rights for the server.
@ UserId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.User.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
RebootState
Represents the action to take when /world/Reboot() is called.
@ Enabled
The OAuth Gateway is enabled.
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_remove_experimental_watchdog.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_remove_experimental_watchdog.html
index 463c3bc7c9..00e95d63f0 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_remove_experimental_watchdog.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_m_y_remove_experimental_watchdog.html
@@ -946,9 +946,9 @@ Protected Member Functions
63 Id = table.Column<
long >(type:
"bigint" , nullable:
false )
64 .Annotation("MySql:ValueGenerationStrategy" , MySqlValueGenerationStrategy.IdentityColumn),
65 AlphaId = table.Column<long >(type: "bigint" , nullable: true ),
- 66 AlphaIsActive = table.Column<bool >(type: "tinyint(1)" , nullable: false),
+ 66 AlphaIsActive = table.Column<
bool >(type:
"tinyint(1)" , nullable:
false ),
67 BravoId = table.Column<long>(type: "bigint" , nullable: true),
- 68 InstanceId = table.Column<long>(type: "bigint" , nullable: false),
+ 68 InstanceId = table.Column<long>(type:
"bigint" , nullable:
false ),
69 },
70 constraints: table =>
71 {
@@ -990,6 +990,7 @@ Protected Member Functions
107 unique: true);
108 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_o_auth_connections.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_o_auth_connections.html
index b58f2e4be9..94cb111fe2 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_o_auth_connections.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_o_auth_connections.html
@@ -1023,7 +1023,7 @@ Protected Member Functions
22 Id = table.Column<
long >(nullable:
false )
23 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
24 Provider = table.Column<int >(nullable: false ),
- 25 ExternalUserId = table.Column<string >(nullable: false, maxLength: 100),
+ 25 ExternalUserId = table.Column<
string >(nullable:
false , maxLength: 100),
26 UserId = table.Column<long>(nullable: true),
27 },
28 constraints: table =>
@@ -1050,6 +1050,7 @@ Protected Member Functions
49 }
@ UserId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.User.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_user_groups.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_user_groups.html
index 716945673a..c19be8ed49 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_user_groups.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_add_user_groups.html
@@ -1098,14 +1098,14 @@ Protected Member Functions
232 Id = table.Column<
long >(type:
"bigint" , nullable:
false )
233 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
234 ByondRights = table.Column<decimal>(type: "numeric(20,0)" , nullable: false ),
- 235 ChatBotRights = table.Column<decimal>(type: "numeric(20,0)" , nullable: false),
-
- 237 DreamDaemonRights = table.Column<decimal>(type:
"numeric(20,0)" , nullable: false),
- 238 DreamMakerRights = table.Column<decimal>(type:
"numeric(20,0)" , nullable: false),
- 239 InstanceId = table.Column<long>(type: "bigint" , nullable: false),
- 240 InstanceUserRights = table.Column<decimal>(type: "numeric(20,0)" , nullable: false),
- 241 RepositoryRights = table.Column<decimal>(type:
"numeric(20,0)" , nullable: false),
- 242 UserId = table.Column<long>(type:
"bigint" , nullable: false),
+ 235 ChatBotRights = table.Column<decimal>(type:
"numeric(20,0)" , nullable:
false ),
+
+
+
+ 239 InstanceId = table.Column<long>(type:
"bigint" , nullable:
false ),
+ 240 InstanceUserRights = table.Column<decimal>(type:
"numeric(20,0)" , nullable:
false ),
+
+ 242 UserId = table.Column<long>(type:
"bigint" , nullable:
false ),
243 },
244 constraints: table =>
245 {
@@ -1174,6 +1174,7 @@ Protected Member Functions
DreamDaemonRights
Rights for managing DreamDaemon.
@ UserId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.User.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
@@ -1258,7 +1259,7 @@ Protected Member Functions
66 Id = table.Column<
long >(nullable:
false )
67 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
- 69 InstanceManagerRights = table.Column<decimal>(nullable: false),
+ 69 InstanceManagerRights = table.Column<decimal>(nullable:
false ),
70 UserId = table.Column<long>(nullable: true),
71 GroupId = table.Column<long>(nullable: true),
72 },
@@ -1286,14 +1287,14 @@ Protected Member Functions
94 Id = table.Column<
long >(nullable:
false )
95 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
96 PermissionSetId = table.Column<long >(nullable: false ),
- 97 InstancePermissionSetRights = table.Column<decimal>(nullable: false),
- 98 ByondRights = table.Column<decimal>(nullable: false),
-
-
-
-
-
- 104 InstanceId = table.Column<long>(nullable: false),
+ 97 InstancePermissionSetRights = table.Column<decimal>(nullable:
false ),
+ 98 ByondRights = table.Column<decimal>(nullable:
false ),
+
+
+
+
+
+ 104 InstanceId = table.Column<long>(nullable:
false ),
105 },
106 constraints: table =>
107 {
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_create.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_create.html
index 45774f0183..07b8526fbc 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_create.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_create.html
@@ -1062,11 +1062,11 @@ Protected Member Functions
22 Id = table.Column<
long >(nullable:
false )
23 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
24 Name = table.Column<string >(maxLength: 10000, nullable: false ),
- 25 Path = table.Column<string >(nullable: false),
- 26 Online = table.Column<bool>(nullable: false),
-
- 28 AutoUpdateInterval = table.Column<long>(nullable: false),
- 29 ChatBotLimit = table.Column<int>(nullable: false),
+ 25 Path = table.Column<
string >(nullable:
false ),
+
+
+ 28 AutoUpdateInterval = table.Column<long>(nullable:
false ),
+ 29 ChatBotLimit = table.Column<int>(nullable:
false ),
30 },
31 constraints: table =>
32 {
@@ -1080,14 +1080,14 @@ Protected Member Functions
40 Id = table.Column<
long >(nullable:
false )
41 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
42 Enabled = table.Column<
bool >(nullable:
false ),
- 43 CreatedAt = table.Column<DateTimeOffset>(nullable: false),
+ 43 CreatedAt = table.Column<DateTimeOffset>(nullable:
false ),
44 SystemIdentifier = table.Column<string>(nullable: true),
- 45 Name = table.Column<string>(maxLength: 10000, nullable: false),
-
-
+ 45 Name = table.Column<string>(maxLength: 10000, nullable:
false ),
+
+
48 PasswordHash = table.Column<string>(nullable: true),
49 CreatedById = table.Column<long>(nullable: true),
- 50 CanonicalName = table.Column<string>(nullable: false),
+ 50 CanonicalName = table.Column<string>(nullable:
false ),
51 LastPasswordUpdate = table.Column<DateTimeOffset>(nullable: true),
52 },
53 constraints: table =>
@@ -1109,11 +1109,11 @@ Protected Member Functions
69 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
70 Name = table.Column<string >(maxLength: 100, nullable: false ),
71 Enabled = table.Column<
bool >(nullable: true),
- 72 ReconnectionInterval = table.Column<long>(nullable: false),
- 73 ChannelLimit = table.Column<int>(nullable: false),
- 74 Provider = table.Column<int>(nullable: false),
- 75 ConnectionString = table.Column<string>(maxLength: 10000, nullable: false),
- 76 InstanceId = table.Column<long>(nullable: false),
+ 72 ReconnectionInterval = table.Column<long>(nullable:
false ),
+ 73 ChannelLimit = table.Column<int>(nullable:
false ),
+ 74 Provider = table.Column<int>(nullable:
false ),
+ 75 ConnectionString = table.Column<string>(maxLength: 10000, nullable:
false ),
+ 76 InstanceId = table.Column<long>(nullable:
false ),
77 },
78 constraints: table =>
79 {
@@ -1133,13 +1133,13 @@ Protected Member Functions
93 Id = table.Column<
long >(nullable:
false )
94 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
95 AllowWebClient = table.Column<bool >(nullable: false ),
- 96 SecurityLevel = table.Column<int >(nullable: false),
- 97 PrimaryPort = table.Column<int>(nullable: false),
- 98 SecondaryPort = table.Column<int>(nullable: false),
- 99 StartupTimeout = table.Column<long>(nullable: false),
- 100 HeartbeatSeconds = table.Column<long>(nullable: false),
- 101 AutoStart = table.Column<bool>(nullable: false),
- 102 InstanceId = table.Column<long>(nullable: false),
+ 96 SecurityLevel = table.Column<
int >(nullable:
false ),
+ 97 PrimaryPort = table.Column<int>(nullable:
false ),
+ 98 SecondaryPort = table.Column<int>(nullable:
false ),
+ 99 StartupTimeout = table.Column<long>(nullable:
false ),
+ 100 HeartbeatSeconds = table.Column<long>(nullable:
false ),
+ 101 AutoStart = table.Column<bool>(nullable:
false ),
+ 102 InstanceId = table.Column<long>(nullable:
false ),
103 },
104 constraints: table =>
105 {
@@ -1159,9 +1159,9 @@ Protected Member Functions
119 Id = table.Column<
long >(nullable:
false )
120 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
121 ProjectName = table.Column<string >(maxLength: 10000, nullable: true ),
- 122 ApiValidationPort = table.Column<int >(nullable: false),
- 123 ApiValidationSecurityLevel = table.Column<int>(nullable: false),
- 124 InstanceId = table.Column<long>(nullable: false),
+ 122 ApiValidationPort = table.Column<
int >(nullable:
false ),
+ 123 ApiValidationSecurityLevel = table.Column<int>(nullable:
false ),
+ 124 InstanceId = table.Column<long>(nullable:
false ),
125 },
126 constraints: table =>
127 {
@@ -1181,15 +1181,15 @@ Protected Member Functions
141 Id = table.Column<
long >(nullable:
false )
142 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
143 CommitterName = table.Column<string >(maxLength: 10000, nullable: false ),
- 144 CommitterEmail = table.Column<string >(maxLength: 10000, nullable: false),
+ 144 CommitterEmail = table.Column<
string >(maxLength: 10000, nullable:
false ),
145 AccessUser = table.Column<string>(maxLength: 10000, nullable: true),
146 AccessToken = table.Column<string>(maxLength: 10000, nullable: true),
- 147 PushTestMergeCommits = table.Column<bool>(nullable: false),
- 148 ShowTestMergeCommitters = table.Column<bool>(nullable: false),
- 149 AutoUpdatesKeepTestMerges = table.Column<bool>(nullable: false),
- 150 AutoUpdatesSynchronize = table.Column<bool>(nullable: false),
- 151 PostTestMergeComment = table.Column<bool>(nullable: false),
- 152 InstanceId = table.Column<long>(nullable: false),
+ 147 PushTestMergeCommits = table.Column<bool>(nullable:
false ),
+ 148 ShowTestMergeCommitters = table.Column<bool>(nullable:
false ),
+ 149 AutoUpdatesKeepTestMerges = table.Column<bool>(nullable:
false ),
+ 150 AutoUpdatesSynchronize = table.Column<bool>(nullable:
false ),
+ 151 PostTestMergeComment = table.Column<bool>(nullable:
false ),
+ 152 InstanceId = table.Column<long>(nullable:
false ),
153 },
154 constraints: table =>
155 {
@@ -1209,8 +1209,8 @@ Protected Member Functions
169 Id = table.Column<
long >(nullable:
false )
170 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
171 CommitSha = table.Column<string >(maxLength: 40, nullable: false ),
- 172 OriginCommitSha = table.Column<string >(maxLength: 40, nullable: false),
- 173 InstanceId = table.Column<long>(nullable: false),
+ 172 OriginCommitSha = table.Column<
string >(maxLength: 40, nullable:
false ),
+ 173 InstanceId = table.Column<long>(nullable:
false ),
174 },
175 constraints: table =>
176 {
@@ -1230,14 +1230,14 @@ Protected Member Functions
190 Id = table.Column<
long >(nullable:
false )
191 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
192 UserId = table.Column<
long >(nullable:
false ),
- 193 InstanceUserRights = table.Column<decimal>(nullable: false),
- 194 ByondRights = table.Column<decimal>(nullable: false),
-
-
-
-
-
- 200 InstanceId = table.Column<long>(nullable: false),
+ 193 InstanceUserRights = table.Column<decimal>(nullable:
false ),
+ 194 ByondRights = table.Column<decimal>(nullable:
false ),
+
+
+
+
+
+ 200 InstanceId = table.Column<long>(nullable:
false ),
201 },
202 constraints: table =>
203 {
@@ -1265,14 +1265,14 @@ Protected Member Functions
225 Description = table.Column<string >(nullable: false ),
226 ErrorCode = table.Column<long >(nullable: true),
227 ExceptionDetails = table.Column<string>(nullable: true),
- 228 StartedAt = table.Column<DateTimeOffset>(nullable: false),
+ 228 StartedAt = table.Column<DateTimeOffset>(nullable:
false ),
229 StoppedAt = table.Column<DateTimeOffset>(nullable: true),
- 230 Cancelled = table.Column<bool>(nullable: false),
+ 230 Cancelled = table.Column<bool>(nullable:
false ),
231 CancelRightsType = table.Column<decimal>(nullable: true),
232 CancelRight = table.Column<decimal>(nullable: true),
- 233 StartedById = table.Column<long>(nullable: false),
+ 233 StartedById = table.Column<long>(nullable:
false ),
234 CancelledById = table.Column<long>(nullable: true),
- 235 InstanceId = table.Column<long>(nullable: false),
+ 235 InstanceId = table.Column<long>(nullable:
false ),
236 },
237 constraints: table =>
238 {
@@ -1305,11 +1305,11 @@ Protected Member Functions
265 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
266 IrcChannel = table.Column<string >(maxLength: 100, nullable: true ),
267 DiscordChannelId = table.Column<decimal>(nullable: true),
- 268 IsAdminChannel = table.Column<bool>(nullable: false),
- 269 IsWatchdogChannel = table.Column<bool>(nullable: false),
- 270 IsUpdatesChannel = table.Column<bool>(nullable: false),
+ 268 IsAdminChannel = table.Column<bool>(nullable:
false ),
+ 269 IsWatchdogChannel = table.Column<bool>(nullable:
false ),
+ 270 IsUpdatesChannel = table.Column<bool>(nullable:
false ),
271 Tag = table.Column<string>(maxLength: 10000, nullable: true),
- 272 ChatSettingsId = table.Column<long>(nullable: false),
+ 272 ChatSettingsId = table.Column<long>(nullable:
false ),
273 },
274 constraints: table =>
275 {
@@ -1329,15 +1329,15 @@ Protected Member Functions
289 Id = table.Column<
long >(nullable:
false )
290 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
291 Number = table.Column<int >(nullable: false ),
- 292 PullRequestRevision = table.Column<string >(maxLength: 40, nullable: false),
+ 292 PullRequestRevision = table.Column<
string >(maxLength: 40, nullable:
false ),
293 Comment = table.Column<string>(maxLength: 10000, nullable: true),
- 294 TitleAtMerge = table.Column<string>(nullable: false),
- 295 BodyAtMerge = table.Column<string>(nullable: false),
- 296 Url = table.Column<string>(nullable: false),
- 297 Author = table.Column<string>(nullable: false),
- 298 MergedAt = table.Column<DateTimeOffset>(nullable: false),
- 299 MergedById = table.Column<long>(nullable: false),
- 300 PrimaryRevisionInformationId = table.Column<long>(nullable: false),
+ 294 TitleAtMerge = table.Column<string>(nullable:
false ),
+ 295 BodyAtMerge = table.Column<string>(nullable:
false ),
+ 296 Url = table.Column<string>(nullable:
false ),
+ 297 Author = table.Column<string>(nullable:
false ),
+ 298 MergedAt = table.Column<DateTimeOffset>(nullable:
false ),
+ 299 MergedById = table.Column<long>(nullable:
false ),
+ 300 PrimaryRevisionInformationId = table.Column<long>(nullable:
false ),
301 },
302 constraints: table =>
303 {
@@ -1363,12 +1363,12 @@ Protected Member Functions
323 Id = table.Column<
long >(nullable:
false )
324 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
325 DmeName = table.Column<string >(nullable: false ),
- 326 Output = table.Column<string >(nullable: false),
- 327 DirectoryName = table.Column<Guid>(nullable: false),
- 328 MinimumSecurityLevel = table.Column<int>(nullable: false),
- 329 JobId = table.Column<long>(nullable: false),
- 330 RevisionInformationId = table.Column<long>(nullable: false),
- 331 ByondVersion = table.Column<string>(nullable: false),
+ 326 Output = table.Column<
string >(nullable:
false ),
+ 327 DirectoryName = table.Column<Guid>(nullable:
false ),
+ 328 MinimumSecurityLevel = table.Column<int>(nullable:
false ),
+ 329 JobId = table.Column<long>(nullable:
false ),
+ 330 RevisionInformationId = table.Column<long>(nullable:
false ),
+ 331 ByondVersion = table.Column<string>(nullable:
false ),
332 DMApiMajorVersion = table.Column<int>(nullable: true),
333 DMApiMinorVersion = table.Column<int>(nullable: true),
334 DMApiPatchVersion = table.Column<int>(nullable: true),
@@ -1397,7 +1397,7 @@ Protected Member Functions
357 Id = table.Column<
long >(nullable:
false )
358 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
359 TestMergeId = table.Column<long >(nullable: false ),
- 360 RevisionInformationId = table.Column<long >(nullable: false),
+ 360 RevisionInformationId = table.Column<
long >(nullable:
false ),
361 },
362 constraints: table =>
363 {
@@ -1422,12 +1422,12 @@ Protected Member Functions
382 Id = table.Column<
long >(nullable:
false )
383 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
384 AccessIdentifier = table.Column<string >(nullable: false ),
- 385 ProcessId = table.Column<int >(nullable: false),
- 386 IsPrimary = table.Column<bool>(nullable: false),
- 387 Port = table.Column<int>(nullable: false),
-
- 389 LaunchSecurityLevel = table.Column<int>(nullable: false),
- 390 CompileJobId = table.Column<long>(nullable: false),
+ 385 ProcessId = table.Column<
int >(nullable:
false ),
+ 386 IsPrimary = table.Column<bool>(nullable:
false ),
+ 387 Port = table.Column<int>(nullable:
false ),
+
+ 389 LaunchSecurityLevel = table.Column<int>(nullable:
false ),
+ 390 CompileJobId = table.Column<long>(nullable:
false ),
391 },
392 constraints: table =>
393 {
@@ -1447,7 +1447,7 @@ Protected Member Functions
407 Id = table.Column<
long >(nullable:
false )
408 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
409 AlphaIsActive = table.Column<bool >(nullable: false ),
- 410 InstanceId = table.Column<long >(nullable: false),
+ 410 InstanceId = table.Column<
long >(nullable:
false ),
411 AlphaId = table.Column<long>(nullable: true),
412 BravoId = table.Column<long>(nullable: true),
413 },
@@ -1634,6 +1634,7 @@ Protected Member Functions
AdministrationRights
Administration rights for the server.
@ UserId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.User.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
RebootState
Represents the action to take when /world/Reboot() is called.
@ Enabled
The OAuth Gateway is enabled.
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_remove_experimental_watchdog.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_remove_experimental_watchdog.html
index e600776316..b59c9c4ffb 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_remove_experimental_watchdog.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_p_g_remove_experimental_watchdog.html
@@ -952,9 +952,9 @@ Protected Member Functions
63 Id = table.Column<
long >(type:
"bigint" , nullable:
false )
64 .Annotation("Npgsql:ValueGenerationStrategy" , NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
65 AlphaId = table.Column<long >(type: "bigint" , nullable: true ),
- 66 AlphaIsActive = table.Column<bool >(type: "boolean" , nullable: false),
+ 66 AlphaIsActive = table.Column<
bool >(type:
"boolean" , nullable:
false ),
67 BravoId = table.Column<long>(type: "bigint" , nullable: true),
- 68 InstanceId = table.Column<long>(type: "bigint" , nullable: false),
+ 68 InstanceId = table.Column<long>(type:
"bigint" , nullable:
false ),
69 },
70 constraints: table =>
71 {
@@ -996,6 +996,7 @@ Protected Member Functions
107 unique: true);
108 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_additional_d_d_parameters.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_additional_d_d_parameters.html
index cceee0536e..a8de8c180c 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_additional_d_d_parameters.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_additional_d_d_parameters.html
@@ -948,13 +948,13 @@ Protected Member Functions
38 Id = table.Column<
long >(nullable:
false )
39 .Annotation("Sqlite:Autoincrement" , true ),
40 AllowWebClient = table.Column<bool >(nullable: false ),
- 41 SecurityLevel = table.Column<int >(nullable: false),
- 42 Port = table.Column<ushort>(nullable: false),
- 43 StartupTimeout = table.Column<uint>(nullable: false),
- 44 HeartbeatSeconds = table.Column<uint>(nullable: false),
- 45 AutoStart = table.Column<bool>(nullable: false),
- 46 InstanceId = table.Column<long>(nullable: false),
- 47 TopicRequestTimeout = table.Column<uint>(nullable: false),
+ 41 SecurityLevel = table.Column<
int >(nullable:
false ),
+ 42 Port = table.Column<ushort>(nullable:
false ),
+ 43 StartupTimeout = table.Column<uint>(nullable:
false ),
+ 44 HeartbeatSeconds = table.Column<uint>(nullable:
false ),
+ 45 AutoStart = table.Column<bool>(nullable:
false ),
+ 46 InstanceId = table.Column<long>(nullable:
false ),
+ 47 TopicRequestTimeout = table.Column<uint>(nullable:
false ),
48 },
49 constraints: table =>
50 {
@@ -974,6 +974,7 @@ Protected Member Functions
64 name: "DreamDaemonSettings_down" );
65 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_deployment_columns.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_deployment_columns.html
index 75646b8a9e..a676459e8c 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_deployment_columns.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_deployment_columns.html
@@ -943,15 +943,15 @@ Protected Member Functions
47 Id = table.Column<
long >(nullable:
false )
48 .Annotation("Sqlite:Autoincrement" , true ),
49 CommitterName = table.Column<string >(maxLength: 10000, nullable: false ),
- 50 CommitterEmail = table.Column<string >(maxLength: 10000, nullable: false),
+ 50 CommitterEmail = table.Column<
string >(maxLength: 10000, nullable:
false ),
51 AccessUser = table.Column<string>(maxLength: 10000, nullable: true),
52 AccessToken = table.Column<string>(maxLength: 10000, nullable: true),
- 53 PushTestMergeCommits = table.Column<bool>(nullable: false),
- 54 ShowTestMergeCommitters = table.Column<bool>(nullable: false),
- 55 AutoUpdatesKeepTestMerges = table.Column<bool>(nullable: false),
- 56 AutoUpdatesSynchronize = table.Column<bool>(nullable: false),
- 57 PostTestMergeComment = table.Column<bool>(nullable: false),
- 58 InstanceId = table.Column<long>(nullable: false),
+ 53 PushTestMergeCommits = table.Column<bool>(nullable:
false ),
+ 54 ShowTestMergeCommitters = table.Column<bool>(nullable:
false ),
+ 55 AutoUpdatesKeepTestMerges = table.Column<bool>(nullable:
false ),
+ 56 AutoUpdatesSynchronize = table.Column<bool>(nullable:
false ),
+ 57 PostTestMergeComment = table.Column<bool>(nullable:
false ),
+ 58 InstanceId = table.Column<long>(nullable:
false ),
59 },
60 constraints: table =>
61 {
@@ -981,12 +981,12 @@ Protected Member Functions
85 Id = table.Column<
long >(nullable:
false )
86 .Annotation("Sqlite:Autoincrement" , true ),
87 DmeName = table.Column<string >(nullable: false ),
- 88 Output = table.Column<string >(nullable: false),
- 89 DirectoryName = table.Column<Guid>(nullable: false),
+ 88 Output = table.Column<
string >(nullable:
false ),
+ 89 DirectoryName = table.Column<Guid>(nullable:
false ),
90 MinimumSecurityLevel = table.Column<int>(nullable: true),
- 91 JobId = table.Column<long>(nullable: false),
- 92 RevisionInformationId = table.Column<long>(nullable: false),
- 93 ByondVersion = table.Column<string>(nullable: false),
+ 91 JobId = table.Column<long>(nullable:
false ),
+ 92 RevisionInformationId = table.Column<long>(nullable:
false ),
+ 93 ByondVersion = table.Column<string>(nullable:
false ),
94 DMApiMajorVersion = table.Column<int>(nullable: true),
95 DMApiMinorVersion = table.Column<int>(nullable: true),
96 DMApiPatchVersion = table.Column<int>(nullable: true),
@@ -1014,6 +1014,7 @@ Protected Member Functions
118 name: "CompileJobs_down" );
119 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_deployment_timeout.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_deployment_timeout.html
index 029593cbd0..c1c75185a4 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_deployment_timeout.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_deployment_timeout.html
@@ -1068,10 +1068,10 @@ Protected Member Functions
37 Id = table.Column<
long >(nullable:
false )
38 .Annotation("Sqlite:Autoincrement" , true ),
39 ProjectName = table.Column<string >(maxLength: 10000, nullable: true ),
- 40 ApiValidationPort = table.Column<ushort>(nullable: false),
- 41 ApiValidationSecurityLevel = table.Column<int>(nullable: false),
- 42 InstanceId = table.Column<long>(nullable: false),
- 43 RequireDMApiValidation = table.Column<bool>(nullable: false),
+ 40 ApiValidationPort = table.Column<ushort>(nullable:
false ),
+ 41 ApiValidationSecurityLevel = table.Column<int>(nullable:
false ),
+ 42 InstanceId = table.Column<long>(nullable:
false ),
+ 43 RequireDMApiValidation = table.Column<bool>(nullable:
false ),
44 },
45 constraints: table =>
46 {
@@ -1099,6 +1099,7 @@ Protected Member Functions
68 newName: "DreamMakerSettings" );
69 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dream_daemon_visibility.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dream_daemon_visibility.html
index d71ecc6db6..8babe241d3 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dream_daemon_visibility.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dream_daemon_visibility.html
@@ -1064,11 +1064,11 @@ Protected Member Functions
43 Id = table.Column<
long >(nullable:
false )
44 .Annotation("Sqlite:Autoincrement" , true ),
45 AccessIdentifier = table.Column<string >(nullable: false ),
- 46 ProcessId = table.Column<int >(nullable: false),
- 47 Port = table.Column<ushort>(nullable: false),
-
- 49 LaunchSecurityLevel = table.Column<int>(nullable: false),
- 50 CompileJobId = table.Column<long>(nullable: false),
+ 46 ProcessId = table.Column<
int >(nullable:
false ),
+ 47 Port = table.Column<ushort>(nullable:
false ),
+
+ 49 LaunchSecurityLevel = table.Column<int>(nullable:
false ),
+ 50 CompileJobId = table.Column<long>(nullable:
false ),
51 },
52 constraints: table =>
53 {
@@ -1106,14 +1106,14 @@ Protected Member Functions
85 Id = table.Column<
long >(nullable:
false )
86 .Annotation("Sqlite:Autoincrement" , true ),
87 AllowWebClient = table.Column<bool >(nullable: false ),
- 88 SecurityLevel = table.Column<int >(nullable: false),
- 89 Port = table.Column<ushort>(nullable: false),
- 90 StartupTimeout = table.Column<uint>(nullable: false),
- 91 HeartbeatSeconds = table.Column<uint>(nullable: false),
- 92 AutoStart = table.Column<bool>(nullable: false),
- 93 InstanceId = table.Column<long>(nullable: false),
- 94 TopicRequestTimeout = table.Column<uint>(nullable: false),
- 95 AdditionalParameters = table.Column<string>(maxLength: 10000, nullable: false),
+ 88 SecurityLevel = table.Column<
int >(nullable:
false ),
+ 89 Port = table.Column<ushort>(nullable:
false ),
+ 90 StartupTimeout = table.Column<uint>(nullable:
false ),
+ 91 HeartbeatSeconds = table.Column<uint>(nullable:
false ),
+ 92 AutoStart = table.Column<bool>(nullable:
false ),
+ 93 InstanceId = table.Column<long>(nullable:
false ),
+ 94 TopicRequestTimeout = table.Column<uint>(nullable:
false ),
+ 95 AdditionalParameters = table.Column<string>(maxLength: 10000, nullable:
false ),
96 },
97 constraints: table =>
98 {
@@ -1141,6 +1141,7 @@ Protected Member Functions
120 newName: "DreamDaemonSettings" );
121 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
RebootState
Represents the action to take when /world/Reboot() is called.
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dump_on_heartbeat_restart.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dump_on_heartbeat_restart.html
index de20c367cb..b60d246470 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dump_on_heartbeat_restart.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_dump_on_heartbeat_restart.html
@@ -1076,15 +1076,15 @@ Protected Member Functions
37 Id = table.Column<
long >(nullable:
false )
38 .Annotation("Sqlite:Autoincrement" , true ),
39 AllowWebClient = table.Column<bool >(nullable: false ),
- 40 SecurityLevel = table.Column<int >(nullable: false),
- 41 Port = table.Column<ushort>(nullable: false),
- 42 StartupTimeout = table.Column<uint>(nullable: false),
- 43 HeartbeatSeconds = table.Column<uint>(nullable: false),
- 44 AutoStart = table.Column<bool>(nullable: false),
- 45 InstanceId = table.Column<long>(nullable: false),
- 46 TopicRequestTimeout = table.Column<uint>(nullable: false),
- 47 AdditionalParameters = table.Column<string>(maxLength: 10000, nullable: false),
- 48 Visibility = table.Column<bool>(nullable: false),
+ 40 SecurityLevel = table.Column<
int >(nullable:
false ),
+ 41 Port = table.Column<ushort>(nullable:
false ),
+ 42 StartupTimeout = table.Column<uint>(nullable:
false ),
+ 43 HeartbeatSeconds = table.Column<uint>(nullable:
false ),
+ 44 AutoStart = table.Column<bool>(nullable:
false ),
+ 45 InstanceId = table.Column<long>(nullable:
false ),
+ 46 TopicRequestTimeout = table.Column<uint>(nullable:
false ),
+ 47 AdditionalParameters = table.Column<string>(maxLength: 10000, nullable:
false ),
+ 48 Visibility = table.Column<bool>(nullable:
false ),
49 },
50 constraints: table =>
51 {
@@ -1112,6 +1112,7 @@ Protected Member Functions
73 newName: "DreamDaemonSettings" );
74 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_heartbeat.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_heartbeat.html
index 672a12d5df..5328da0663 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_heartbeat.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_heartbeat.html
@@ -994,16 +994,16 @@ Protected Member Functions
37 Id = table.Column<
long >(nullable:
false )
38 .Annotation("Sqlite:Autoincrement" , true ),
39 AllowWebClient = table.Column<bool >(nullable: false ),
- 40 SecurityLevel = table.Column<int >(nullable: false),
- 41 PrimaryPort = table.Column<ushort>(nullable: false),
- 42 SecondaryPort = table.Column<ushort>(nullable: false),
- 43 StartupTimeout = table.Column<uint>(nullable: false),
- 44 AutoStart = table.Column<bool>(nullable: false),
-
-
+ 40 SecurityLevel = table.Column<
int >(nullable:
false ),
+ 41 PrimaryPort = table.Column<ushort>(nullable:
false ),
+ 42 SecondaryPort = table.Column<ushort>(nullable:
false ),
+ 43 StartupTimeout = table.Column<uint>(nullable:
false ),
+ 44 AutoStart = table.Column<bool>(nullable:
false ),
+
+
47 ProcessId = table.Column<int>(nullable: true),
48 AccessToken = table.Column<string>(nullable: true),
- 49 InstanceId = table.Column<long>(nullable: false),
+ 49 InstanceId = table.Column<long>(nullable:
false ),
50 },
51 constraints: table =>
52 {
@@ -1025,6 +1025,7 @@ Protected Member Functions
@ SoftRestart
User can change Models.Internal.DreamDaemonApiBase.SoftRestart.
@ SoftShutdown
User can change Models.Internal.DreamDaemonApiBase.SoftShutdown.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_o_auth_connections.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_o_auth_connections.html
index 8e6cd679ff..054b589a5d 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_o_auth_connections.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_o_auth_connections.html
@@ -1015,7 +1015,7 @@ Protected Member Functions
21 Id = table.Column<
long >(nullable:
false )
22 .Annotation("Sqlite:Autoincrement" , true ),
23 Provider = table.Column<int >(nullable: false ),
- 24 ExternalUserId = table.Column<string >(nullable: false, maxLength: 100),
+ 24 ExternalUserId = table.Column<
string >(nullable:
false , maxLength: 100),
25 UserId = table.Column<long>(nullable: true),
26 },
27 constraints: table =>
@@ -1042,6 +1042,7 @@ Protected Member Functions
48 }
@ UserId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.User.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_profiler.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_profiler.html
index 4a5fd242c4..88d222773c 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_profiler.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_profiler.html
@@ -1080,16 +1080,16 @@ Protected Member Functions
37 Id = table.Column<
long >(nullable:
false )
38 .Annotation("Sqlite:Autoincrement" , true ),
39 AllowWebClient = table.Column<bool >(nullable: false ),
- 40 SecurityLevel = table.Column<int >(nullable: false),
- 41 Port = table.Column<ushort>(nullable: false),
- 42 StartupTimeout = table.Column<uint>(nullable: false),
- 43 HeartbeatSeconds = table.Column<uint>(nullable: false),
- 44 AutoStart = table.Column<bool>(nullable: false),
- 45 InstanceId = table.Column<long>(nullable: false),
- 46 TopicRequestTimeout = table.Column<uint>(nullable: false),
- 47 AdditionalParameters = table.Column<string>(maxLength: 10000, nullable: false),
- 48 Visibility = table.Column<bool>(nullable: false),
- 49 DumpOnHeartbeatRestart = table.Column<bool>(nullable: false),
+ 40 SecurityLevel = table.Column<
int >(nullable:
false ),
+ 41 Port = table.Column<ushort>(nullable:
false ),
+ 42 StartupTimeout = table.Column<uint>(nullable:
false ),
+ 43 HeartbeatSeconds = table.Column<uint>(nullable:
false ),
+ 44 AutoStart = table.Column<bool>(nullable:
false ),
+ 45 InstanceId = table.Column<long>(nullable:
false ),
+ 46 TopicRequestTimeout = table.Column<uint>(nullable:
false ),
+ 47 AdditionalParameters = table.Column<string>(maxLength: 10000, nullable:
false ),
+ 48 Visibility = table.Column<bool>(nullable:
false ),
+ 49 DumpOnHeartbeatRestart = table.Column<bool>(nullable:
false ),
50 },
51 constraints: table =>
52 {
@@ -1117,6 +1117,7 @@ Protected Member Functions
74 newName: "DreamDaemonSettings" );
75 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_rev_info_timestamp.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_rev_info_timestamp.html
index ff9d498602..8fa6a92309 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_rev_info_timestamp.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_rev_info_timestamp.html
@@ -1058,8 +1058,8 @@ Protected Member Functions
37 Id = table.Column<
long >(nullable:
false )
38 .Annotation("Sqlite:Autoincrement" , true ),
39 CommitSha = table.Column<string >(maxLength: 40, nullable: false ),
- 40 OriginCommitSha = table.Column<string >(maxLength: 40, nullable: false),
- 41 InstanceId = table.Column<long>(nullable: false),
+ 40 OriginCommitSha = table.Column<
string >(maxLength: 40, nullable:
false ),
+ 41 InstanceId = table.Column<long>(nullable:
false ),
42 },
43 constraints: table =>
44 {
@@ -1086,6 +1086,7 @@ Protected Member Functions
65 newName: "RevisionInformations" );
66 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_swarm_identifer.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_swarm_identifer.html
index 352be4635d..5a2b620675 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_swarm_identifer.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_swarm_identifer.html
@@ -1055,11 +1055,11 @@ Protected Member Functions
46 Id = table.Column<
long >(nullable:
false )
47 .Annotation("Sqlite:Autoincrement" , true ),
48 Name = table.Column<string >(maxLength: 10000, nullable: false ),
- 49 Path = table.Column<string >(nullable: false),
- 50 Online = table.Column<bool>(nullable: false),
-
- 52 AutoUpdateInterval = table.Column<uint>(nullable: false),
- 53 ChatBotLimit = table.Column<ushort>(nullable: false),
+ 49 Path = table.Column<
string >(nullable:
false ),
+
+
+ 52 AutoUpdateInterval = table.Column<uint>(nullable:
false ),
+ 53 ChatBotLimit = table.Column<ushort>(nullable:
false ),
54 },
55 constraints: table =>
56 {
@@ -1082,6 +1082,7 @@ Protected Member Functions
ConfigurationType
The type of configuration allowed on an Instance.
@ Online
The watchdog is online and DreamDaemon is running.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_update_submodules.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_update_submodules.html
index 577788c1f3..70f900f258 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_update_submodules.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_update_submodules.html
@@ -1072,16 +1072,16 @@ Protected Member Functions
37 Id = table.Column<
long >(nullable:
false )
38 .Annotation("Sqlite:Autoincrement" , true ),
39 CommitterName = table.Column<string >(maxLength: 10000, nullable: false ),
- 40 CommitterEmail = table.Column<string >(maxLength: 10000, nullable: false),
+ 40 CommitterEmail = table.Column<
string >(maxLength: 10000, nullable:
false ),
41 AccessUser = table.Column<string>(maxLength: 10000, nullable: true),
42 AccessToken = table.Column<string>(maxLength: 10000, nullable: true),
- 43 PushTestMergeCommits = table.Column<bool>(nullable: false),
- 44 ShowTestMergeCommitters = table.Column<bool>(nullable: false),
- 45 AutoUpdatesKeepTestMerges = table.Column<bool>(nullable: false),
- 46 AutoUpdatesSynchronize = table.Column<bool>(nullable: false),
- 47 PostTestMergeComment = table.Column<bool>(nullable: false),
- 48 InstanceId = table.Column<long>(nullable: false),
- 49 CreateGitHubDeployments = table.Column<bool>(nullable: false),
+ 43 PushTestMergeCommits = table.Column<bool>(nullable:
false ),
+ 44 ShowTestMergeCommitters = table.Column<bool>(nullable:
false ),
+ 45 AutoUpdatesKeepTestMerges = table.Column<bool>(nullable:
false ),
+ 46 AutoUpdatesSynchronize = table.Column<bool>(nullable:
false ),
+ 47 PostTestMergeComment = table.Column<bool>(nullable:
false ),
+ 48 InstanceId = table.Column<long>(nullable:
false ),
+ 49 CreateGitHubDeployments = table.Column<bool>(nullable:
false ),
50 },
51 constraints: table =>
52 {
@@ -1109,6 +1109,7 @@ Protected Member Functions
74 newName: "RepositorySettings" );
75 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_user_groups.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_user_groups.html
index ad70296290..702fb558c7 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_user_groups.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_add_user_groups.html
@@ -1048,14 +1048,14 @@ Protected Member Functions
201 Id = table.Column<
long >(type:
"INTEGER" , nullable:
false )
202 .Annotation("Sqlite:Autoincrement" , true ),
203 ByondRights = table.Column<ulong>(type: "INTEGER" , nullable: false ),
- 204 ChatBotRights = table.Column<ulong>(type: "INTEGER" , nullable: false),
-
-
-
- 208 InstanceId = table.Column<long>(type: "INTEGER" , nullable: false),
- 209 InstanceUserRights = table.Column<ulong>(type: "INTEGER" , nullable: false),
-
- 211 UserId = table.Column<long>(type:
"INTEGER" , nullable: false),
+ 204 ChatBotRights = table.Column<ulong>(type:
"INTEGER" , nullable:
false ),
+
+
+
+ 208 InstanceId = table.Column<long>(type:
"INTEGER" , nullable:
false ),
+ 209 InstanceUserRights = table.Column<ulong>(type:
"INTEGER" , nullable:
false ),
+
+ 211 UserId = table.Column<long>(type:
"INTEGER" , nullable:
false ),
212 },
213 constraints: table =>
214 {
@@ -1096,14 +1096,14 @@ Protected Member Functions
249 Id = table.Column<
long >(nullable:
false )
250 .Annotation("Sqlite:Autoincrement" , true ),
251 Enabled = table.Column<
bool >(nullable:
false ),
- 252 CreatedAt = table.Column<DateTimeOffset>(nullable: false),
+ 252 CreatedAt = table.Column<DateTimeOffset>(nullable:
false ),
253 SystemIdentifier = table.Column<string>(nullable: true),
- 254 Name = table.Column<string>(maxLength: 100, nullable: false),
-
-
+ 254 Name = table.Column<string>(maxLength: 100, nullable:
false ),
+
+
257 PasswordHash = table.Column<string>(nullable: true),
258 CreatedById = table.Column<long>(nullable: true),
- 259 CanonicalName = table.Column<string>(maxLength: 100, nullable: false),
+ 259 CanonicalName = table.Column<string>(maxLength: 100, nullable:
false ),
260 LastPasswordUpdate = table.Column<DateTimeOffset>(nullable: true),
261 GroupId = table.Column<long>(nullable: true),
262 },
@@ -1159,6 +1159,7 @@ Protected Member Functions
@ GroupId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.Group.
@ UserId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.User.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
@ Enabled
The OAuth Gateway is enabled.
References Tgstation.Server.Host.Enabled .
@@ -1220,7 +1221,7 @@ Protected Member Functions
39 Id = table.Column<
long >(nullable:
false )
40 .Annotation("Sqlite:Autoincrement" , true ),
- 42 InstanceManagerRights = table.Column<ulong>(nullable: false),
+ 42 InstanceManagerRights = table.Column<ulong>(nullable:
false ),
43 UserId = table.Column<long>(nullable: true),
44 GroupId = table.Column<long>(nullable: true),
45 },
@@ -1248,14 +1249,14 @@ Protected Member Functions
67 Id = table.Column<
long >(nullable:
false )
68 .Annotation("Sqlite:Autoincrement" , true ),
69 PermissionSetId = table.Column<long >(nullable: false ),
- 70 InstancePermissionSetRights = table.Column<ulong>(nullable: false),
- 71 ByondRights = table.Column<ulong>(nullable: false),
-
-
-
-
-
- 77 InstanceId = table.Column<long>(nullable: false),
+ 70 InstancePermissionSetRights = table.Column<ulong>(nullable:
false ),
+ 71 ByondRights = table.Column<ulong>(nullable:
false ),
+
+
+
+
+
+ 77 InstanceId = table.Column<long>(nullable:
false ),
78 },
79 constraints: table =>
80 {
@@ -1285,13 +1286,13 @@ Protected Member Functions
104 Id = table.Column<
long >(nullable:
false )
105 .Annotation("Sqlite:Autoincrement" , true ),
106 Enabled = table.Column<
bool >(nullable:
false ),
- 107 CreatedAt = table.Column<DateTimeOffset>(nullable: false),
+ 107 CreatedAt = table.Column<DateTimeOffset>(nullable:
false ),
108 SystemIdentifier = table.Column<string>(nullable: true),
- 109 Name = table.Column<string>(maxLength: 10000, nullable: false),
+ 109 Name = table.Column<string>(maxLength: 10000, nullable:
false ),
110 PasswordHash = table.Column<string>(nullable: true),
111 CreatedById = table.Column<long>(nullable: true),
112 GroupId = table.Column<long>(nullable: true),
- 113 CanonicalName = table.Column<string>(nullable: false),
+ 113 CanonicalName = table.Column<string>(nullable:
false ),
114 LastPasswordUpdate = table.Column<DateTimeOffset>(nullable: true),
115 },
116 constraints: table =>
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_allow_null_d_m_api.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_allow_null_d_m_api.html
index 28d5e7519f..60e3324a12 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_allow_null_d_m_api.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_allow_null_d_m_api.html
@@ -934,12 +934,12 @@ Protected Member Functions
91 Id = table.Column<
long >(nullable:
false )
92 .Annotation("Sqlite:Autoincrement" , true ),
93 DmeName = table.Column<string >(nullable: false ),
- 94 Output = table.Column<string >(nullable: false),
- 95 DirectoryName = table.Column<Guid>(nullable: false),
-
- 97 JobId = table.Column<long>(nullable: false),
- 98 RevisionInformationId = table.Column<long>(nullable: false),
- 99 ByondVersion = table.Column<string>(nullable: false),
+ 94 Output = table.Column<
string >(nullable:
false ),
+ 95 DirectoryName = table.Column<Guid>(nullable:
false ),
+
+ 97 JobId = table.Column<long>(nullable:
false ),
+ 98 RevisionInformationId = table.Column<long>(nullable:
false ),
+ 99 ByondVersion = table.Column<string>(nullable:
false ),
100 DMApiMajorVersion = table.Column<int>(nullable: true),
101 DMApiMinorVersion = table.Column<int>(nullable: true),
102 DMApiPatchVersion = table.Column<int>(nullable: true),
@@ -985,9 +985,9 @@ Protected Member Functions
142 Id = table.Column<
long >(nullable:
false )
143 .Annotation("Sqlite:Autoincrement" , true ),
144 ProjectName = table.Column<string >(maxLength: 10000, nullable: true ),
- 145 ApiValidationPort = table.Column<ushort>(nullable: false),
- 146 ApiValidationSecurityLevel = table.Column<int>(nullable: false),
- 147 InstanceId = table.Column<long>(nullable: false),
+ 145 ApiValidationPort = table.Column<ushort>(nullable:
false ),
+ 146 ApiValidationSecurityLevel = table.Column<int>(nullable:
false ),
+ 147 InstanceId = table.Column<long>(nullable:
false ),
148 },
149 constraints: table =>
150 {
@@ -1009,6 +1009,7 @@ Protected Member Functions
DreamDaemonSecurity
DreamDaemon's security level.
@ Ultrasafe
Server will not be able to run shell commands or access anything but temporary files.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
@@ -1059,12 +1060,12 @@ Protected Member Functions
33 Id = table.Column<
long >(nullable:
false )
34 .Annotation("Sqlite:Autoincrement" , true ),
35 DmeName = table.Column<string >(nullable: false ),
- 36 Output = table.Column<string >(nullable: false),
- 37 DirectoryName = table.Column<Guid>(nullable: false),
+ 36 Output = table.Column<
string >(nullable:
false ),
+ 37 DirectoryName = table.Column<Guid>(nullable:
false ),
38 MinimumSecurityLevel = table.Column<int>(nullable: true),
- 39 JobId = table.Column<long>(nullable: false),
- 40 RevisionInformationId = table.Column<long>(nullable: false),
- 41 ByondVersion = table.Column<string>(nullable: false),
+ 39 JobId = table.Column<long>(nullable:
false ),
+ 40 RevisionInformationId = table.Column<long>(nullable:
false ),
+ 41 ByondVersion = table.Column<string>(nullable:
false ),
42 DMApiMajorVersion = table.Column<int>(nullable: true),
43 DMApiMinorVersion = table.Column<int>(nullable: true),
44 DMApiPatchVersion = table.Column<int>(nullable: true),
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_generic_test_merging_update.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_generic_test_merging_update.html
index 8f2254d70a..6d9ac99ae0 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_generic_test_merging_update.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_generic_test_merging_update.html
@@ -991,12 +991,12 @@ Protected Member Functions
46 Id = table.Column<
long >(nullable:
false )
47 .Annotation("Sqlite:Autoincrement" , true ),
48 DmeName = table.Column<string >(nullable: false ),
- 49 Output = table.Column<string >(nullable: false),
- 50 DirectoryName = table.Column<Guid>(nullable: false),
+ 49 Output = table.Column<
string >(nullable:
false ),
+ 50 DirectoryName = table.Column<Guid>(nullable:
false ),
51 MinimumSecurityLevel = table.Column<int>(nullable: true),
- 52 JobId = table.Column<long>(nullable: false),
- 53 RevisionInformationId = table.Column<long>(nullable: false),
- 54 ByondVersion = table.Column<string>(nullable: false),
+ 52 JobId = table.Column<long>(nullable:
false ),
+ 53 RevisionInformationId = table.Column<long>(nullable:
false ),
+ 54 ByondVersion = table.Column<string>(nullable:
false ),
55 DMApiMajorVersion = table.Column<int>(nullable: true),
56 DMApiMinorVersion = table.Column<int>(nullable: true),
57 DMApiPatchVersion = table.Column<int>(nullable: true),
@@ -1026,6 +1026,7 @@ Protected Member Functions
81 name: "CompileJobs_down" );
82 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_rebuild.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_rebuild.html
index 9d0cbe802e..97e47bd1f9 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_rebuild.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_rebuild.html
@@ -1064,11 +1064,11 @@ Protected Member Functions
23 Id = table.Column<
long >(nullable:
false )
24 .Annotation("Sqlite:Autoincrement" , true ),
25 Name = table.Column<string >(maxLength: 10000, nullable: false ),
- 26 Path = table.Column<string >(nullable: false),
- 27 Online = table.Column<bool>(nullable: false),
-
- 29 AutoUpdateInterval = table.Column<uint>(nullable: false),
- 30 ChatBotLimit = table.Column<ushort>(nullable: false),
+ 26 Path = table.Column<
string >(nullable:
false ),
+
+
+ 29 AutoUpdateInterval = table.Column<uint>(nullable:
false ),
+ 30 ChatBotLimit = table.Column<ushort>(nullable:
false ),
31 },
32 constraints: table =>
33 {
@@ -1082,14 +1082,14 @@ Protected Member Functions
41 Id = table.Column<
long >(nullable:
false )
42 .Annotation("Sqlite:Autoincrement" , true ),
43 Enabled = table.Column<
bool >(nullable:
false ),
- 44 CreatedAt = table.Column<DateTimeOffset>(nullable: false),
+ 44 CreatedAt = table.Column<DateTimeOffset>(nullable:
false ),
45 SystemIdentifier = table.Column<string>(nullable: true),
- 46 Name = table.Column<string>(maxLength: 10000, nullable: false),
-
-
+ 46 Name = table.Column<string>(maxLength: 10000, nullable:
false ),
+
+
49 PasswordHash = table.Column<string>(nullable: true),
50 CreatedById = table.Column<long>(nullable: true),
- 51 CanonicalName = table.Column<string>(nullable: false),
+ 51 CanonicalName = table.Column<string>(nullable:
false ),
52 LastPasswordUpdate = table.Column<DateTimeOffset>(nullable: true),
53 },
54 constraints: table =>
@@ -1111,11 +1111,11 @@ Protected Member Functions
70 .Annotation("Sqlite:Autoincrement" , true ),
71 Name = table.Column<string >(maxLength: 100, nullable: false ),
72 Enabled = table.Column<
bool >(nullable: true),
- 73 ReconnectionInterval = table.Column<uint>(nullable: false),
- 74 ChannelLimit = table.Column<ushort>(nullable: false),
- 75 Provider = table.Column<int>(nullable: false),
- 76 ConnectionString = table.Column<string>(maxLength: 10000, nullable: false),
- 77 InstanceId = table.Column<long>(nullable: false),
+ 73 ReconnectionInterval = table.Column<uint>(nullable:
false ),
+ 74 ChannelLimit = table.Column<ushort>(nullable:
false ),
+ 75 Provider = table.Column<int>(nullable:
false ),
+ 76 ConnectionString = table.Column<string>(maxLength: 10000, nullable:
false ),
+ 77 InstanceId = table.Column<long>(nullable:
false ),
78 },
79 constraints: table =>
80 {
@@ -1135,16 +1135,16 @@ Protected Member Functions
94 Id = table.Column<
long >(nullable:
false )
95 .Annotation("Sqlite:Autoincrement" , true ),
96 AllowWebClient = table.Column<bool >(nullable: false ),
- 97 SecurityLevel = table.Column<int >(nullable: false),
- 98 PrimaryPort = table.Column<ushort>(nullable: false),
- 99 SecondaryPort = table.Column<ushort>(nullable: false),
- 100 StartupTimeout = table.Column<uint>(nullable: false),
- 101 AutoStart = table.Column<bool>(nullable: false),
-
-
+ 97 SecurityLevel = table.Column<
int >(nullable:
false ),
+ 98 PrimaryPort = table.Column<ushort>(nullable:
false ),
+ 99 SecondaryPort = table.Column<ushort>(nullable:
false ),
+ 100 StartupTimeout = table.Column<uint>(nullable:
false ),
+ 101 AutoStart = table.Column<bool>(nullable:
false ),
+
+
104 ProcessId = table.Column<int>(nullable: true),
105 AccessToken = table.Column<string>(nullable: true),
- 106 InstanceId = table.Column<long>(nullable: false),
+ 106 InstanceId = table.Column<long>(nullable:
false ),
107 },
108 constraints: table =>
109 {
@@ -1164,9 +1164,9 @@ Protected Member Functions
123 Id = table.Column<
long >(nullable:
false )
124 .Annotation("Sqlite:Autoincrement" , true ),
125 ProjectName = table.Column<string >(maxLength: 10000, nullable: true ),
- 126 ApiValidationPort = table.Column<ushort>(nullable: false),
- 127 ApiValidationSecurityLevel = table.Column<int>(nullable: false),
- 128 InstanceId = table.Column<long>(nullable: false),
+ 126 ApiValidationPort = table.Column<ushort>(nullable:
false ),
+ 127 ApiValidationSecurityLevel = table.Column<int>(nullable:
false ),
+ 128 InstanceId = table.Column<long>(nullable:
false ),
129 },
130 constraints: table =>
131 {
@@ -1186,15 +1186,15 @@ Protected Member Functions
145 Id = table.Column<
long >(nullable:
false )
146 .Annotation("Sqlite:Autoincrement" , true ),
147 CommitterName = table.Column<string >(maxLength: 10000, nullable: false ),
- 148 CommitterEmail = table.Column<string >(maxLength: 10000, nullable: false),
+ 148 CommitterEmail = table.Column<
string >(maxLength: 10000, nullable:
false ),
149 AccessUser = table.Column<string>(maxLength: 10000, nullable: true),
150 AccessToken = table.Column<string>(maxLength: 10000, nullable: true),
- 151 PushTestMergeCommits = table.Column<bool>(nullable: false),
- 152 ShowTestMergeCommitters = table.Column<bool>(nullable: false),
- 153 AutoUpdatesKeepTestMerges = table.Column<bool>(nullable: false),
- 154 AutoUpdatesSynchronize = table.Column<bool>(nullable: false),
- 155 PostTestMergeComment = table.Column<bool>(nullable: false),
- 156 InstanceId = table.Column<long>(nullable: false),
+ 151 PushTestMergeCommits = table.Column<bool>(nullable:
false ),
+ 152 ShowTestMergeCommitters = table.Column<bool>(nullable:
false ),
+ 153 AutoUpdatesKeepTestMerges = table.Column<bool>(nullable:
false ),
+ 154 AutoUpdatesSynchronize = table.Column<bool>(nullable:
false ),
+ 155 PostTestMergeComment = table.Column<bool>(nullable:
false ),
+ 156 InstanceId = table.Column<long>(nullable:
false ),
157 },
158 constraints: table =>
159 {
@@ -1214,8 +1214,8 @@ Protected Member Functions
173 Id = table.Column<
long >(nullable:
false )
174 .Annotation("Sqlite:Autoincrement" , true ),
175 CommitSha = table.Column<string >(maxLength: 40, nullable: false ),
- 176 OriginCommitSha = table.Column<string >(maxLength: 40, nullable: false),
- 177 InstanceId = table.Column<long>(nullable: false),
+ 176 OriginCommitSha = table.Column<
string >(maxLength: 40, nullable:
false ),
+ 177 InstanceId = table.Column<long>(nullable:
false ),
178 },
179 constraints: table =>
180 {
@@ -1235,14 +1235,14 @@ Protected Member Functions
194 Id = table.Column<
long >(nullable:
false )
195 .Annotation("Sqlite:Autoincrement" , true ),
196 UserId = table.Column<
long >(nullable:
false ),
- 197 InstanceUserRights = table.Column<ulong>(nullable: false),
- 198 ByondRights = table.Column<ulong>(nullable: false),
-
-
-
-
-
- 204 InstanceId = table.Column<long>(nullable: false),
+ 197 InstanceUserRights = table.Column<ulong>(nullable:
false ),
+ 198 ByondRights = table.Column<ulong>(nullable:
false ),
+
+
+
+
+
+ 204 InstanceId = table.Column<long>(nullable:
false ),
205 },
206 constraints: table =>
207 {
@@ -1270,14 +1270,14 @@ Protected Member Functions
229 Description = table.Column<string >(nullable: false ),
230 ErrorCode = table.Column<uint>(nullable: true),
231 ExceptionDetails = table.Column<string>(nullable: true),
- 232 StartedAt = table.Column<DateTimeOffset>(nullable: false),
+ 232 StartedAt = table.Column<DateTimeOffset>(nullable:
false ),
233 StoppedAt = table.Column<DateTimeOffset>(nullable: true),
- 234 Cancelled = table.Column<bool>(nullable: false),
+ 234 Cancelled = table.Column<bool>(nullable:
false ),
235 CancelRightsType = table.Column<ulong>(nullable: true),
236 CancelRight = table.Column<ulong>(nullable: true),
- 237 StartedById = table.Column<long>(nullable: false),
+ 237 StartedById = table.Column<long>(nullable:
false ),
238 CancelledById = table.Column<long>(nullable: true),
- 239 InstanceId = table.Column<long>(nullable: false),
+ 239 InstanceId = table.Column<long>(nullable:
false ),
240 },
241 constraints: table =>
242 {
@@ -1310,11 +1310,11 @@ Protected Member Functions
269 .Annotation("Sqlite:Autoincrement" , true ),
270 IrcChannel = table.Column<string >(maxLength: 100, nullable: true ),
271 DiscordChannelId = table.Column<ulong>(nullable: true),
- 272 IsAdminChannel = table.Column<bool>(nullable: false),
- 273 IsWatchdogChannel = table.Column<bool>(nullable: false),
- 274 IsUpdatesChannel = table.Column<bool>(nullable: false),
+ 272 IsAdminChannel = table.Column<bool>(nullable:
false ),
+ 273 IsWatchdogChannel = table.Column<bool>(nullable:
false ),
+ 274 IsUpdatesChannel = table.Column<bool>(nullable:
false ),
275 Tag = table.Column<string>(maxLength: 10000, nullable: true),
- 276 ChatSettingsId = table.Column<long>(nullable: false),
+ 276 ChatSettingsId = table.Column<long>(nullable:
false ),
277 },
278 constraints: table =>
279 {
@@ -1334,15 +1334,15 @@ Protected Member Functions
293 Id = table.Column<
long >(nullable:
false )
294 .Annotation("Sqlite:Autoincrement" , true ),
295 Number = table.Column<int >(nullable: false ),
- 296 PullRequestRevision = table.Column<string >(maxLength: 40, nullable: false),
+ 296 PullRequestRevision = table.Column<
string >(maxLength: 40, nullable:
false ),
297 Comment = table.Column<string>(maxLength: 10000, nullable: true),
- 298 TitleAtMerge = table.Column<string>(nullable: false),
- 299 BodyAtMerge = table.Column<string>(nullable: false),
- 300 Url = table.Column<string>(nullable: false),
- 301 Author = table.Column<string>(nullable: false),
- 302 MergedAt = table.Column<DateTimeOffset>(nullable: false),
- 303 MergedById = table.Column<long>(nullable: false),
- 304 PrimaryRevisionInformationId = table.Column<long>(nullable: false),
+ 298 TitleAtMerge = table.Column<string>(nullable:
false ),
+ 299 BodyAtMerge = table.Column<string>(nullable:
false ),
+ 300 Url = table.Column<string>(nullable:
false ),
+ 301 Author = table.Column<string>(nullable:
false ),
+ 302 MergedAt = table.Column<DateTimeOffset>(nullable:
false ),
+ 303 MergedById = table.Column<long>(nullable:
false ),
+ 304 PrimaryRevisionInformationId = table.Column<long>(nullable:
false ),
305 },
306 constraints: table =>
307 {
@@ -1368,12 +1368,12 @@ Protected Member Functions
327 Id = table.Column<
long >(nullable:
false )
328 .Annotation("Sqlite:Autoincrement" , true ),
329 DmeName = table.Column<string >(nullable: false ),
- 330 Output = table.Column<string >(nullable: false),
- 331 DirectoryName = table.Column<Guid>(nullable: false),
- 332 MinimumSecurityLevel = table.Column<int>(nullable: false),
- 333 JobId = table.Column<long>(nullable: false),
- 334 RevisionInformationId = table.Column<long>(nullable: false),
- 335 ByondVersion = table.Column<string>(nullable: false),
+ 330 Output = table.Column<
string >(nullable:
false ),
+ 331 DirectoryName = table.Column<Guid>(nullable:
false ),
+ 332 MinimumSecurityLevel = table.Column<int>(nullable:
false ),
+ 333 JobId = table.Column<long>(nullable:
false ),
+ 334 RevisionInformationId = table.Column<long>(nullable:
false ),
+ 335 ByondVersion = table.Column<string>(nullable:
false ),
336 DMApiMajorVersion = table.Column<int>(nullable: true),
337 DMApiMinorVersion = table.Column<int>(nullable: true),
338 DMApiPatchVersion = table.Column<int>(nullable: true),
@@ -1401,7 +1401,7 @@ Protected Member Functions
360 Id = table.Column<
long >(nullable:
false )
361 .Annotation("Sqlite:Autoincrement" , true ),
362 TestMergeId = table.Column<long >(nullable: false ),
- 363 RevisionInformationId = table.Column<long >(nullable: false),
+ 363 RevisionInformationId = table.Column<
long >(nullable:
false ),
364 },
365 constraints: table =>
366 {
@@ -1426,12 +1426,12 @@ Protected Member Functions
385 Id = table.Column<
long >(nullable:
false )
386 .Annotation("Sqlite:Autoincrement" , true ),
387 AccessIdentifier = table.Column<string >(nullable: false ),
- 388 ProcessId = table.Column<int >(nullable: false),
- 389 IsPrimary = table.Column<bool>(nullable: false),
- 390 Port = table.Column<ushort>(nullable: false),
-
- 392 LaunchSecurityLevel = table.Column<int>(nullable: false),
- 393 CompileJobId = table.Column<long>(nullable: false),
+ 388 ProcessId = table.Column<
int >(nullable:
false ),
+ 389 IsPrimary = table.Column<bool>(nullable:
false ),
+ 390 Port = table.Column<ushort>(nullable:
false ),
+
+ 392 LaunchSecurityLevel = table.Column<int>(nullable:
false ),
+ 393 CompileJobId = table.Column<long>(nullable:
false ),
394 },
395 constraints: table =>
396 {
@@ -1451,7 +1451,7 @@ Protected Member Functions
410 Id = table.Column<
long >(nullable:
false )
411 .Annotation("Sqlite:Autoincrement" , true ),
412 AlphaIsActive = table.Column<bool >(nullable: false ),
- 413 InstanceId = table.Column<long >(nullable: false),
+ 413 InstanceId = table.Column<
long >(nullable:
false ),
414 AlphaId = table.Column<long>(nullable: true),
415 BravoId = table.Column<long>(nullable: true),
416 },
@@ -1640,6 +1640,7 @@ Protected Member Functions
AdministrationRights
Administration rights for the server.
@ UserId
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.User.
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
RebootState
Represents the action to take when /world/Reboot() is called.
@ Enabled
The OAuth Gateway is enabled.
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_remove_experimental_watchdog.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_remove_experimental_watchdog.html
index 9b405af9f6..772c3614dc 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_remove_experimental_watchdog.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_remove_experimental_watchdog.html
@@ -945,9 +945,9 @@ Protected Member Functions
119 Id = table.Column<
long >(type:
"INTEGER" , nullable:
false )
120 .Annotation("Sqlite:Autoincrement" , true ),
121 AlphaId = table.Column<long >(type: "INTEGER" , nullable: true ),
- 122 AlphaIsActive = table.Column<bool >(type: "INTEGER" , nullable: false),
+ 122 AlphaIsActive = table.Column<
bool >(type:
"INTEGER" , nullable:
false ),
123 BravoId = table.Column<long>(type: "INTEGER" , nullable: true),
- 124 InstanceId = table.Column<long>(type: "INTEGER" , nullable: false),
+ 124 InstanceId = table.Column<long>(type:
"INTEGER" , nullable:
false ),
125 },
126 constraints: table =>
127 {
@@ -989,6 +989,7 @@ Protected Member Functions
163 unique: true);
164 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
@@ -1036,11 +1037,11 @@ Protected Member Functions
28 Id = table.Column<
long >(nullable:
false )
29 .Annotation("Sqlite:Autoincrement" , true ),
30 AccessIdentifier = table.Column<string >(nullable: false ),
- 31 ProcessId = table.Column<int >(nullable: false),
- 32 Port = table.Column<ushort>(nullable: false),
-
- 34 LaunchSecurityLevel = table.Column<int>(nullable: false),
- 35 CompileJobId = table.Column<long>(nullable: false),
+ 31 ProcessId = table.Column<
int >(nullable:
false ),
+ 32 Port = table.Column<ushort>(nullable:
false ),
+
+ 34 LaunchSecurityLevel = table.Column<int>(nullable:
false ),
+ 35 CompileJobId = table.Column<long>(nullable:
false ),
36 },
37 constraints: table =>
38 {
@@ -1070,13 +1071,13 @@ Protected Member Functions
62 Id = table.Column<
long >(nullable:
false )
63 .Annotation("Sqlite:Autoincrement" , true ),
64 AllowWebClient = table.Column<bool >(nullable: false ),
- 65 SecurityLevel = table.Column<int >(nullable: false),
- 66 Port = table.Column<ushort>(nullable: false),
- 67 StartupTimeout = table.Column<uint>(nullable: false),
- 68 HeartbeatSeconds = table.Column<uint>(nullable: false),
- 69 AutoStart = table.Column<bool>(nullable: false),
- 70 InstanceId = table.Column<long>(nullable: false),
- 71 TopicRequestTimeout = table.Column<uint>(nullable: false),
+ 65 SecurityLevel = table.Column<
int >(nullable:
false ),
+ 66 Port = table.Column<ushort>(nullable:
false ),
+ 67 StartupTimeout = table.Column<uint>(nullable:
false ),
+ 68 HeartbeatSeconds = table.Column<uint>(nullable:
false ),
+ 69 AutoStart = table.Column<bool>(nullable:
false ),
+ 70 InstanceId = table.Column<long>(nullable:
false ),
+ 71 TopicRequestTimeout = table.Column<uint>(nullable:
false ),
72 },
73 constraints: table =>
74 {
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_remove_soft_columns.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_remove_soft_columns.html
index c2335d9004..a50cf5d40c 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_remove_soft_columns.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_remove_soft_columns.html
@@ -1035,13 +1035,13 @@ Protected Member Functions
25 Id = table.Column<
long >(nullable:
false )
26 .Annotation("Sqlite:Autoincrement" , true ),
27 AllowWebClient = table.Column<bool >(nullable: false ),
- 28 SecurityLevel = table.Column<int >(nullable: false),
- 29 PrimaryPort = table.Column<ushort>(nullable: false),
- 30 SecondaryPort = table.Column<ushort>(nullable: false),
- 31 StartupTimeout = table.Column<uint>(nullable: false),
- 32 HeartbeatSeconds = table.Column<uint>(nullable: false),
- 33 AutoStart = table.Column<bool>(nullable: false),
- 34 InstanceId = table.Column<long>(nullable: false),
+ 28 SecurityLevel = table.Column<
int >(nullable:
false ),
+ 29 PrimaryPort = table.Column<ushort>(nullable:
false ),
+ 30 SecondaryPort = table.Column<ushort>(nullable:
false ),
+ 31 StartupTimeout = table.Column<uint>(nullable:
false ),
+ 32 HeartbeatSeconds = table.Column<uint>(nullable:
false ),
+ 33 AutoStart = table.Column<bool>(nullable:
false ),
+ 34 InstanceId = table.Column<long>(nullable:
false ),
35 },
36 constraints: table =>
37 {
@@ -1061,6 +1061,7 @@ Protected Member Functions
51 name: "DreamDaemonSettings_up" );
52 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_topic_timeout.html b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_topic_timeout.html
index e1c131ca0b..db37848992 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_topic_timeout.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_database_1_1_migrations_1_1_s_l_topic_timeout.html
@@ -984,13 +984,13 @@ Protected Member Functions
36 Id = table.Column<
long >(nullable:
false )
37 .Annotation("Sqlite:Autoincrement" , true ),
38 AllowWebClient = table.Column<bool >(nullable: false ),
- 39 SecurityLevel = table.Column<int >(nullable: false),
- 40 PrimaryPort = table.Column<ushort>(nullable: false),
- 41 SecondaryPort = table.Column<ushort>(nullable: false),
- 42 StartupTimeout = table.Column<uint>(nullable: false),
- 43 AutoStart = table.Column<bool>(nullable: false),
- 44 InstanceId = table.Column<long>(nullable: false),
- 45 HeartbeatSeconds = table.Column<uint>(nullable: false),
+ 39 SecurityLevel = table.Column<
int >(nullable:
false ),
+ 40 PrimaryPort = table.Column<ushort>(nullable:
false ),
+ 41 SecondaryPort = table.Column<ushort>(nullable:
false ),
+ 42 StartupTimeout = table.Column<uint>(nullable:
false ),
+ 43 AutoStart = table.Column<bool>(nullable:
false ),
+ 44 InstanceId = table.Column<long>(nullable:
false ),
+ 45 HeartbeatSeconds = table.Column<uint>(nullable:
false ),
46 },
47 constraints: table =>
48 {
@@ -1010,6 +1010,7 @@ Protected Member Functions
62 name: "DreamDaemonSettings_down" );
63 }
@ Id
Lookup the Api.Models.EntityId.Id of the Models.PermissionSet.
+
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_graph_q_l_1_1_types_1_1_gateway_information.html b/class_tgstation_1_1_server_1_1_host_1_1_graph_q_l_1_1_types_1_1_gateway_information.html
index 13e1e5ef00..084403bb03 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_graph_q_l_1_1_types_1_1_gateway_information.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_graph_q_l_1_1_types_1_1_gateway_information.html
@@ -408,7 +408,7 @@ Properties
-
diff --git a/class_tgstation_1_1_server_1_1_host_1_1_models_1_1_revision_information.html b/class_tgstation_1_1_server_1_1_host_1_1_models_1_1_revision_information.html
index 81abd92cbd..6e23ce645f 100644
--- a/class_tgstation_1_1_server_1_1_host_1_1_models_1_1_revision_information.html
+++ b/class_tgstation_1_1_server_1_1_host_1_1_models_1_1_revision_information.html
@@ -222,7 +222,7 @@ Here is the caller graph for this function: