Compare commits
8 commits
0e2ffa7e9a
...
71ae08bf10
Author | SHA1 | Date | |
---|---|---|---|
71ae08bf10 | |||
c066b13446 | |||
7972a6a1d6 | |||
b6d83fea48 | |||
773a18f114 | |||
fd63579cba | |||
9a32d343f5 | |||
62d5c58eaf |
16 changed files with 2421 additions and 585 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -1,2 +1,4 @@
|
|||
bin
|
||||
obj
|
||||
.yarn/cache
|
||||
.yarn/install-state.gz
|
||||
node_modules
|
||||
dist
|
||||
|
|
363
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
Normal file
363
.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
vendored
Normal file
File diff suppressed because one or more lines are too long
9
.yarn/plugins/@yarnpkg/plugin-typescript.cjs
vendored
Normal file
9
.yarn/plugins/@yarnpkg/plugin-typescript.cjs
vendored
Normal file
File diff suppressed because one or more lines are too long
768
.yarn/releases/yarn-3.1.1.cjs
vendored
Executable file
768
.yarn/releases/yarn-3.1.1.cjs
vendored
Executable file
File diff suppressed because one or more lines are too long
11
.yarnrc.yml
Normal file
11
.yarnrc.yml
Normal file
|
@ -0,0 +1,11 @@
|
|||
nmMode: hardlinks-local
|
||||
|
||||
nodeLinker: node-modules
|
||||
|
||||
plugins:
|
||||
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
|
||||
spec: "@yarnpkg/plugin-interactive-tools"
|
||||
- path: .yarn/plugins/@yarnpkg/plugin-typescript.cjs
|
||||
spec: "@yarnpkg/plugin-typescript"
|
||||
|
||||
yarnPath: .yarn/releases/yarn-3.1.1.cjs
|
1
BUGS
1
BUGS
|
@ -1 +0,0 @@
|
|||
- Rare hanging
|
6
LICENSE
6
LICENSE
|
@ -631,8 +631,8 @@ to attach them to the start of each source file to most effectively
|
|||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
backend
|
||||
Copyright (C) 2021 Furbook
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
|
|||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
<program> Copyright (C) 2021 Furbook
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
|
498
Program.cs
498
Program.cs
|
@ -1,498 +0,0 @@
|
|||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using Discord;
|
||||
using Discord.WebSocket;
|
||||
using DiscordRPC;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using RestSharp;
|
||||
using Terminal.Gui;
|
||||
using Terminal.Gui.Trees;
|
||||
using Attribute = Terminal.Gui.Attribute;
|
||||
using Button = Terminal.Gui.Button;
|
||||
using Color = Terminal.Gui.Color;
|
||||
|
||||
namespace chord
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
private ListView chatBoxList;
|
||||
private List<string> currentChannelMessages;
|
||||
private ulong currentSelectedChannel;
|
||||
private ulong currentSelectedGuild;
|
||||
private SortedDictionary<ulong, List<ulong>> guilds;
|
||||
private DiscordRpcClient rpcClient;
|
||||
private Settings settings;
|
||||
private Window window;
|
||||
|
||||
public static void Main()
|
||||
{
|
||||
new Program().Start();
|
||||
}
|
||||
|
||||
private async void Start()
|
||||
{
|
||||
try {
|
||||
#if DEBUG
|
||||
var config = new ConfigurationBuilder()
|
||||
.AddJsonFile("config.json")
|
||||
.Build();
|
||||
#else
|
||||
var config = new ConfigurationBuilder()
|
||||
.AddJsonFile($"{Environment.GetEnvironmentVariable("HOME")}/.config/chord/config.json")
|
||||
.Build();
|
||||
#endif
|
||||
|
||||
settings = config.Get<Settings>();
|
||||
|
||||
var client = new DiscordSocketClient(new DiscordSocketConfig
|
||||
{ AlwaysDownloadUsers = true, GatewayIntents = GatewayIntents.All });
|
||||
|
||||
await client.LoginAsync(TokenType.Bot, settings.Token);
|
||||
await client.StartAsync();
|
||||
|
||||
if (settings.EnableRichPresence) {
|
||||
rpcClient = new DiscordRpcClient("923436807297859625");
|
||||
rpcClient.Initialize();
|
||||
rpcClient.SetPresence(new RichPresence());
|
||||
}
|
||||
|
||||
Application.Init();
|
||||
|
||||
window = new Window("chord")
|
||||
{
|
||||
X = 0,
|
||||
Y = 1,
|
||||
Width = Dim.Fill(),
|
||||
Height = Dim.Fill(),
|
||||
ColorScheme =
|
||||
{
|
||||
Normal = new Attribute(Color.White, Color.Black)
|
||||
}
|
||||
};
|
||||
|
||||
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 += () =>
|
||||
{
|
||||
guilds = new SortedDictionary<ulong, List<ulong>>();
|
||||
|
||||
foreach (var guild in client.Guilds)
|
||||
{
|
||||
guilds.Add(guild.Id, new List<ulong>());
|
||||
|
||||
foreach (var channel in guild.TextChannels)
|
||||
{
|
||||
var findGuild = guilds.GetValueOrDefault(guild.Id);
|
||||
|
||||
if (channel.Users.ToList().Find(user => user.Id == client.CurrentUser.Id) == null) continue;
|
||||
if (findGuild == null) continue;
|
||||
findGuild.Add(channel.Id);
|
||||
|
||||
findGuild.Sort();
|
||||
}
|
||||
}
|
||||
|
||||
var serverList = buildServerList();
|
||||
var channelList = buildChannelList(serverList);
|
||||
var chatBox = buildChatBox(serverList);
|
||||
var messageBox = buildMessageBox(serverList, chatBox);
|
||||
var userList = buildUserList(chatBox);
|
||||
|
||||
var serverListList = new ListView
|
||||
{
|
||||
X = 0,
|
||||
Y = 0,
|
||||
Width = Dim.Fill(),
|
||||
Height = Dim.Fill()
|
||||
};
|
||||
|
||||
var guildNames = guilds.Select(guild => client.GetGuild(guild.Key).Name).ToList();
|
||||
|
||||
serverListList.SetSource(guildNames);
|
||||
|
||||
var channelListTree = new TreeView
|
||||
{
|
||||
X = 0,
|
||||
Y = 0,
|
||||
Width = Dim.Fill(),
|
||||
Height = Dim.Fill()
|
||||
};
|
||||
|
||||
chatBoxList = new ListView
|
||||
{
|
||||
X = 0,
|
||||
Y = 0,
|
||||
Width = Dim.Fill(),
|
||||
Height = Dim.Fill()
|
||||
};
|
||||
|
||||
var messageBoxText = new TextView
|
||||
{
|
||||
X = 0,
|
||||
Y = 0,
|
||||
Width = Dim.Percent(95),
|
||||
Height = Dim.Fill()
|
||||
};
|
||||
|
||||
var messageBoxSend = new Button("Send", true)
|
||||
{
|
||||
X = Pos.Right(messageBoxText) - 2,
|
||||
Y = 0
|
||||
};
|
||||
|
||||
var userListTree = new TreeView
|
||||
{
|
||||
X = 0,
|
||||
Y = 0,
|
||||
Width = Dim.Fill(),
|
||||
Height = Dim.Fill()
|
||||
};
|
||||
|
||||
serverListList.OpenSelectedItem += args =>
|
||||
{
|
||||
channelListTree.ClearObjects();
|
||||
|
||||
currentSelectedGuild = guilds.Keys.ToList()[args.Item];
|
||||
|
||||
var channelNames = guilds.GetValueOrDefault(currentSelectedGuild)!
|
||||
.Select(channel => client.GetGuild(currentSelectedGuild).GetTextChannel(channel).Name).ToList();
|
||||
|
||||
var categoryDict = new SortedDictionary<ulong, TreeNode>();
|
||||
|
||||
foreach (var categories in client.GetGuild(currentSelectedGuild).CategoryChannels)
|
||||
{
|
||||
var categoryName = Regex.Replace(categories.Name, @"[^\u0000-\u007F]+", string.Empty);
|
||||
var node = new TreeNode(categoryName);
|
||||
|
||||
foreach(var channel in categories.Channels)
|
||||
{
|
||||
if (channel.GetType().Name == "SocketTextChannel")
|
||||
{
|
||||
var channelName = Regex.Replace(channel.Name, @"[^\u0000-\u007F]+", string.Empty);
|
||||
var channelNode = new TreeNode(channelName);
|
||||
channelNode.Tag = new { Id = channel.Id };
|
||||
|
||||
node.Children.Add(channelNode);
|
||||
}
|
||||
}
|
||||
|
||||
categoryDict.Add(categories.Id, node);
|
||||
}
|
||||
|
||||
foreach (var category in categoryDict)
|
||||
{
|
||||
channelListTree.AddObject(category.Value);
|
||||
}
|
||||
|
||||
if (settings.EnableRichPresence) {
|
||||
rpcClient.UpdateDetails($"Chatting in {client.GetGuild(currentSelectedGuild).Name}");
|
||||
}
|
||||
};
|
||||
|
||||
channelListTree.SelectionChanged += async (arg1, arg2) =>
|
||||
{
|
||||
userListTree.ClearObjects();
|
||||
|
||||
try {
|
||||
currentSelectedChannel = (ulong)arg2.NewValue.Tag.GetType().GetProperty("Id").GetValue(arg2.NewValue.Tag);
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
var restSharpClient = new RestClient("https://discord.com/api/v9");
|
||||
var restSharpReq = new RestRequest($"channels/{currentSelectedChannel}/messages");
|
||||
restSharpClient.AddDefaultHeader("Authorization", settings.Token);
|
||||
|
||||
var response = await restSharpClient.GetAsync<List<GetMessagesResponse>>(restSharpReq);
|
||||
|
||||
var messages = new List<string>();
|
||||
|
||||
foreach (var msg in response)
|
||||
{
|
||||
var msgNewLines = msg.content.Split("\n").ToList();
|
||||
|
||||
var firstMsg = msgNewLines[0];
|
||||
|
||||
msgNewLines.RemoveAt(0);
|
||||
msgNewLines.Reverse();
|
||||
|
||||
messages.AddRange(msgNewLines.Select(message => $"{message}"));
|
||||
|
||||
messages.Add($"{msg.author.username}#{msg.author.discriminator} | {firstMsg}");
|
||||
|
||||
if (msg.embeds.Count != 0)
|
||||
messages.Add($"{msg.author.username}#{msg.author.discriminator} | [Unable to display embed]");
|
||||
|
||||
if (msg.attachments.Count == 0) continue;
|
||||
messages.AddRange(msg.attachments
|
||||
.Select(attachment => $"{msg.author.username}#{msg.author.discriminator} | {attachment.url}")
|
||||
.Select(dummy => dummy));
|
||||
}
|
||||
|
||||
messages.Reverse();
|
||||
|
||||
await chatBoxList.SetSourceAsync(messages);
|
||||
currentChannelMessages = messages;
|
||||
|
||||
chatBoxList.ScrollDown(currentChannelMessages.Count - chatBoxList.Bounds.Height);
|
||||
chatBoxList.SelectedItem = currentChannelMessages.Count - 1;
|
||||
|
||||
var rolesDict = new SortedDictionary<int, TreeNode>();
|
||||
|
||||
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 node = new TreeNode(roleName);
|
||||
|
||||
foreach (var users in roles.Members)
|
||||
{
|
||||
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.TryAdd(Math.Abs(roles.Position - client.GetGuild(currentSelectedGuild).Roles.Count()), node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var role in rolesDict)
|
||||
{
|
||||
userListTree.AddObject(role.Value);
|
||||
}
|
||||
|
||||
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>());
|
||||
}
|
||||
};
|
||||
|
||||
messageBoxSend.Clicked += async () =>
|
||||
{
|
||||
var restSharpClient = new RestClient("https://discord.com/api/v9");
|
||||
var restSharpReq = new RestRequest($"channels/{currentSelectedChannel}/messages");
|
||||
restSharpClient.AddDefaultHeader("Authorization", settings.Token);
|
||||
restSharpReq.AddJsonBody(new { content = Encoding.UTF8.GetString(messageBoxText.Text.ToByteArray()) });
|
||||
|
||||
await restSharpClient.PostAsync<List<object>>(restSharpReq);
|
||||
|
||||
messageBoxText.Text = "";
|
||||
};
|
||||
|
||||
chatBoxList.OpenSelectedItem += args =>
|
||||
{
|
||||
if (currentChannelMessages[args.Item].Split(" | ")[1].Contains("http"))
|
||||
for (var i = 0; i < currentChannelMessages[args.Item].Split(" | ")[1].Split(" ").Count(); i++)
|
||||
if (currentChannelMessages[args.Item].Split(" | ")[1].Split(" ")[i].Contains("http"))
|
||||
{
|
||||
var procStartInfo = new ProcessStartInfo("/bin/sh",
|
||||
$"-c \"xdg-open {currentChannelMessages[args.Item].Split(" | ")[1].Split(" ")[i]}\"")
|
||||
{
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
CreateNoWindow = true,
|
||||
UseShellExecute = false
|
||||
};
|
||||
|
||||
var proc = new Process();
|
||||
proc.StartInfo = procStartInfo;
|
||||
proc.Start();
|
||||
}
|
||||
};
|
||||
|
||||
Application.Top.KeyPress += async args =>
|
||||
{
|
||||
switch (ShortcutHelper.GetModifiersKey(args.KeyEvent)) {
|
||||
case Key.CtrlMask | Key.S:
|
||||
serverListList.SetFocus();
|
||||
break;
|
||||
case Key.CtrlMask | Key.C:
|
||||
channelListTree.SetFocus();
|
||||
break;
|
||||
case Key.CtrlMask | Key.AltMask | Key.C:
|
||||
chatBoxList.SetFocus();
|
||||
break;
|
||||
case Key.CtrlMask | Key.U:
|
||||
userListTree.SetFocus();
|
||||
break;
|
||||
case Key.CtrlMask | Key.Enter:
|
||||
var restSharpClient = new RestClient("https://discord.com/api/v9");
|
||||
var restSharpReq = new RestRequest($"channels/{currentSelectedChannel}/messages");
|
||||
restSharpClient.AddDefaultHeader("Authorization", settings.Token);
|
||||
restSharpReq.AddJsonBody(new { content = Encoding.UTF8.GetString(messageBoxText.Text.ToByteArray()) });
|
||||
|
||||
await restSharpClient.PostAsync<List<object>>(restSharpReq);
|
||||
|
||||
messageBoxText.Text = "";
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
window.RemoveAll();
|
||||
window.Add(serverList, channelList, messageBox, chatBox, userList);
|
||||
serverList.Add(serverListList);
|
||||
channelList.Add(channelListTree);
|
||||
chatBox.Add(chatBoxList);
|
||||
messageBox.Add(messageBoxText, messageBoxSend);
|
||||
userList.Add(userListTree);
|
||||
|
||||
return Task.CompletedTask;
|
||||
};
|
||||
|
||||
client.MessageReceived += async msg =>
|
||||
{
|
||||
if (msg.Channel.Id != currentSelectedChannel) return;
|
||||
|
||||
var restSharpClient = new RestClient("https://discord.com/api/v9");
|
||||
var restSharpReq = new RestRequest($"channels/{currentSelectedChannel}/messages");
|
||||
restSharpReq.AddQueryParameter("limit", "1");
|
||||
restSharpClient.AddDefaultHeader("Authorization", settings.Token);
|
||||
|
||||
var response = await restSharpClient.GetAsync<List<GetMessagesResponse>>(restSharpReq);
|
||||
|
||||
currentChannelMessages.Add(
|
||||
$"{response.First().author.username}#{response.First().author.discriminator} | {response.First().content}");
|
||||
await chatBoxList.SetSourceAsync(currentChannelMessages);
|
||||
|
||||
chatBoxList.ScrollDown(currentChannelMessages.Count - chatBoxList.Bounds.Height);
|
||||
chatBoxList.SelectedItem = currentChannelMessages.Count - 1;
|
||||
};
|
||||
|
||||
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.Shutdown();
|
||||
} catch (System.Exception err) {
|
||||
Console.WriteLine(err);
|
||||
|
||||
Application.Shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
private Window buildChatBox(Window serverList)
|
||||
{
|
||||
return new Window("Chat Box")
|
||||
{
|
||||
X = Pos.Right(serverList),
|
||||
Y = 0,
|
||||
Width = Dim.Percent(60),
|
||||
Height = Dim.Percent(90)
|
||||
};
|
||||
}
|
||||
|
||||
private Window buildChannelList(Window serverList)
|
||||
{
|
||||
return new Window("Channel List")
|
||||
{
|
||||
X = 0,
|
||||
Y = Pos.Bottom(serverList),
|
||||
Width = Dim.Percent(30),
|
||||
Height = Dim.Percent(50)
|
||||
};
|
||||
}
|
||||
|
||||
private MenuBar buildMenu()
|
||||
{
|
||||
return new MenuBar(new[]
|
||||
{
|
||||
new MenuBarItem("File", new[]
|
||||
{
|
||||
new MenuItem("_Quit", "Quit the Application", () => { Application.Top.Running = false; })
|
||||
}),
|
||||
new MenuBarItem("Help", new[]
|
||||
{
|
||||
new MenuItem("_License", "See the Application License", () => {
|
||||
MessageBox.Query("License", "chord Copyright (C) 2021 Daryl Ronningen\nThis program comes with ABSOLUTELY NO WARRANTY; for details see section `15` of the GPL license\nThis is free software, and you are welcome to redistribute it under certain conditions; for details see section `2` of the GPL license", "Close");
|
||||
})
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
private Window buildMessageBox(Window serverList, Window chatBox)
|
||||
{
|
||||
return new Window("Message Box")
|
||||
{
|
||||
X = Pos.Right(serverList),
|
||||
Y = Pos.Bottom(chatBox),
|
||||
Width = Dim.Percent(60),
|
||||
Height = Dim.Percent(10)
|
||||
};
|
||||
}
|
||||
|
||||
private Window buildUserList(Window chatBox)
|
||||
{
|
||||
return new Window("User List")
|
||||
{
|
||||
X = Pos.Right(chatBox),
|
||||
Y = 0,
|
||||
Width = Dim.Percent(10),
|
||||
Height = Dim.Fill()
|
||||
};
|
||||
}
|
||||
|
||||
private Window buildServerList()
|
||||
{
|
||||
return new Window("Server List")
|
||||
{
|
||||
X = 0,
|
||||
Y = 0,
|
||||
Width = Dim.Percent(30),
|
||||
Height = Dim.Percent(50)
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Settings
|
||||
{
|
||||
public string Token { get; set; }
|
||||
public bool EnableRichPresence { get; set; }
|
||||
}
|
||||
|
||||
public class GetMessagesResponse
|
||||
{
|
||||
public string content { get; set; }
|
||||
public MessageAuthor author { get; set; }
|
||||
public List<object> embeds { get; set; }
|
||||
public List<MessageAttachments> attachments { get; set; }
|
||||
}
|
||||
|
||||
public class MessageAuthor
|
||||
{
|
||||
public string username { get; set; }
|
||||
public string discriminator { get; set; }
|
||||
}
|
||||
|
||||
public class MessageAttachments
|
||||
{
|
||||
public string url { get; set; }
|
||||
}
|
17
README.md
17
README.md
|
@ -1,17 +0,0 @@
|
|||
# Chord
|
||||
A C# Discord TUI Client
|
||||
|
||||
## Getting Started
|
||||
Add a `config.json` to `~/.config/chord`;
|
||||
|
||||
```json
|
||||
{
|
||||
"Token": "USER/BOT TOKEN HERE"
|
||||
}
|
||||
```
|
||||
|
||||
## Whats Left to do
|
||||
You can keep track on what my current roadmap for the project in [TODO](https://code.relms.dev/Relms/chord/src/branch/master/TODO).
|
||||
|
||||
## Disclaimer
|
||||
I AM NOT responsible if your discord account gets terminated for using this Third Party Client. Using a third party client is against TOS and using this client you can risk getting your account banned.
|
8
TODO
8
TODO
|
@ -1,8 +0,0 @@
|
|||
- Figure out how to bypass discord intents for user list (Currently just using Discord.NET cache)
|
||||
- Message Conversion
|
||||
- Convert message attachments to links (DONE)
|
||||
- Sort Channels by catagories (DONE)
|
||||
- DMs
|
||||
- Loading Screen (DONE)
|
||||
- Hotkeys (Partially Done. Still some weird stuff that happens that idfk why happens)
|
||||
- User roles sorting (DONE)
|
34
chord.csproj
34
chord.csproj
|
@ -1,34 +0,0 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Configurations>Release;Debug</Configurations>
|
||||
<Platforms>x64</Platforms>
|
||||
<IsPackable>false</IsPackable>
|
||||
<AssemblyVersion>0.0.4.0</AssemblyVersion>
|
||||
<FileVersion>0.0.4.0</FileVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
|
||||
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
|
||||
<DebugType>None</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
|
||||
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
|
||||
<DebugType>Full</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<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.Binder" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
|
||||
<PackageReference Include="Restsharp" Version="106.15.0" />
|
||||
<PackageReference Include="Terminal.Gui" Version="1.4.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
22
chord.sln
22
chord.sln
|
@ -1,22 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.30114.105
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "chord", "chord.csproj", "{08889332-CBCB-4FFD-8D45-A3329FC11081}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Release|x64 = Release|x64
|
||||
Debug|x64 = Debug|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{08889332-CBCB-4FFD-8D45-A3329FC11081}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{08889332-CBCB-4FFD-8D45-A3329FC11081}.Debug|x64.Build.0 = Debug|x64
|
||||
{08889332-CBCB-4FFD-8D45-A3329FC11081}.Release|x64.ActiveCfg = Release|x64
|
||||
{08889332-CBCB-4FFD-8D45-A3329FC11081}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
EndGlobal
|
36
package.json
Normal file
36
package.json
Normal file
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"name": "chord",
|
||||
"description": "A third party Discord client for the terminal",
|
||||
"version": "0.1.0",
|
||||
"license": "GPL-3.0-OR-LATER",
|
||||
"homepage": "https://code.relms.dev/Relms/chord/src/branch/master/README.md",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"packageManager": "yarn@3.1.1",
|
||||
"author": {
|
||||
"name": "Daryl Ronningen",
|
||||
"email": "relms@relms.dev"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://code.relms.dev/Relms/chord/issues"
|
||||
},
|
||||
"repository": {
|
||||
"url": "https://code.relms.dev/Relms/chord",
|
||||
"type": "git"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.24.0",
|
||||
"blessed": "^0.1.81",
|
||||
"blessed-contrib": "^4.10.1",
|
||||
"config": "^3.3.6",
|
||||
"discord.js": "https://github.com/Relms12345/discord.js.git#commit=f792a34bf7925cbf74e4c5799b74b66da93b3d5f",
|
||||
"ws": "^8.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/blessed": "^0.1.19",
|
||||
"@types/config": "^0.0.40",
|
||||
"@types/node": "^17.0.4",
|
||||
"@types/ws": "^8.2.2",
|
||||
"typescript": "^4.5.4"
|
||||
}
|
||||
}
|
289
src/index.ts
Normal file
289
src/index.ts
Normal file
|
@ -0,0 +1,289 @@
|
|||
process.env['NODE_CONFIG_DIR'] = process.env['HOME'] + '/.config/chord/';
|
||||
process.env['NODE_CONFIG_ENV'] = 'config';
|
||||
|
||||
import blessed from 'blessed';
|
||||
import blessedContrib from 'blessed-contrib';
|
||||
import config from 'config';
|
||||
import { Client } from 'discord.js';
|
||||
|
||||
let currentSelectedChannel: string = '';
|
||||
let currentSelectedGuild: string = '';
|
||||
|
||||
const screen = blessed.screen({
|
||||
smartCSR: true,
|
||||
title: 'chord',
|
||||
});
|
||||
|
||||
const mainWindow = blessed.box({
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
border: 'line',
|
||||
label: 'chord',
|
||||
mouse: true,
|
||||
});
|
||||
|
||||
const serverList = blessed.box({
|
||||
parent: mainWindow,
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: '30%',
|
||||
height: '49%',
|
||||
border: 'line',
|
||||
label: 'Server List',
|
||||
mouse: true,
|
||||
});
|
||||
|
||||
const channelList = blessed.box({
|
||||
parent: mainWindow,
|
||||
top: '49%',
|
||||
left: 0,
|
||||
width: '30%',
|
||||
height: '49%',
|
||||
border: 'line',
|
||||
label: 'Channel List',
|
||||
mouse: true,
|
||||
});
|
||||
|
||||
const chatBox = blessed.box({
|
||||
parent: mainWindow,
|
||||
top: 0,
|
||||
left: '30%',
|
||||
width: '60%',
|
||||
height: '85%',
|
||||
border: 'line',
|
||||
label: 'Chat Box',
|
||||
mouse: true,
|
||||
});
|
||||
|
||||
const messageBox = blessed.box({
|
||||
parent: mainWindow,
|
||||
top: '85%',
|
||||
left: '30%',
|
||||
width: '60%',
|
||||
height: '13%',
|
||||
border: 'line',
|
||||
label: 'Message Box',
|
||||
mouse: true,
|
||||
});
|
||||
|
||||
const userList = blessed.box({
|
||||
parent: mainWindow,
|
||||
top: 0,
|
||||
left: '90%',
|
||||
width: '9%',
|
||||
height: '98%',
|
||||
border: 'line',
|
||||
label: 'User List',
|
||||
mouse: true,
|
||||
});
|
||||
|
||||
const serverListList = blessed.list({
|
||||
parent: serverList,
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: '98%',
|
||||
height: '96%',
|
||||
keys: true,
|
||||
vi: true,
|
||||
mouse: true,
|
||||
style: {
|
||||
selected: {
|
||||
fg: 'white',
|
||||
bg: 'grey',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const channelListList = blessed.list({
|
||||
parent: channelList,
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: '98%',
|
||||
height: '96%',
|
||||
keys: true,
|
||||
vi: true,
|
||||
mouse: true,
|
||||
style: {
|
||||
selected: {
|
||||
fg: 'white',
|
||||
bg: 'grey',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const chatBoxList = blessed.list({
|
||||
parent: chatBox,
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: '99%',
|
||||
height: '98%',
|
||||
keys: true,
|
||||
vi: true,
|
||||
mouse: true,
|
||||
style: {
|
||||
selected: {
|
||||
fg: 'white',
|
||||
bg: 'grey',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const userListList = blessed.list({
|
||||
parent: userList,
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: '95%',
|
||||
height: '98%',
|
||||
keys: true,
|
||||
vi: true,
|
||||
mouse: true,
|
||||
style: {
|
||||
selected: {
|
||||
fg: 'white',
|
||||
bg: 'grey',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const messageBoxForm = blessed.form({
|
||||
parent: messageBox,
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: '98%',
|
||||
height: '87%',
|
||||
mouse: true,
|
||||
});
|
||||
|
||||
const messageBoxInput = blessed.textarea({
|
||||
parent: messageBoxForm,
|
||||
top: 0,
|
||||
left: 0,
|
||||
width: '90%',
|
||||
height: '87%',
|
||||
keys: true,
|
||||
vi: true,
|
||||
mouse: true,
|
||||
});
|
||||
|
||||
const messageBoxSubmit = blessed.button({
|
||||
parent: messageBoxForm,
|
||||
top: 0,
|
||||
left: '95%',
|
||||
width: '4%',
|
||||
height: '87%',
|
||||
keys: true,
|
||||
vi: true,
|
||||
mouse: true,
|
||||
content: 'Send',
|
||||
});
|
||||
|
||||
screen.append(mainWindow);
|
||||
|
||||
const client = new Client({
|
||||
waitGuildTimeout: 0,
|
||||
intents: 32767,
|
||||
});
|
||||
|
||||
client.on('ready', () => {
|
||||
client.guilds.cache.forEach((val) => {
|
||||
serverListList.addItem(val.name);
|
||||
});
|
||||
|
||||
screen.render();
|
||||
});
|
||||
|
||||
client.on('error', (err) => {
|
||||
throw err;
|
||||
});
|
||||
|
||||
client.login(config.get('token'));
|
||||
|
||||
serverListList.on('select', (item) => {
|
||||
channelListList.clearItems();
|
||||
|
||||
const findGuild = client.guilds.cache.find((val) => val.name === item.content);
|
||||
|
||||
if (findGuild) {
|
||||
currentSelectedGuild = findGuild.id;
|
||||
|
||||
findGuild.channels.cache.forEach((val) => {
|
||||
if (val.type === 'GUILD_TEXT' && val.members.find((val) => val.id === client.user!.id))
|
||||
channelListList.addItem(val.name);
|
||||
});
|
||||
}
|
||||
|
||||
screen.render();
|
||||
});
|
||||
|
||||
channelListList.on('select', async (item) => {
|
||||
chatBoxList.clearItems();
|
||||
|
||||
const findChannel = client.channels.cache.find((val) => val.isText() && val.type === 'GUILD_TEXT' && val.name === item.content);
|
||||
|
||||
if (findChannel) {
|
||||
currentSelectedChannel = findChannel.id;
|
||||
|
||||
if (findChannel.isText()) {
|
||||
const messages = await findChannel.messages.fetch({ limit: 100 });
|
||||
|
||||
messages.reverse().forEach((val) => {
|
||||
const createdTimeStamp = new Date(val.createdTimestamp);
|
||||
|
||||
chatBoxList.addItem(`${createdTimeStamp.toISOString()} (${val.author.username}#${val.author.discriminator}) | ${val.content}`);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
chatBoxList.setScrollPerc(100);
|
||||
chatBoxList.select(100);
|
||||
screen.render();
|
||||
});
|
||||
|
||||
messageBoxSubmit.on('press', async () => {
|
||||
const findChannel = await client.channels.fetch(currentSelectedChannel);
|
||||
|
||||
if (findChannel && findChannel.isText()) {
|
||||
const msg = await findChannel.send(messageBoxInput.value);
|
||||
|
||||
chatBoxList.addItem(`${new Date(msg.createdTimestamp).toISOString()} (${msg.author.username}#${msg.author.discriminator}) | ${msg.content}`);
|
||||
|
||||
chatBoxList.setScrollPerc(100);
|
||||
messageBoxInput.setValue('');
|
||||
}
|
||||
|
||||
screen.render();
|
||||
});
|
||||
|
||||
screen.key('S-q', () => {
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
screen.key('S-s', () => {
|
||||
serverListList.focus();
|
||||
});
|
||||
|
||||
screen.key('S-c', () => {
|
||||
channelListList.focus();
|
||||
});
|
||||
|
||||
screen.key('S-u', () => {
|
||||
userListList.focus();
|
||||
});
|
||||
|
||||
screen.key('S-b', () => {
|
||||
chatBoxList.focus();
|
||||
});
|
||||
|
||||
screen.key('S-m', () => {
|
||||
messageBoxInput.focus();
|
||||
});
|
||||
|
||||
screen.key('S-r', () => {
|
||||
messageBoxSubmit.focus();
|
||||
});
|
||||
|
||||
serverListList.focus();
|
||||
|
||||
screen.render();
|
48
tsconfig.json
Normal file
48
tsconfig.json
Normal file
|
@ -0,0 +1,48 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"declaration": true,
|
||||
"lib": [
|
||||
"ES2021",
|
||||
"DOM"
|
||||
],
|
||||
"module": "CommonJS",
|
||||
"outDir": "dist",
|
||||
"removeComments": false,
|
||||
"target": "ES2021",
|
||||
"alwaysStrict": true,
|
||||
"noImplicitAny": true,
|
||||
"noImplicitThis": true,
|
||||
"strict": true,
|
||||
"strictBindCallApply": true,
|
||||
"strictFunctionTypes": true,
|
||||
"strictNullChecks": true,
|
||||
"strictPropertyInitialization": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"esModuleInterop": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noImplicitReturns": true,
|
||||
"noPropertyAccessFromIndexSignature": true,
|
||||
"noUncheckedIndexedAccess": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"allowUnreachableCode": false,
|
||||
"allowUnusedLabels": false,
|
||||
"disableSizeLimit": true,
|
||||
"explainFiles": false,
|
||||
"extendedDiagnostics": false,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"importsNotUsedAsValues": "error",
|
||||
"listEmittedFiles": false,
|
||||
"listFiles": false,
|
||||
"newLine": "lf",
|
||||
"noEmitOnError": false,
|
||||
"preserveConstEnums": true,
|
||||
"traceResolution": false,
|
||||
"moduleResolution": "Node"
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts"
|
||||
]
|
||||
}
|
890
yarn.lock
Normal file
890
yarn.lock
Normal file
|
@ -0,0 +1,890 @@
|
|||
# This file is generated by running "yarn install" inside your project.
|
||||
# Manual changes might be lost - proceed with caution!
|
||||
|
||||
__metadata:
|
||||
version: 5
|
||||
cacheKey: 8
|
||||
|
||||
"@discordjs/builders@npm:^0.11.0":
|
||||
version: 0.11.0
|
||||
resolution: "@discordjs/builders@npm:0.11.0"
|
||||
dependencies:
|
||||
"@sindresorhus/is": ^4.2.0
|
||||
discord-api-types: ^0.26.0
|
||||
ts-mixer: ^6.0.0
|
||||
tslib: ^2.3.1
|
||||
zod: ^3.11.6
|
||||
checksum: 7a25b59bb52d2e3695bca27946a99cf2de95b7edd5be424ea9f4707a465524be21263e25e532e12438e99f9f55fb98b033885c760aeb96424b8c12f663f50760
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@discordjs/collection@npm:^0.4.0":
|
||||
version: 0.4.0
|
||||
resolution: "@discordjs/collection@npm:0.4.0"
|
||||
checksum: fa8fc4246921f3230eb6c5d6d4dc0caf9dd659fcc903175944edf4fb0a9ed9913fdf164733d3f1e644ef469bc79b0d38a526ee620b92169cb40e79b40b0c716b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sapphire/async-queue@npm:^1.1.9":
|
||||
version: 1.1.9
|
||||
resolution: "@sapphire/async-queue@npm:1.1.9"
|
||||
checksum: 8a4cb79e01948ee9f99f47e9fdfdfd509353d267f9e18bb8fe8e813b5d45f1fb6de08297b4557eb9a76b95bea59abaab67819175238068cc4cbc808d1d183e9d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@sindresorhus/is@npm:^4.2.0":
|
||||
version: 4.2.0
|
||||
resolution: "@sindresorhus/is@npm:4.2.0"
|
||||
checksum: 59040dfb75c2eb6ab76e8c7ac10b7f7f6ba740f0b5ac618a89a8bcdbaf923836a8e998078d59d81f6f13f4b6bbe15bfe1bca962c877edcbe9160d1c100c56fd7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/blessed@npm:^0.1.19":
|
||||
version: 0.1.19
|
||||
resolution: "@types/blessed@npm:0.1.19"
|
||||
dependencies:
|
||||
"@types/node": "*"
|
||||
checksum: 255e6f5ffdfcea15400d01ee468585f04b72d0a263bd1972e9ae236157d24e5e01524591d751b992afe761a67b648bc296633935c6018425593175c7d055775d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/config@npm:^0.0.40":
|
||||
version: 0.0.40
|
||||
resolution: "@types/config@npm:0.0.40"
|
||||
checksum: 94e52288d26895c25c6a00cb553f6a19d71e9edd7ecfe0a3f0689c486f559be6cbf400362f14fa0daac5b12bd30e876b8c6aafc5fbd37580c2c3270464c4af59
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node-fetch@npm:^2.5.12":
|
||||
version: 2.5.12
|
||||
resolution: "@types/node-fetch@npm:2.5.12"
|
||||
dependencies:
|
||||
"@types/node": "*"
|
||||
form-data: ^3.0.0
|
||||
checksum: ad63c85ba6a9477b8e057ec8682257738130d98e8ece4e31141789bd99df9d9147985cc8bc0cb5c8983ed5aa6bb95d46df23d1e055f4ad5cf8b82fc69cf626c7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:*, @types/node@npm:^17.0.4":
|
||||
version: 17.0.4
|
||||
resolution: "@types/node@npm:17.0.4"
|
||||
checksum: 92e6a25fea2314cd34e81962bd07c8b79b92cae04d84a0336a8c49a2b8aa4c34ff8cb428baeac2022daf597809bd3b7987c624b07a91c4d01b6230f82c293190
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/ws@npm:^8.2.2":
|
||||
version: 8.2.2
|
||||
resolution: "@types/ws@npm:8.2.2"
|
||||
dependencies:
|
||||
"@types/node": "*"
|
||||
checksum: 308957864b9a5a0378ac82f1b084fa31b1bbe85106fb0d84ed2b392e4829404f21ab6ab2c1eb782d556e59cd33d57c75ad2d0cedc4b9b9d0ca3b2311bc915578
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"abbrev@npm:1":
|
||||
version: 1.1.1
|
||||
resolution: "abbrev@npm:1.1.1"
|
||||
checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ansi-escapes@npm:^4.3.1":
|
||||
version: 4.3.2
|
||||
resolution: "ansi-escapes@npm:4.3.2"
|
||||
dependencies:
|
||||
type-fest: ^0.21.3
|
||||
checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ansi-regex@npm:^2.0.0":
|
||||
version: 2.1.1
|
||||
resolution: "ansi-regex@npm:2.1.1"
|
||||
checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ansi-regex@npm:^5.0.1":
|
||||
version: 5.0.1
|
||||
resolution: "ansi-regex@npm:5.0.1"
|
||||
checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ansi-styles@npm:^2.2.1":
|
||||
version: 2.2.1
|
||||
resolution: "ansi-styles@npm:2.2.1"
|
||||
checksum: ebc0e00381f2a29000d1dac8466a640ce11943cef3bda3cd0020dc042e31e1058ab59bf6169cd794a54c3a7338a61ebc404b7c91e004092dd20e028c432c9c2c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ansi-styles@npm:^4.1.0":
|
||||
version: 4.3.0
|
||||
resolution: "ansi-styles@npm:4.3.0"
|
||||
dependencies:
|
||||
color-convert: ^2.0.1
|
||||
checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ansi-term@npm:>=0.0.2":
|
||||
version: 0.0.2
|
||||
resolution: "ansi-term@npm:0.0.2"
|
||||
dependencies:
|
||||
x256: ">=0.0.1"
|
||||
checksum: 01123e07bdd8b25dac67ed5c7b374db629966dc57127eaedd708a18cbebab4e42abfb133d372609ae85dc45e2a71e16ea69c96236b61f11a2acff9ead743ba76
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ansicolors@npm:~0.3.2":
|
||||
version: 0.3.2
|
||||
resolution: "ansicolors@npm:0.3.2"
|
||||
checksum: e84fae7ebc27ac96d9dbb57f35f078cd6dde1b7046b0f03f73dcefc9fbb1f2e82e3685d083466aded8faf038f9fa9ebb408d215282bcd7aaa301d5ac3c486815
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"asynckit@npm:^0.4.0":
|
||||
version: 0.4.0
|
||||
resolution: "asynckit@npm:0.4.0"
|
||||
checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"axios@npm:^0.24.0":
|
||||
version: 0.24.0
|
||||
resolution: "axios@npm:0.24.0"
|
||||
dependencies:
|
||||
follow-redirects: ^1.14.4
|
||||
checksum: 468cf496c08a6aadfb7e699bebdac02851e3043d4e7d282350804ea8900e30d368daa6e3cd4ab83b8ddb5a3b1e17a5a21ada13fc9cebd27b74828f47a4236316
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"blessed-contrib@npm:^4.10.1":
|
||||
version: 4.10.1
|
||||
resolution: "blessed-contrib@npm:4.10.1"
|
||||
dependencies:
|
||||
ansi-term: ">=0.0.2"
|
||||
chalk: ^1.1.0
|
||||
drawille-canvas-blessed-contrib: ">=0.1.3"
|
||||
lodash: ~>=4.17.21
|
||||
map-canvas: ">=0.1.5"
|
||||
marked: ^2.1.1
|
||||
marked-terminal: ^4.1.1
|
||||
memory-streams: ^0.1.0
|
||||
memorystream: ^0.3.1
|
||||
picture-tuber: ^1.0.1
|
||||
sparkline: ^0.1.1
|
||||
strip-ansi: ^3.0.0
|
||||
term-canvas: 0.0.5
|
||||
x256: ">=0.0.1"
|
||||
checksum: 26e6c72c30852d91eb4bbcebadfd26a543d987781ec26ef365f4dd8a2a55b120f72e3e477941af83b471d6ca5e2c373371f49ca5f76902d053e7b3f3923e5023
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"blessed@npm:^0.1.81":
|
||||
version: 0.1.81
|
||||
resolution: "blessed@npm:0.1.81"
|
||||
bin:
|
||||
blessed: ./bin/tput.js
|
||||
checksum: a8f96978cc8e3e5ac887c43df8523074ba4352b9a055d8b078c60ae1f9f62837c9eb620e5fc78ccbb005119167234fcf788915a16428c1c397a7fbf9f630b42c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"bresenham@npm:0.0.3":
|
||||
version: 0.0.3
|
||||
resolution: "bresenham@npm:0.0.3"
|
||||
checksum: f40703d57d1587aa1b0923c016c5fa1fcc354c5b49cbb205e613c223b9e09a4dd80cd990c3cc112ae4ff6704195b0255f9d677c2e8b199545f058b396f52706c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"buffers@npm:~0.1.1":
|
||||
version: 0.1.1
|
||||
resolution: "buffers@npm:0.1.1"
|
||||
checksum: ad6f8e483efab39cefd92bdc04edbff6805e4211b002f4d1cfb70c6c472a61cc89fb18c37bcdfdd4ee416ca096e9ff606286698a7d41a18b539bac12fd76d4d5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"cardinal@npm:^2.1.1":
|
||||
version: 2.1.1
|
||||
resolution: "cardinal@npm:2.1.1"
|
||||
dependencies:
|
||||
ansicolors: ~0.3.2
|
||||
redeyed: ~2.1.0
|
||||
bin:
|
||||
cdl: ./bin/cdl.js
|
||||
checksum: e8d4ae46439cf8fed481c0efd267711ee91e199aa7821a9143e784ed94a6495accd01a0b36d84d377e8ee2cc9928a6c9c123b03be761c60b805f2c026b8a99ad
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"chalk@npm:^1.1.0":
|
||||
version: 1.1.3
|
||||
resolution: "chalk@npm:1.1.3"
|
||||
dependencies:
|
||||
ansi-styles: ^2.2.1
|
||||
escape-string-regexp: ^1.0.2
|
||||
has-ansi: ^2.0.0
|
||||
strip-ansi: ^3.0.0
|
||||
supports-color: ^2.0.0
|
||||
checksum: 9d2ea6b98fc2b7878829eec223abcf404622db6c48396a9b9257f6d0ead2acf18231ae368d6a664a83f272b0679158da12e97b5229f794939e555cc574478acd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"chalk@npm:^4.1.0":
|
||||
version: 4.1.2
|
||||
resolution: "chalk@npm:4.1.2"
|
||||
dependencies:
|
||||
ansi-styles: ^4.1.0
|
||||
supports-color: ^7.1.0
|
||||
checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"charm@npm:~0.1.0":
|
||||
version: 0.1.2
|
||||
resolution: "charm@npm:0.1.2"
|
||||
checksum: fe64983d7a87e7dacf225bd1fc10d34554110e128d3f3b8a91cfefb370b92211d0f1f7a9ff43df3ccfcb81d7f91525750b998519ab6b8e3c9dd249a3529ad783
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"chord@workspace:.":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "chord@workspace:."
|
||||
dependencies:
|
||||
"@types/blessed": ^0.1.19
|
||||
"@types/config": ^0.0.40
|
||||
"@types/node": ^17.0.4
|
||||
"@types/ws": ^8.2.2
|
||||
axios: ^0.24.0
|
||||
blessed: ^0.1.81
|
||||
blessed-contrib: ^4.10.1
|
||||
config: ^3.3.6
|
||||
discord.js: "https://github.com/Relms12345/discord.js.git#commit=f792a34bf7925cbf74e4c5799b74b66da93b3d5f"
|
||||
typescript: ^4.5.4
|
||||
ws: ^8.4.0
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"cli-table3@npm:^0.6.0":
|
||||
version: 0.6.0
|
||||
resolution: "cli-table3@npm:0.6.0"
|
||||
dependencies:
|
||||
colors: ^1.1.2
|
||||
object-assign: ^4.1.0
|
||||
string-width: ^4.2.0
|
||||
dependenciesMeta:
|
||||
colors:
|
||||
optional: true
|
||||
checksum: 98682a2d3eef5ad07d34a08f90398d0640004e28ecf8eb59006436f11ed7b4d453db09f46c2ea880618fbd61fee66321b3b3ee1b20276bc708b6baf6f9663d75
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"color-convert@npm:^2.0.1":
|
||||
version: 2.0.1
|
||||
resolution: "color-convert@npm:2.0.1"
|
||||
dependencies:
|
||||
color-name: ~1.1.4
|
||||
checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"color-name@npm:~1.1.4":
|
||||
version: 1.1.4
|
||||
resolution: "color-name@npm:1.1.4"
|
||||
checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"colors@npm:^1.1.2":
|
||||
version: 1.4.0
|
||||
resolution: "colors@npm:1.4.0"
|
||||
checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"combined-stream@npm:^1.0.8":
|
||||
version: 1.0.8
|
||||
resolution: "combined-stream@npm:1.0.8"
|
||||
dependencies:
|
||||
delayed-stream: ~1.0.0
|
||||
checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"config@npm:^3.3.6":
|
||||
version: 3.3.6
|
||||
resolution: "config@npm:3.3.6"
|
||||
dependencies:
|
||||
json5: ^2.1.1
|
||||
checksum: 53684cae0d1c9fa2fe6db41fa85201aa5ab92dcbe7596d63381e7e48f0cb3dea45bee812dc18ee91a3daf887ec0f3c57bf4acc555629ba7608d5a3b932e61c8e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"core-util-is@npm:~1.0.0":
|
||||
version: 1.0.3
|
||||
resolution: "core-util-is@npm:1.0.3"
|
||||
checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"delayed-stream@npm:~1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "delayed-stream@npm:1.0.0"
|
||||
checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"discord-api-types@npm:^0.26.0":
|
||||
version: 0.26.0
|
||||
resolution: "discord-api-types@npm:0.26.0"
|
||||
checksum: 5c2a3f7309fec3830a8da5e98e5260b25304512ae856c770d783492aa4a8c514a64025bb30ceda0c4381bc749db9545c0d7d5573fa0d60bb1718add27c8b4d7d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"discord.js@https://github.com/Relms12345/discord.js.git#commit=f792a34bf7925cbf74e4c5799b74b66da93b3d5f":
|
||||
version: 14.0.0-dev
|
||||
resolution: "discord.js@https://github.com/Relms12345/discord.js.git#commit=f792a34bf7925cbf74e4c5799b74b66da93b3d5f"
|
||||
dependencies:
|
||||
"@discordjs/builders": ^0.11.0
|
||||
"@discordjs/collection": ^0.4.0
|
||||
"@sapphire/async-queue": ^1.1.9
|
||||
"@types/node-fetch": ^2.5.12
|
||||
"@types/ws": ^8.2.2
|
||||
discord-api-types: ^0.26.0
|
||||
form-data: ^4.0.0
|
||||
node-fetch: ^2.6.1
|
||||
ws: ^8.4.0
|
||||
checksum: 1eb73a1f33f1706766112c4011c726b9fc5cd2d2e3655cb245f59f713033238a139c44275ec9f96f7b23d1e9bc38cf466d19277a5fb45526e9ea0fb05cfd823d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"drawille-blessed-contrib@npm:>=0.0.1":
|
||||
version: 1.0.0
|
||||
resolution: "drawille-blessed-contrib@npm:1.0.0"
|
||||
checksum: 824f2c78ea588d8b11ccc302a9855e53182b1d9f9695dc07ffab845e832fbfc3253ca996c5dcc10e671bbed9715f2daaf179ccba8860c8df2b10c4ae83ec2ddc
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"drawille-canvas-blessed-contrib@npm:>=0.0.1, drawille-canvas-blessed-contrib@npm:>=0.1.3":
|
||||
version: 0.1.3
|
||||
resolution: "drawille-canvas-blessed-contrib@npm:0.1.3"
|
||||
dependencies:
|
||||
ansi-term: ">=0.0.2"
|
||||
bresenham: 0.0.3
|
||||
drawille-blessed-contrib: ">=0.0.1"
|
||||
gl-matrix: ^2.1.0
|
||||
x256: ">=0.0.1"
|
||||
checksum: 953416dc624185ed05a63ea2716010236828f964cc862578029d3e16b3a4b14e3018153f802c7b9f596957b307aa3c2ad190f64a00e7ff74f1c4b84d095864a7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"emoji-regex@npm:^8.0.0":
|
||||
version: 8.0.0
|
||||
resolution: "emoji-regex@npm:8.0.0"
|
||||
checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"escape-string-regexp@npm:^1.0.2":
|
||||
version: 1.0.5
|
||||
resolution: "escape-string-regexp@npm:1.0.5"
|
||||
checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"esprima@npm:~4.0.0":
|
||||
version: 4.0.1
|
||||
resolution: "esprima@npm:4.0.1"
|
||||
bin:
|
||||
esparse: ./bin/esparse.js
|
||||
esvalidate: ./bin/esvalidate.js
|
||||
checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"event-stream@npm:~0.9.8":
|
||||
version: 0.9.8
|
||||
resolution: "event-stream@npm:0.9.8"
|
||||
dependencies:
|
||||
optimist: 0.2
|
||||
checksum: 526b7f0365377727357b03b677a55a7177c1a2138121b293d0b864889a67f470d8317d6979993b1a0c79ace1a24b453d0a5763f60c528768bb2437b6010be229
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"follow-redirects@npm:^1.14.4":
|
||||
version: 1.14.6
|
||||
resolution: "follow-redirects@npm:1.14.6"
|
||||
peerDependenciesMeta:
|
||||
debug:
|
||||
optional: true
|
||||
checksum: 7fcdb089a733d2aa39041880790e9f772df009fcd0b243fee7e10acf0e14a8dab5208cf79eb1de35b9cc6033d4dde7f95becadfaa360c50d460b4c730b375e80
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"form-data@npm:^3.0.0":
|
||||
version: 3.0.1
|
||||
resolution: "form-data@npm:3.0.1"
|
||||
dependencies:
|
||||
asynckit: ^0.4.0
|
||||
combined-stream: ^1.0.8
|
||||
mime-types: ^2.1.12
|
||||
checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"form-data@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "form-data@npm:4.0.0"
|
||||
dependencies:
|
||||
asynckit: ^0.4.0
|
||||
combined-stream: ^1.0.8
|
||||
mime-types: ^2.1.12
|
||||
checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"gl-matrix@npm:^2.1.0":
|
||||
version: 2.8.1
|
||||
resolution: "gl-matrix@npm:2.8.1"
|
||||
checksum: 20d13fd428ea3021d625781e025132ff8ec264f4c05310bda9ad859535ab32fb505323486d2d5c51b5f715c2a9d059da588b66e8e2afdafdf1acc4f45629b7ff
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"has-ansi@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "has-ansi@npm:2.0.0"
|
||||
dependencies:
|
||||
ansi-regex: ^2.0.0
|
||||
checksum: 1b51daa0214440db171ff359d0a2d17bc20061164c57e76234f614c91dbd2a79ddd68dfc8ee73629366f7be45a6df5f2ea9de83f52e1ca24433f2cc78c35d8ec
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"has-flag@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "has-flag@npm:4.0.0"
|
||||
checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"here@npm:0.0.2":
|
||||
version: 0.0.2
|
||||
resolution: "here@npm:0.0.2"
|
||||
checksum: 73531438cfe6919a12d350fdaa356d18b8ed6479a4bdeaa05d7fb91dafd9ff52d0c4bd41eb28c92bf27631da1f52f7c7c7a75263600686983f2c4b9d06833d60
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"inherits@npm:~2.0.1":
|
||||
version: 2.0.4
|
||||
resolution: "inherits@npm:2.0.4"
|
||||
checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"is-fullwidth-code-point@npm:^3.0.0":
|
||||
version: 3.0.0
|
||||
resolution: "is-fullwidth-code-point@npm:3.0.0"
|
||||
checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"isarray@npm:0.0.1":
|
||||
version: 0.0.1
|
||||
resolution: "isarray@npm:0.0.1"
|
||||
checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"json5@npm:^2.1.1":
|
||||
version: 2.2.0
|
||||
resolution: "json5@npm:2.2.0"
|
||||
dependencies:
|
||||
minimist: ^1.2.5
|
||||
bin:
|
||||
json5: lib/cli.js
|
||||
checksum: e88fc5274bb58fc99547baa777886b069d2dd96d9cfc4490b305fd16d711dabd5979e35a4f90873cefbeb552e216b041a304fe56702bedba76e19bc7845f208d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash@npm:^4.17.21, lodash@npm:~>=4.17.21":
|
||||
version: 4.17.21
|
||||
resolution: "lodash@npm:4.17.21"
|
||||
checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"map-canvas@npm:>=0.1.5":
|
||||
version: 0.1.5
|
||||
resolution: "map-canvas@npm:0.1.5"
|
||||
dependencies:
|
||||
drawille-canvas-blessed-contrib: ">=0.0.1"
|
||||
xml2js: ^0.4.5
|
||||
checksum: 95f006e722a1de3e7639797db311ca7587d10fb2503c887151ee7d409bd0650b1250af449d2e943cb4444c4a24ccf50f92ccf5babbf7d7b2a99363b7e5d135ac
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"marked-terminal@npm:^4.1.1":
|
||||
version: 4.2.0
|
||||
resolution: "marked-terminal@npm:4.2.0"
|
||||
dependencies:
|
||||
ansi-escapes: ^4.3.1
|
||||
cardinal: ^2.1.1
|
||||
chalk: ^4.1.0
|
||||
cli-table3: ^0.6.0
|
||||
node-emoji: ^1.10.0
|
||||
supports-hyperlinks: ^2.1.0
|
||||
peerDependencies:
|
||||
marked: ^1.0.0 || ^2.0.0
|
||||
checksum: a68a4cfd22b42f990a82e3234c68006ab4d1285a4a9bdd162f597740d9a55275c10c78ca21fa3927a76b2197589fe382e33af9baa2ccb2153812986c15aa73b8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"marked@npm:^2.1.1":
|
||||
version: 2.1.3
|
||||
resolution: "marked@npm:2.1.3"
|
||||
bin:
|
||||
marked: bin/marked
|
||||
checksum: 21a5ecd4941bc760aba21dfd97185853ec3b464cf707ad971e3ddb3aeb2f44d0deeb36b0889932afdb6f734975a994d92f18815dd0fabadbd902bdaff997cc5b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"memory-streams@npm:^0.1.0":
|
||||
version: 0.1.3
|
||||
resolution: "memory-streams@npm:0.1.3"
|
||||
dependencies:
|
||||
readable-stream: ~1.0.2
|
||||
checksum: aebb6dc54c35ff8e7fcbbffc736ae95938d9bb7ed66735b693ed18743fcc6268f64eaa80b2580a49c3c73ddc00cd880d5847f318997affe6d2a46b75365715f8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"memorystream@npm:^0.3.1":
|
||||
version: 0.3.1
|
||||
resolution: "memorystream@npm:0.3.1"
|
||||
checksum: f18b42440d24d09516d01466c06adf797df7873f0d40aa7db02e5fb9ed83074e5e65412d0720901d7069363465f82dc4f8bcb44f0cde271567a61426ce6ca2e9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mime-db@npm:1.51.0":
|
||||
version: 1.51.0
|
||||
resolution: "mime-db@npm:1.51.0"
|
||||
checksum: 613b1ac9d6e725cc24444600b124a7f1ce6c60b1baa654f39a3e260d0995a6dffc5693190217e271af7e2a5612dae19f2a73f3e316707d797a7391165f7ef423
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mime-types@npm:^2.1.12":
|
||||
version: 2.1.34
|
||||
resolution: "mime-types@npm:2.1.34"
|
||||
dependencies:
|
||||
mime-db: 1.51.0
|
||||
checksum: 67013de9e9d6799bde6d669d18785b7e18bcd212e710d3e04a4727f92f67a8ad4e74aee24be28b685adb794944814bde649119b58ee3282ffdbee58f9278d9f3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"minimist@npm:^1.2.5":
|
||||
version: 1.2.5
|
||||
resolution: "minimist@npm:1.2.5"
|
||||
checksum: 86706ce5b36c16bfc35c5fe3dbb01d5acdc9a22f2b6cc810b6680656a1d2c0e44a0159c9a3ba51fb072bb5c203e49e10b51dcd0eec39c481f4c42086719bae52
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"node-emoji@npm:^1.10.0":
|
||||
version: 1.11.0
|
||||
resolution: "node-emoji@npm:1.11.0"
|
||||
dependencies:
|
||||
lodash: ^4.17.21
|
||||
checksum: e8c856c04a1645062112a72e59a98b203505ed5111ff84a3a5f40611afa229b578c7d50f1e6a7f17aa62baeea4a640d2e2f61f63afc05423aa267af10977fb2b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"node-fetch@npm:^2.6.1":
|
||||
version: 2.6.6
|
||||
resolution: "node-fetch@npm:2.6.6"
|
||||
dependencies:
|
||||
whatwg-url: ^5.0.0
|
||||
checksum: ee8290626bdb73629c59722b75dcf4b9b6a67c1ed7eb9102e368479c4a13b56a48c2bb3ad71571e378e98c8b2c64c820e11f9cd39e4b8557dd138ad571ef9a42
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"nopt@npm:~2.1.2":
|
||||
version: 2.1.2
|
||||
resolution: "nopt@npm:2.1.2"
|
||||
dependencies:
|
||||
abbrev: 1
|
||||
bin:
|
||||
nopt: ./bin/nopt.js
|
||||
checksum: eb7bf965c0117d537f1859b5da1d33cf3d48c63fa4c7f95ed1356fa07323ea5938878cf6bd511b7c6240c21a3b3f079066398c1d26dd9e2eb6235d0963013b7f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"object-assign@npm:^4.1.0":
|
||||
version: 4.1.1
|
||||
resolution: "object-assign@npm:4.1.1"
|
||||
checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"optimist@npm:0.2":
|
||||
version: 0.2.8
|
||||
resolution: "optimist@npm:0.2.8"
|
||||
dependencies:
|
||||
wordwrap: ">=0.0.1 <0.1.0"
|
||||
checksum: e43cbf95b9005f38bc6a47eeede5cecbac0617cb15405ca29aa79891d1ef31053936e8b596eaf0e0d5d40c24a57ea810c06b82daddcd3f949311ef4699e62eb3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"optimist@npm:~0.3.4":
|
||||
version: 0.3.7
|
||||
resolution: "optimist@npm:0.3.7"
|
||||
dependencies:
|
||||
wordwrap: ~0.0.2
|
||||
checksum: adc02acb8b76d242e56714b47c8c96916b25a5ac2da7b9f735e1f946a970f266f71d53eff0b61d9582ef948301e94734f03b784fa7c309aed0fe7db403d22046
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"picture-tuber@npm:^1.0.1":
|
||||
version: 1.0.2
|
||||
resolution: "picture-tuber@npm:1.0.2"
|
||||
dependencies:
|
||||
buffers: ~0.1.1
|
||||
charm: ~0.1.0
|
||||
event-stream: ~0.9.8
|
||||
optimist: ~0.3.4
|
||||
png-js: ~0.1.0
|
||||
x256: ~0.0.1
|
||||
bin:
|
||||
picture-tube: bin/tube.js
|
||||
checksum: 309138d032b3f638af27091a526507ad725c64fc2cab3033dca1b9cb0f0ee7c89de3691ebb77198cc70f9b785990d7cb649db06bcd1d9c275861869c6d9b3fea
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"png-js@npm:~0.1.0":
|
||||
version: 0.1.1
|
||||
resolution: "png-js@npm:0.1.1"
|
||||
checksum: 755d025d5e0f02f82f07627a6bcf9c7d2bcdaeb5aa8372953a9cb515a84883b664439931ec1e397eb7d696920cc6c9e70afcedf90d3e889cd9163afab64c71f4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"readable-stream@npm:~1.0.2":
|
||||
version: 1.0.34
|
||||
resolution: "readable-stream@npm:1.0.34"
|
||||
dependencies:
|
||||
core-util-is: ~1.0.0
|
||||
inherits: ~2.0.1
|
||||
isarray: 0.0.1
|
||||
string_decoder: ~0.10.x
|
||||
checksum: 85042c537e4f067daa1448a7e257a201070bfec3dd2706abdbd8ebc7f3418eb4d3ed4b8e5af63e2544d69f88ab09c28d5da3c0b77dc76185fddd189a59863b60
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"redeyed@npm:~2.1.0":
|
||||
version: 2.1.1
|
||||
resolution: "redeyed@npm:2.1.1"
|
||||
dependencies:
|
||||
esprima: ~4.0.0
|
||||
checksum: 39a1426e377727cfb47a0e24e95c1cf78d969fbc388dc1e0fa1e2ef8a8756450cefb8b0c2598f63b85f1a331986fca7604c0db798427a5775a1dbdb9c1291979
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"sax@npm:>=0.6.0":
|
||||
version: 1.2.4
|
||||
resolution: "sax@npm:1.2.4"
|
||||
checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"sparkline@npm:^0.1.1":
|
||||
version: 0.1.2
|
||||
resolution: "sparkline@npm:0.1.2"
|
||||
dependencies:
|
||||
here: 0.0.2
|
||||
nopt: ~2.1.2
|
||||
bin:
|
||||
sparkline: bin/sparkline
|
||||
checksum: 7fab1c94ca2aaa036aa213784df6431a5876cfe5eb9f3442407bc0086aa9e146e89437c39c530d7c408fc0c368b294c135d8c884a716039b53bbb617917f876c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"string-width@npm:^4.2.0":
|
||||
version: 4.2.3
|
||||
resolution: "string-width@npm:4.2.3"
|
||||
dependencies:
|
||||
emoji-regex: ^8.0.0
|
||||
is-fullwidth-code-point: ^3.0.0
|
||||
strip-ansi: ^6.0.1
|
||||
checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"string_decoder@npm:~0.10.x":
|
||||
version: 0.10.31
|
||||
resolution: "string_decoder@npm:0.10.31"
|
||||
checksum: fe00f8e303647e5db919948ccb5ce0da7dea209ab54702894dd0c664edd98e5d4df4b80d6fabf7b9e92b237359d21136c95bf068b2f7760b772ca974ba970202
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"strip-ansi@npm:^3.0.0":
|
||||
version: 3.0.1
|
||||
resolution: "strip-ansi@npm:3.0.1"
|
||||
dependencies:
|
||||
ansi-regex: ^2.0.0
|
||||
checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"strip-ansi@npm:^6.0.1":
|
||||
version: 6.0.1
|
||||
resolution: "strip-ansi@npm:6.0.1"
|
||||
dependencies:
|
||||
ansi-regex: ^5.0.1
|
||||
checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"supports-color@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "supports-color@npm:2.0.0"
|
||||
checksum: 602538c5812b9006404370b5a4b885d3e2a1f6567d314f8b4a41974ffe7d08e525bf92ae0f9c7030e3b4c78e4e34ace55d6a67a74f1571bc205959f5972f88f0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0":
|
||||
version: 7.2.0
|
||||
resolution: "supports-color@npm:7.2.0"
|
||||
dependencies:
|
||||
has-flag: ^4.0.0
|
||||
checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"supports-hyperlinks@npm:^2.1.0":
|
||||
version: 2.2.0
|
||||
resolution: "supports-hyperlinks@npm:2.2.0"
|
||||
dependencies:
|
||||
has-flag: ^4.0.0
|
||||
supports-color: ^7.0.0
|
||||
checksum: aef04fb41f4a67f1bc128f7c3e88a81b6cf2794c800fccf137006efe5bafde281da3e42e72bf9206c2fcf42e6438f37e3a820a389214d0a88613ca1f2d36076a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"term-canvas@npm:0.0.5":
|
||||
version: 0.0.5
|
||||
resolution: "term-canvas@npm:0.0.5"
|
||||
checksum: 36408f75257e8ae8d79c075c04e0b0367a89da5868f8bdc534bef6d4f1f6ca1492bb17a4f9b7c7c9ecfe8a415e3806d27b0be511696a1a99de10c3f9b72ca80c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tr46@npm:~0.0.3":
|
||||
version: 0.0.3
|
||||
resolution: "tr46@npm:0.0.3"
|
||||
checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ts-mixer@npm:^6.0.0":
|
||||
version: 6.0.0
|
||||
resolution: "ts-mixer@npm:6.0.0"
|
||||
checksum: 791a513c9ca318a979928f5265fd6029858fa21595153a9386063c11239a6b1c352db1e277c19f0544d017a67cf78d120a7438b86b2c828b1115eb607538eff8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"tslib@npm:^2.3.1":
|
||||
version: 2.3.1
|
||||
resolution: "tslib@npm:2.3.1"
|
||||
checksum: de17a98d4614481f7fcb5cd53ffc1aaf8654313be0291e1bfaee4b4bb31a20494b7d218ff2e15017883e8ea9626599b3b0e0229c18383ba9dce89da2adf15cb9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"type-fest@npm:^0.21.3":
|
||||
version: 0.21.3
|
||||
resolution: "type-fest@npm:0.21.3"
|
||||
checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript@npm:^4.5.4":
|
||||
version: 4.5.4
|
||||
resolution: "typescript@npm:4.5.4"
|
||||
bin:
|
||||
tsc: bin/tsc
|
||||
tsserver: bin/tsserver
|
||||
checksum: 59f3243f9cd6fe3161e6150ff6bf795fc843b4234a655dbd938a310515e0d61afd1ac942799e7415e4334255e41c2c49b7dd5d9fd38a17acd25a6779ca7e0961
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"typescript@patch:typescript@^4.5.4#~builtin<compat/typescript>":
|
||||
version: 4.5.4
|
||||
resolution: "typescript@patch:typescript@npm%3A4.5.4#~builtin<compat/typescript>::version=4.5.4&hash=493e53"
|
||||
bin:
|
||||
tsc: bin/tsc
|
||||
tsserver: bin/tsserver
|
||||
checksum: 2e488dde7d2c4a2fa2e79cf2470600f8ce81bc0563c276b72df8ff412d74456ae532ba824650ae936ce207440c79720ddcfaa25e3cb4477572b8534fa4e34d49
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"webidl-conversions@npm:^3.0.0":
|
||||
version: 3.0.1
|
||||
resolution: "webidl-conversions@npm:3.0.1"
|
||||
checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"whatwg-url@npm:^5.0.0":
|
||||
version: 5.0.0
|
||||
resolution: "whatwg-url@npm:5.0.0"
|
||||
dependencies:
|
||||
tr46: ~0.0.3
|
||||
webidl-conversions: ^3.0.0
|
||||
checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"wordwrap@npm:>=0.0.1 <0.1.0, wordwrap@npm:~0.0.2":
|
||||
version: 0.0.3
|
||||
resolution: "wordwrap@npm:0.0.3"
|
||||
checksum: dfc2d3512e857ae4b3bc2e8d4e5d2c285c28a4b87cd1d81c977ce9a1a99152d355807e046851a3d61148f39d877fbb889352e07b65a9cbdd2256aa928e159026
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ws@npm:^8.4.0":
|
||||
version: 8.4.0
|
||||
resolution: "ws@npm:8.4.0"
|
||||
peerDependencies:
|
||||
bufferutil: ^4.0.1
|
||||
utf-8-validate: ^5.0.2
|
||||
peerDependenciesMeta:
|
||||
bufferutil:
|
||||
optional: true
|
||||
utf-8-validate:
|
||||
optional: true
|
||||
checksum: 5e37ccf0ecb8d8019d88b07af079e8f74248b688ad3109ab57cd5e1c9a7392545f572914d0c27f25e8b83a6cfc09a89ac151c556ff4fae26d6f824077e4f8239
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"x256@npm:>=0.0.1, x256@npm:~0.0.1":
|
||||
version: 0.0.2
|
||||
resolution: "x256@npm:0.0.2"
|
||||
checksum: 891a67c4f946f6aa95902e8ebbdafd54ab8fb5851b96fb7b303206a0400cad9e8ea4bc920ef91e98ec7e3af9c1cd8cc6fa205f9a0f0f4e619dcd82f1c1e38447
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"xml2js@npm:^0.4.5":
|
||||
version: 0.4.23
|
||||
resolution: "xml2js@npm:0.4.23"
|
||||
dependencies:
|
||||
sax: ">=0.6.0"
|
||||
xmlbuilder: ~11.0.0
|
||||
checksum: ca0cf2dfbf6deeaae878a891c8fbc0db6fd04398087084edf143cdc83d0509ad0fe199b890f62f39c4415cf60268a27a6aed0d343f0658f8779bd7add690fa98
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"xmlbuilder@npm:~11.0.0":
|
||||
version: 11.0.1
|
||||
resolution: "xmlbuilder@npm:11.0.1"
|
||||
checksum: 7152695e16f1a9976658215abab27e55d08b1b97bca901d58b048d2b6e106b5af31efccbdecf9b07af37c8377d8e7e821b494af10b3a68b0ff4ae60331b415b0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"zod@npm:^3.11.6":
|
||||
version: 3.11.6
|
||||
resolution: "zod@npm:3.11.6"
|
||||
checksum: 044ac416450f179a0c88240f27849d2886c777cebade42df10e5f04125b0265cec82d9bd741a7dcb11796b2ea88b32c86be7d36932a4bed6af57002560359db1
|
||||
languageName: node
|
||||
linkType: hard
|
Reference in a new issue