Initial commit
This commit is contained in:
commit
79e7cffb4e
49 changed files with 6399 additions and 0 deletions
58
Commands/AutocompleteProviders.cs
Normal file
58
Commands/AutocompleteProviders.cs
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using DisCatSharp.ApplicationCommands.Attributes;
|
||||
using DisCatSharp.ApplicationCommands.Context;
|
||||
|
||||
namespace ProjectMakoto.Plugins.Music;
|
||||
|
||||
public class AutocompleteProviders
|
||||
{
|
||||
public sealed class SongQueueAutocompleteProvider : IAutocompleteProvider
|
||||
{
|
||||
public async Task<IEnumerable<DiscordApplicationCommandAutocompleteChoice>> Provider(AutocompleteContext ctx)
|
||||
{
|
||||
try
|
||||
{
|
||||
if ((ctx.Member?.VoiceState?.Channel?.Id ?? 0) != ((await ctx.Client.CurrentUser.ConvertToMember(ctx.Guild)).VoiceState?.Channel?.Id ?? 1))
|
||||
return new List<DiscordApplicationCommandAutocompleteChoice>().AsEnumerable();
|
||||
|
||||
var Queue = MusicPlugin.Plugin.Guilds![ctx.Guild.Id].SongQueue
|
||||
.Where(x => x.VideoTitle.StartsWith(ctx.FocusedOption.Value.ToString(), StringComparison.InvariantCultureIgnoreCase)).Take(25);
|
||||
|
||||
var options = Queue.Select(x => new DiscordApplicationCommandAutocompleteChoice(x.VideoTitle, x.VideoTitle)).ToList();
|
||||
return options.AsEnumerable();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MusicPlugin.Plugin._logger.LogError(ex, "Failed to provide autocomplete for song queue");
|
||||
return new List<DiscordApplicationCommandAutocompleteChoice>().AsEnumerable();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class PlaylistsAutoCompleteProvider : IAutocompleteProvider
|
||||
{
|
||||
public async Task<IEnumerable<DiscordApplicationCommandAutocompleteChoice>> Provider(AutocompleteContext ctx)
|
||||
{
|
||||
var CommandKey = ((Entities.Translations)MusicPlugin.Plugin!.Translations).Commands.Music;
|
||||
|
||||
try
|
||||
{
|
||||
var bot = ((Bot)ctx.Services.GetService(typeof(Bot)));
|
||||
var Queue = MusicPlugin.Plugin.Users[ctx.User.Id].Playlists
|
||||
.Where(x => x.PlaylistName.Contains(ctx.FocusedOption.Value.ToString(), StringComparison.InvariantCultureIgnoreCase)).Take(25);
|
||||
|
||||
var options = Queue.Select(x => new DiscordApplicationCommandAutocompleteChoice($"{x.PlaylistName} ({x.List.Length} {CommandKey.Playlists.Tracks.Get(bot.Users[ctx.User.Id]).Build()})", x.PlaylistId)).ToList();
|
||||
return options.AsEnumerable();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MusicPlugin.Plugin._logger.LogError(ex, "Failed to provide autocomplete for playlists");
|
||||
return new List<DiscordApplicationCommandAutocompleteChoice>().AsEnumerable();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue