Skip to content

Commit

Permalink
Add cmd bridge-startserver and command permissions
Browse files Browse the repository at this point in the history
  • Loading branch information
FabioZumbi12 committed Nov 3, 2019
1 parent 7bfd252 commit f12cb70
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 23 deletions.
14 changes: 7 additions & 7 deletions SEDiscordBridge.sln
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Project("{911E67C6-3D85-4FCE-B560-20A9C3E3FF48}") = "Torch.Server", "..\..\..\Sp
Executable = D:\SpaceEngineersDedicado\torch-server\Torch.Server.exe
RemoteMachine = FABIO-PC
StartingDirectory = D:\SpaceEngineersDedicado\torch-server
Environment = Default
Environment = Padrão
LaunchingEngine = 00000000-0000-0000-0000-000000000000
UseLegacyDebugEngines = No
LaunchSQLEngine = No
Expand Down Expand Up @@ -40,12 +40,12 @@ Global
{D6D9214A-9E67-4A51-A148-A05D45AA5479}.Release|Any CPU.Build.0 = Release|Any CPU
{D6D9214A-9E67-4A51-A148-A05D45AA5479}.Release|x64.ActiveCfg = Release|Any CPU
{D6D9214A-9E67-4A51-A148-A05D45AA5479}.Release|x64.Build.0 = Release|Any CPU
{46B444E4-2EA1-4E8A-B0D9-413D3EED096A}.Debug|Any CPU.ActiveCfg = Release
{46B444E4-2EA1-4E8A-B0D9-413D3EED096A}.Debug|x64.ActiveCfg = Release
{46B444E4-2EA1-4E8A-B0D9-413D3EED096A}.No Torch|Any CPU.ActiveCfg = Release
{46B444E4-2EA1-4E8A-B0D9-413D3EED096A}.No Torch|x64.ActiveCfg = Release
{46B444E4-2EA1-4E8A-B0D9-413D3EED096A}.Release|Any CPU.ActiveCfg = Release
{46B444E4-2EA1-4E8A-B0D9-413D3EED096A}.Release|x64.ActiveCfg = Release
{46B444E4-2EA1-4E8A-B0D9-413D3EED096A}.Debug|Any CPU.ActiveCfg = Release|x64
{46B444E4-2EA1-4E8A-B0D9-413D3EED096A}.Debug|x64.ActiveCfg = Release|x64
{46B444E4-2EA1-4E8A-B0D9-413D3EED096A}.No Torch|Any CPU.ActiveCfg = Release|x64
{46B444E4-2EA1-4E8A-B0D9-413D3EED096A}.No Torch|x64.ActiveCfg = Release|x64
{46B444E4-2EA1-4E8A-B0D9-413D3EED096A}.Release|Any CPU.ActiveCfg = Release|x64
{46B444E4-2EA1-4E8A-B0D9-413D3EED096A}.Release|x64.ActiveCfg = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
43 changes: 35 additions & 8 deletions SEDiscordBridge/DiscordBridge.cs
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ public void SendChatMessage(string user, string msg)
public void SendFacChatMessage(string user, string msg, string facName)
{
try {
IEnumerable<string> channelIds = Plugin.Config.FactionChannels.Where(c => c.Split(':')[0].Equals(facName));
IEnumerable<string> channelIds = Plugin.Config.FactionChannels.Where(c => c.Split(':')[0].Equals(facName));
if (Ready && channelIds.Count() > 0)
{
foreach (string chId in channelIds)
Expand Down Expand Up @@ -211,22 +211,49 @@ private Task Discord_MessageCreated(DSharpPlus.EventArgs.MessageCreateEventArgs
if (!e.Author.IsBot || (!botId.Equals(e.Author.Id) && Plugin.Config.BotToGame))
{
string comChannelId = Plugin.Config.CommandChannelId;
if (comChannelId != "")
if (!string.IsNullOrEmpty(comChannelId))
{
//execute commands
if (e.Channel.Id.Equals(ulong.Parse(Plugin.Config.CommandChannelId)) && e.Message.Content.StartsWith(Plugin.Config.CommandPrefix))
{
string cmd = e.Message.Content.Substring(Plugin.Config.CommandPrefix.Length);
var cmdText = new string(cmd.Skip(1).ToArray());
var cmdArgs = e.Message.Content.Substring(Plugin.Config.CommandPrefix.Length);
var cmd = cmdArgs.Split(' ')[0];

// Check for permission
if (Plugin.Config.CommandPerms.Count() > 0 &&
!Plugin.Config.CommandPerms.Where(c =>
!c.Split(':')[0].Equals(e.Author.Id.ToString()) ||
(c.Split(':')[0].Equals(e.Author.Id.ToString()) &&
(c.Split(':')[1].Equals(cmd) || c.Split(':')[1].Equals("*")))
).Any())
{
SendCmdResponse($"No permission for command: {cmd}", e.Channel);
return Task.CompletedTask;
}

// Server start command
if (cmd.Equals("bridge-startserver"))
{
if (Plugin.Torch.CurrentSession == null)
{
Plugin.Torch.Start();
SendCmdResponse("Torch initiated!", e.Channel);
}
else
{
SendCmdResponse("Torch is already running!", e.Channel);
}
return Task.CompletedTask;
}

if (Plugin.Torch.CurrentSession?.State == TorchSessionState.Loaded)
{
var manager = Plugin.Torch.CurrentSession.Managers.GetManager<CommandManager>();
var command = manager.Commands.GetCommand(cmdText, out string argText);
var command = manager.Commands.GetCommand(cmdArgs, out string argText);

if (command == null)
{
SendCmdResponse("Command not found: " + cmdText, e.Channel);
SendCmdResponse($"Command not found: {cmdArgs}", e.Channel);
}
else
{
Expand All @@ -242,9 +269,9 @@ private Task Discord_MessageCreated(DSharpPlus.EventArgs.MessageCreateEventArgs
SEDiscordBridgePlugin.Log.Debug($"invokeSuccess {invokeSuccess}");
if (!invokeSuccess)
{
SendCmdResponse("Error executing command: " + cmdText, e.Channel);
SendCmdResponse($"Error executing command: {cmdArgs}", e.Channel);
}
SEDiscordBridgePlugin.Log.Info($"Server ran command '{string.Join(" ", cmdText)}'");
SEDiscordBridgePlugin.Log.Info($"Server ran command '{cmdArgs}'");
}
}
else
Expand Down
3 changes: 3 additions & 0 deletions SEDiscordBridge/SEDBConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -122,5 +122,8 @@ public class SEDBConfig : ViewModel
private string _facformat2 = "[D-Fac]{p}";
public string FacFormat2 { get => _facformat2; set => SetValue(ref _facformat2, value); }

private ObservableCollection<string> _cmdPerms = new ObservableCollection<string>();
public ObservableCollection<string> CommandPerms { get => _cmdPerms; set => SetValue(ref _cmdPerms, value); }

}
}
25 changes: 23 additions & 2 deletions SEDiscordBridge/SEDBControl.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" Height="1702" Width="610">
mc:Ignorable="d" Height="1973" Width="610">
<StackPanel>
<DockPanel Height="31" LastChildFill="False" Margin="3,0,20,0">
<Border DockPanel.Dock="Bottom" Width="600" Height="30">
Expand Down Expand Up @@ -79,10 +79,31 @@
<Label Content="Remove response interval ('0' to don't remove)"/>
</StackPanel>

<Label Content="Command Permissions (leave blank to disable):" />
<StackPanel Orientation="Horizontal">
<Button x:Name="btnAddPerm" Width="100" Content="Add Permission" Margin="3" Height="22" Click="btnAddPerm_Click" />
<Button x:Name="btnDelPerm" Width="100" Content="Delete Permission" Margin="3" Click="btnDelPerm_Click" />
</StackPanel>

<StackPanel Orientation="Horizontal">
<TextBox x:Name="txtPlayerName" Width="169" Margin="3,3,0,3" HorizontalAlignment="Left" Height="20" />
<Label Content="Player Discord ID (only numbers wituout @)"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBox x:Name="txtPermission" Width="169" Margin="3,3,0,3" HorizontalAlignment="Left" Height="20" />
<Label Content="The command name allowed to use, in lowercase"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<DataGrid x:Name="dgPermList" Height="139" Width="340" Margin="3" AutoGenerateColumns="False" IsReadOnly="True" SelectionChanged="DgPermList_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Player}" Header="Player ID" Width="165"/>
<DataGridTextColumn Binding="{Binding Permission}" Header="Permission Name" Width="165"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
<Label Height="20">
<LineBreak/>
</Label>

<Label FontWeight="Bold" FontSize="16" Content="Status Messages:" />

<StackPanel Orientation="Horizontal">
Expand Down
46 changes: 41 additions & 5 deletions SEDiscordBridge/SEDBControl.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,24 @@ public SEDBControl(SEDiscordBridgePlugin plugin) : this()
Plugin = plugin;
DataContext = plugin.Config;


cbFontColor.ItemsSource = new ObservableCollection<string>(typeof(MyFontEnum).GetFields().Select(x => x.Name).ToList());
cbFacFontColor.ItemsSource = new ObservableCollection<string>(typeof(MyFontEnum).GetFields().Select(x => x.Name).ToList());
UpdateDataGrid();
UpdateFacDataGrid();
UpdatePermsDataGrid();
}

private void UpdateDataGrid()
private void UpdateFacDataGrid()
{
var factions = from f in Plugin.Config.FactionChannels select new { Faction = f.Split(':')[0], Channel = f.Split(':')[1] };
dgFacList.ItemsSource = factions;
}

private void UpdatePermsDataGrid()
{
var perms = from f in Plugin.Config.CommandPerms select new { Player = f.Split(':')[0], Permission = f.Split(':')[1] };
dgPermList.ItemsSource = perms;
}

private void SaveConfig_OnClick(object sender, RoutedEventArgs e)
{
Plugin.Save();
Expand Down Expand Up @@ -73,7 +79,7 @@ private void BtnAddFac_Click(object sender, RoutedEventArgs e)
if (txtFacName.Text.Length > 0 && txtFacChannel.Text.Length > 0)
{
Plugin.Config.FactionChannels.Add(txtFacName.Text + ":" + txtFacChannel.Text);
UpdateDataGrid();
UpdateFacDataGrid();
dgFacList.Items.MoveCurrentToLast();
}
}
Expand All @@ -84,7 +90,7 @@ private void BtnDelFac_Click(object sender, RoutedEventArgs e)
{
dynamic dataRow = dgFacList.SelectedItem;
Plugin.Config.FactionChannels.Remove(dataRow.Faction + ":" + dataRow.Channel);
UpdateDataGrid();
UpdateFacDataGrid();
}
}

Expand All @@ -102,5 +108,35 @@ private void CbFontColor_SelectionChanged(object sender, SelectionChangedEventAr
{
Plugin.Config.GlobalColor = cbFontColor.SelectedValue.ToString();
}

private void DgPermList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (dgPermList.SelectedIndex >= 0)
{
dynamic dataRow = dgPermList.SelectedItem;
txtPlayerName.Text = dataRow.Player;
txtPermission.Text = dataRow.Permission;
}
}

private void btnAddPerm_Click(object sender, RoutedEventArgs e)
{
if (txtPlayerName.Text.Length > 0 && txtPermission.Text.Length > 0)
{
Plugin.Config.CommandPerms.Add(txtPlayerName.Text + ":" + txtPermission.Text);
UpdatePermsDataGrid();
dgPermList.Items.MoveCurrentToLast();
}
}

private void btnDelPerm_Click(object sender, RoutedEventArgs e)
{
if (dgPermList.SelectedIndex >= 0)
{
dynamic dataRow = dgPermList.SelectedItem;
Plugin.Config.CommandPerms.Remove(dataRow.Player + ":" + dataRow.Permission);
UpdatePermsDataGrid();
}
}
}
}
2 changes: 1 addition & 1 deletion SEDiscordBridge/manifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
<Name>SEDiscordBridge</Name>
<Guid>3cd3ba7f-c47c-4efe-8cf1-bd3f618f5b9c</Guid>
<Repository>FabioZumbi12/SEDiscordBridge</Repository>
<Version>v1.6.0</Version>
<Version>v1.6.1</Version>
</PluginManifest>

0 comments on commit f12cb70

Please sign in to comment.