Compare commits
10 commits
b6a2c1d68f
...
0e2ffa7e9a
Author | SHA1 | Date | |
---|---|---|---|
0e2ffa7e9a | |||
865bf024f3 | |||
23028d29ed | |||
6b75d8e446 | |||
70bbade763 | |||
600fa261b5 | |||
f14b0034b5 | |||
4f9b342fa8 | |||
b9672f82d6 | |||
fd6d1830c5 |
3 changed files with 312 additions and 261 deletions
62
Program.cs
62
Program.cs
|
@ -3,11 +3,13 @@ using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
using DiscordRPC;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using RestSharp;
|
using RestSharp;
|
||||||
using Terminal.Gui;
|
using Terminal.Gui;
|
||||||
using Terminal.Gui.Trees;
|
using Terminal.Gui.Trees;
|
||||||
using Attribute = Terminal.Gui.Attribute;
|
using Attribute = Terminal.Gui.Attribute;
|
||||||
|
using Button = Terminal.Gui.Button;
|
||||||
using Color = Terminal.Gui.Color;
|
using Color = Terminal.Gui.Color;
|
||||||
|
|
||||||
namespace chord
|
namespace chord
|
||||||
|
@ -19,6 +21,7 @@ namespace chord
|
||||||
private ulong currentSelectedChannel;
|
private ulong currentSelectedChannel;
|
||||||
private ulong currentSelectedGuild;
|
private ulong currentSelectedGuild;
|
||||||
private SortedDictionary<ulong, List<ulong>> guilds;
|
private SortedDictionary<ulong, List<ulong>> guilds;
|
||||||
|
private DiscordRpcClient rpcClient;
|
||||||
private Settings settings;
|
private Settings settings;
|
||||||
private Window window;
|
private Window window;
|
||||||
|
|
||||||
|
@ -48,6 +51,12 @@ namespace chord
|
||||||
await client.LoginAsync(TokenType.Bot, settings.Token);
|
await client.LoginAsync(TokenType.Bot, settings.Token);
|
||||||
await client.StartAsync();
|
await client.StartAsync();
|
||||||
|
|
||||||
|
if (settings.EnableRichPresence) {
|
||||||
|
rpcClient = new DiscordRpcClient("923436807297859625");
|
||||||
|
rpcClient.Initialize();
|
||||||
|
rpcClient.SetPresence(new RichPresence());
|
||||||
|
}
|
||||||
|
|
||||||
Application.Init();
|
Application.Init();
|
||||||
|
|
||||||
window = new Window("chord")
|
window = new Window("chord")
|
||||||
|
@ -62,6 +71,18 @@ namespace chord
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var menuBar = buildMenu();
|
||||||
|
|
||||||
|
var loadingLabel = new Label("Loading...")
|
||||||
|
{
|
||||||
|
X = 0,
|
||||||
|
Y = 0,
|
||||||
|
Width = Dim.Fill(),
|
||||||
|
Height = Dim.Fill(),
|
||||||
|
TextAlignment = TextAlignment.Centered,
|
||||||
|
VerticalTextAlignment = VerticalTextAlignment.Middle,
|
||||||
|
};
|
||||||
|
|
||||||
client.Ready += () =>
|
client.Ready += () =>
|
||||||
{
|
{
|
||||||
guilds = new SortedDictionary<ulong, List<ulong>>();
|
guilds = new SortedDictionary<ulong, List<ulong>>();
|
||||||
|
@ -82,7 +103,6 @@ namespace chord
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var menuBar = buildMenu();
|
|
||||||
var serverList = buildServerList();
|
var serverList = buildServerList();
|
||||||
var channelList = buildChannelList(serverList);
|
var channelList = buildChannelList(serverList);
|
||||||
var chatBox = buildChatBox(serverList);
|
var chatBox = buildChatBox(serverList);
|
||||||
|
@ -174,6 +194,10 @@ namespace chord
|
||||||
{
|
{
|
||||||
channelListTree.AddObject(category.Value);
|
channelListTree.AddObject(category.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (settings.EnableRichPresence) {
|
||||||
|
rpcClient.UpdateDetails($"Chatting in {client.GetGuild(currentSelectedGuild).Name}");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
channelListTree.SelectionChanged += async (arg1, arg2) =>
|
channelListTree.SelectionChanged += async (arg1, arg2) =>
|
||||||
|
@ -229,22 +253,38 @@ namespace chord
|
||||||
|
|
||||||
foreach (var roles in client.GetGuild(currentSelectedGuild).Roles)
|
foreach (var roles in client.GetGuild(currentSelectedGuild).Roles)
|
||||||
{
|
{
|
||||||
|
if (roles.IsHoisted) {
|
||||||
|
if (roles.Members.Count() != 0) {
|
||||||
var roleName = Regex.Replace(roles.Name, @"[^\u0000-\u007F]+", string.Empty);
|
var roleName = Regex.Replace(roles.Name, @"[^\u0000-\u007F]+", string.Empty);
|
||||||
var node = new TreeNode(roleName);
|
var node = new TreeNode(roleName);
|
||||||
|
|
||||||
foreach (var users in roles.Members)
|
foreach (var users in roles.Members)
|
||||||
{
|
{
|
||||||
node.Children.Add(new TreeNode($"{users.Username}#{users.Discriminator} ({users.Nickname})"));
|
var userName = Regex.Replace(users.Username, @"[^\u0000-\u007F]+", string.Empty);
|
||||||
|
|
||||||
|
string userNick = string.Empty;
|
||||||
|
if (users.Nickname != null)
|
||||||
|
userNick = Regex.Replace(users.Nickname, @"[^\u0000-\u007F]+", string.Empty);
|
||||||
|
|
||||||
|
node.Children.Add(new TreeNode($"{userName}#{users.Discriminator} ({userNick})"));
|
||||||
}
|
}
|
||||||
|
|
||||||
rolesDict.Add(roles.Position, node);
|
rolesDict.TryAdd(Math.Abs(roles.Position - client.GetGuild(currentSelectedGuild).Roles.Count()), node);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var role in rolesDict)
|
foreach (var role in rolesDict)
|
||||||
{
|
{
|
||||||
userListTree.AddObject(role.Value);
|
userListTree.AddObject(role.Value);
|
||||||
}
|
}
|
||||||
} catch {
|
|
||||||
|
if (settings.EnableRichPresence) {
|
||||||
|
rpcClient.UpdateState($"In channel {client.GetGuild(currentSelectedGuild).GetTextChannel(currentSelectedChannel).Name}");
|
||||||
|
rpcClient.UpdateStartTime();
|
||||||
|
}
|
||||||
|
} catch(Exception err) {
|
||||||
|
Console.WriteLine(err);
|
||||||
await chatBoxList.SetSourceAsync(new List<string>());
|
await chatBoxList.SetSourceAsync(new List<string>());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -310,7 +350,7 @@ namespace chord
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Application.Top.Add(window, menuBar);
|
window.RemoveAll();
|
||||||
window.Add(serverList, channelList, messageBox, chatBox, userList);
|
window.Add(serverList, channelList, messageBox, chatBox, userList);
|
||||||
serverList.Add(serverListList);
|
serverList.Add(serverListList);
|
||||||
channelList.Add(channelListTree);
|
channelList.Add(channelListTree);
|
||||||
|
@ -340,12 +380,21 @@ namespace chord
|
||||||
chatBoxList.SelectedItem = currentChannelMessages.Count - 1;
|
chatBoxList.SelectedItem = currentChannelMessages.Count - 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
Application.MainLoop.AddTimeout(TimeSpan.FromMilliseconds(100), caller => true);
|
Application.MainLoop.AddTimeout(TimeSpan.FromMilliseconds(100), caller => {
|
||||||
|
if (settings.EnableRichPresence)
|
||||||
|
rpcClient.Invoke();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
Application.Top.Add(window, menuBar);
|
||||||
|
window.Add(loadingLabel);
|
||||||
|
|
||||||
Application.Run();
|
Application.Run();
|
||||||
Application.Shutdown();
|
Application.Shutdown();
|
||||||
} catch (System.Exception err) {
|
} catch (System.Exception err) {
|
||||||
Console.WriteLine(err);
|
Console.WriteLine(err);
|
||||||
|
|
||||||
|
Application.Shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -426,6 +475,7 @@ namespace chord
|
||||||
public class Settings
|
public class Settings
|
||||||
{
|
{
|
||||||
public string Token { get; set; }
|
public string Token { get; set; }
|
||||||
|
public bool EnableRichPresence { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GetMessagesResponse
|
public class GetMessagesResponse
|
||||||
|
|
2
TODO
2
TODO
|
@ -3,6 +3,6 @@
|
||||||
- Convert message attachments to links (DONE)
|
- Convert message attachments to links (DONE)
|
||||||
- Sort Channels by catagories (DONE)
|
- Sort Channels by catagories (DONE)
|
||||||
- DMs
|
- DMs
|
||||||
- Loading Screen
|
- Loading Screen (DONE)
|
||||||
- Hotkeys (Partially Done. Still some weird stuff that happens that idfk why happens)
|
- Hotkeys (Partially Done. Still some weird stuff that happens that idfk why happens)
|
||||||
- User roles sorting (DONE)
|
- User roles sorting (DONE)
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Discord.Net.Labs" Version="3.5.0" />
|
<PackageReference Include="Discord.Net.Labs" Version="3.5.0" />
|
||||||
|
<PackageReference Include="DiscordRichPresence" Version="1.0.175" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
|
||||||
|
|
Reference in a new issue