diff --git a/Program.cs b/Program.cs index 9c9c7f1..4839727 100644 --- a/Program.cs +++ b/Program.cs @@ -19,7 +19,7 @@ namespace silverworker_discord IConfigurationRoot config = new ConfigurationBuilder() .AddJsonFile("appsettings.json", true, true) .Build(); - + private ISocketMessageChannel botChatterChannel = null; private ISocketMessageChannel announcementChannel = null; @@ -40,14 +40,15 @@ namespace silverworker_discord await _client.StartAsync(); - _client.Ready += () => Task.Run(() =>{ + _client.Ready += () => Task.Run(() => + { Console.WriteLine("Bot is connected! going to sign up for message received and user joined in client ready"); botChatterChannel = _client.GetChannel(ulong.Parse(config["botChatterChannel"])) as ISocketMessageChannel; announcementChannel = _client.GetChannel(ulong.Parse(config["announcementChannel"])) as ISocketMessageChannel; _client.MessageReceived += MessageReceived; _client.UserJoined += UserJoined; - }); + }); // Block this task until the program is closed. await Task.Delay(-1); } @@ -60,29 +61,30 @@ namespace silverworker_discord Console.WriteLine($"{message.Channel}, {message.Content} (message id: {message.Id})"); - if(message.Author.IsWebhook) + if (message.Author.IsWebhook) { - if(message.Author.Username == "greasemonkey reward watcher") + if (message.Author.Username == "greasemonkey reward watcher") { Console.WriteLine("yep"); var redemptionData = message.Content.Split("\n")[1].Substring("data: ".Length); - if(message.Content.StartsWith("type: reward-request")) + if (message.Content.StartsWith("type: reward-request")) { var components = redemptionData.Split("•"); Console.WriteLine($"{components.Length} components:"); var rewardName = components[0].Trim(); var redeemer = components[1].Trim(); var textData = ""; - if(components[1].Contains(":")) + if (components[1].Contains(":")) { redeemer = components[1].Substring(0, components[1].IndexOf(":")).Trim(); textData = components[1].Substring(components[1].IndexOf(":")).Trim(); } Console.WriteLine($"user: {redeemer} redeems {rewardName}, text data? {textData}"); - + var redemptionSerialized = Encoding.ASCII.GetBytes( - JsonConvert.SerializeObject(new { + JsonConvert.SerializeObject(new + { redeemer = redeemer, rewardName = rewardName, textData = textData @@ -91,7 +93,7 @@ namespace silverworker_discord wr.Method = "POST"; wr.ContentType = "application/json"; wr.ContentLength = redemptionSerialized.Length; - using(var postStream = wr.GetRequestStream()) + using (var postStream = wr.GetRequestStream()) { postStream.Write(redemptionSerialized); } @@ -101,10 +103,9 @@ namespace silverworker_discord } else { - if (message.Channel.Id == botChatterChannel.Id) { - if(message.Attachments?.Count > 0) + if (message.Attachments?.Count > 0) { Console.WriteLine(message.Attachments.Count); foreach (var att in message.Attachments) @@ -114,13 +115,42 @@ namespace silverworker_discord } } } + else + { + //any channel, from a user + var wordLikes = message.Content.Split(' ', StringSplitOptions.TrimEntries); + Console.WriteLine($"{wordLikes.Count()} word-like things"); + var links = wordLikes?.Where(wl => Uri.IsWellFormedUriString(wl, UriKind.Absolute)).Select(wl => new Uri(wl)); + if (links != null && links.Count() > 0) + { + foreach (var link in links) + { + if (link.Host == "vm.tiktok.com") + { + detiktokify(link, message.Channel); + } + } + } + } } } + private async void detiktokify(Uri link, ISocketMessageChannel channel) + { + var ytdl = new YoutubeDLSharp.YoutubeDL(); + ytdl.YoutubeDLPath = config["ytdl"]; + ytdl.FFmpegPath = "ffmpeg"; + ytdl.OutputFolder = "./"; + var res = await ytdl.RunVideoDownload(link.ToString()); + string path = res.Data; + await channel.SendFileAsync(path); + File.Delete(path); + } private Task UserJoined(SocketGuildUser arg) { Console.WriteLine($"user joined: {arg.Nickname}. Guid: {arg.Guild.Id}. Channel: {arg.Guild.DefaultChannel}"); var abbreviatedNickname = arg.Nickname; - if(arg.Nickname.Length > 3){ + if (arg.Nickname.Length > 3) + { abbreviatedNickname = arg.Nickname.Substring(0, arg.Nickname.Length / 3); } Console.WriteLine($"imma call him {abbreviatedNickname}"); diff --git a/appsettings.example.json b/appsettings.example.json index 2609da0..6cb7a89 100644 --- a/appsettings.example.json +++ b/appsettings.example.json @@ -1,5 +1,6 @@ { "token": "59 chars", "botChatterChannel": 0, - "announcementChannel": 0 + "announcementChannel": 0, + "ytdl": "youtube-dl" } \ No newline at end of file diff --git a/silverworker-discord.csproj b/silverworker-discord.csproj index a3a3894..9b37191 100644 --- a/silverworker-discord.csproj +++ b/silverworker-discord.csproj @@ -11,6 +11,7 @@ +