diff options
Diffstat (limited to 'Jenny/Commands/PatCommand.cs')
-rw-r--r-- | Jenny/Commands/PatCommand.cs | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/Jenny/Commands/PatCommand.cs b/Jenny/Commands/PatCommand.cs new file mode 100644 index 0000000..efceaa4 --- /dev/null +++ b/Jenny/Commands/PatCommand.cs @@ -0,0 +1,164 @@ +using System.Text; +using LibMatrix.EventTypes.Spec.State; +using LibMatrix.Helpers; +using LibMatrix.Utilities.Bot.Interfaces; + +namespace Jenny.Commands; + +public class PatCommand : ICommand { + public string Name { get; } = "pat"; + public string[]? Aliases { get; } = [ "patpat", "patpatpat" ]; + public string Description { get; } + public bool Unlisted { get; } = true; + + public async Task Invoke(CommandContext ctx) { + int count = 1; + if (ctx.Args is { Length: 1 }) + int.TryParse(ctx.Args[0], out count); + + var selfName = + (await ctx.Room.GetStateAsync<RoomMemberEventContent>(RoomMemberEventContent.EventId, ctx.Homeserver.UserId))?.DisplayName + ?? (await ctx.Homeserver.GetProfileAsync(ctx.Homeserver.UserId)).DisplayName + ?? ctx.Homeserver.WhoAmI.UserId; + + var remoteName = + ctx.MessageEvent.Sender == null + ? null + : (await ctx.Room.GetStateAsync<RoomMemberEventContent>(RoomMemberEventContent.EventId, ctx.MessageEvent.Sender))?.DisplayName + ?? (await ctx.Homeserver.GetProfileAsync(ctx.MessageEvent.Sender)).DisplayName + ?? ctx.MessageEvent.Sender; + + var msb = new MessageBuilder("m.emote"); + var pat = new StringBuilder(); + var msg = $"snuggles {remoteName}"; + + Console.WriteLine(pat.ToString()); + // msb.WithHtmlTag("code", await GenerateSkyboxAroundString(msg, ctx)); + msb.WithBody(msg); + + await ctx.Room.SendMessageEventAsync(msb.Build()); + Console.WriteLine(msb.Build().FormattedBody); + + } + +#region old stuff + // TODO: implement: + // var selfName = + // (await ctx.Room.GetStateAsync<RoomMemberEventContent>(RoomMemberEventContent.EventId, ctx.Homeserver.UserId))?.DisplayName + // ?? (await ctx.Homeserver.GetProfileAsync(ctx.Homeserver.UserId)).DisplayName + // ?? ctx.Homeserver.WhoAmI.UserId; + // + // var remoteName = + // ctx.MessageEvent.Sender == null + // ? null + // : (await ctx.Room.GetStateAsync<RoomMemberEventContent>(RoomMemberEventContent.EventId, ctx.MessageEvent.Sender))?.DisplayName + // ?? (await ctx.Homeserver.GetProfileAsync(ctx.MessageEvent.Sender)).DisplayName + // ?? ctx.MessageEvent.Sender; + + // var msb = new MessageBuilder(); + // var pat = new StringBuilder(); + // var msg = $"{selfName} snuggles {remoteName}"; + + // Console.WriteLine(pat.ToString()); + // msb.WithHtmlTag("code", await GenerateSkyboxAroundString(msg, ctx)); + // Console.WriteLine(msb.Build().FormattedBody); +//} + + // + // + // private class CharacterWeight { + // public float Width { get; set; } + // public float Density { get; set; } + // } + // + // private Dictionary<char, CharacterWeight> starrySkyCharacters = new Dictionary<char, CharacterWeight> { + // { ' ', new CharacterWeight { Width = 0.5f, Density = 0.1f } }, // Space has the lowest density and width + // { '.', new CharacterWeight { Width = 0.2f, Density = 0.2f } }, // Dot has low density but small width + // { '+', new CharacterWeight { Width = 0.6f, Density = 0.3f } }, // Plus sign has medium density and width + // { '*', new CharacterWeight { Width = 0.7f, Density = 0.7f } }, // Asterisk has high density but medium width + // + // { '¨', new CharacterWeight { Width = 0.3f, Density = 0.2f } }, + // { '˜', new CharacterWeight { Width = 0.4f, Density = 0.3f } }, + // { 'ˆ', new CharacterWeight { Width = 0.5f, Density = 0.4f } }, + // { '”', new CharacterWeight { Width = 0.6f, Density = 0.5f } }, + // { '⍣', new CharacterWeight { Width = 0.8f, Density = 0.7f } }, + // { '~', new CharacterWeight { Width = 0.9f, Density = 0.8f } }, + // { '⊹', new CharacterWeight { Width = 1.2f, Density = 1.1f } }, + // { '٭', new CharacterWeight { Width = 1.3f, Density = 1.2f } }, + // { '„', new CharacterWeight { Width = 1.4f, Density = 1.3f } }, + // { '¸', new CharacterWeight { Width = 1.5f, Density = 1.4f } }, + // { '¤', new CharacterWeight { Width = 1.9f, Density = 1.8f } }, + // { '✬', new CharacterWeight { Width = 2.1f, Density = 2.0f } }, + // { '°', new CharacterWeight { Width = 0.6f, Density = 0.35f } }, + // { '•', new CharacterWeight { Width = 0.6f, Density = 0.4f } }, + // { '✡', new CharacterWeight { Width = 2.0f, Density = 4.0f } }, + // { '#', new CharacterWeight { Width = 1.0f, Density = 1.0f } }, + // }; + // + // private Dictionary<char, CharacterWeight> characterWeights = new Dictionary<char, CharacterWeight> { + // { 'a', new() { Density = 1, Width = 1 } } + // }; + // + // private async Task<string> GenerateSkyboxAroundString(string str, CommandContext ctx) { + // var sb = new StringBuilder(); + // int scale = 32; + // var outerTopBottomBorder = 4; + // var outerLeftRightBorder = 2; + // var innerTopBottomBorder = 1; + // var innerLeftRightBorder = 2; + // + // var innerBorder = 2; + // + // var width = str.Length + outerLeftRightBorder * 2 + innerLeftRightBorder * 2; + // var height = outerTopBottomBorder * 2 + innerTopBottomBorder * 2 + 1; + // var skybox = new char[height, width]; + // var bigNoise = GenerateHeightMap(2000, 1000); + // + // // await ctx.Room.SendMessageEventAsync(new RoomMessageEventContent("m.image", "heightmap.png") { + // // Url = await Float2DArrayToMxc(noise, ctx), + // // FileInfo = new() { + // // Width = noise.GetLength(1), + // // Height = noise.GetLength(0) + // // } + // // }); + // // + // // //fill skybox with characters according to gradient noise + // // for (var i = 0; i < height; i++) { + // // for (var j = 0; j < width; j++) { + // // var c = ' '; + // // var shuffled = Random.Shared.GetItems(starrySkyCharacters.ToArray(), starrySkyCharacters.Count); + // // var cellWeight = noise[i, j]; + // // var item = starrySkyCharacters.OrderByDescending(x => x.Value.Density).FirstOrDefault(x => x.Value.Density <= cellWeight); + // // if (item.Value != null) { + // // c = item.Key; + // // } + // // + // // // foreach (var (key, value) in starrySkyCharacters) { + // // // var diff = Math.Abs(noise[i, j] - value.Density); + // // // if (diff < min) { + // // // min = diff; + // // // c = key; + // // // } + // // // } + // // + // // skybox[i, j] = c; + // // } + // // } + // // + // // for (var i = 0; i < str.Length; i++) { + // // skybox[outerTopBottomBorder + innerTopBottomBorder, i + outerLeftRightBorder + innerLeftRightBorder] = str[i]; + // // } + // // + // // for (var i = 0; i < height; i++) { + // // for (var j = 0; j < width; j++) { + // // sb.Append(skybox[i, j]); + // // } + // // + // // sb.AppendLine(); + // // } + // + // return sb.ToString(); + // } + +#endregion +} \ No newline at end of file |