Cross server almost done, need owner-only permission check
This commit is contained in:
		| @@ -1,111 +1,103 @@ | ||||
| //using Discord; | ||||
| //using Discord.Commands; | ||||
| //using NadekoBot.Classes; | ||||
| //using NadekoBot.Modules.Permissions.Classes; | ||||
| //using System; | ||||
| //using System.Collections.Concurrent; | ||||
| //using System.Collections.Generic; | ||||
| //using System.Linq; | ||||
| using Discord; | ||||
| using Discord.Commands; | ||||
| using Discord.WebSocket; | ||||
| using NadekoBot.Attributes; | ||||
| using NadekoBot.Extensions; | ||||
| using System; | ||||
| using System.Collections.Concurrent; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| ////todo DB | ||||
| //namespace NadekoBot.Modules.Administration | ||||
| //{ | ||||
| //    class CrossServerTextChannel : DiscordCommand | ||||
| //    { | ||||
| //        public CrossServerTextChannel(DiscordModule module) : base(module) | ||||
| //        { | ||||
| //            NadekoBot.Client.MessageReceived += async (s, e) => | ||||
| //            { | ||||
| //                try | ||||
| //                { | ||||
| //                    if (umsg.Author.Id == NadekoBot.Client.CurrentUser.Id) return; | ||||
| //                    foreach (var subscriber in Subscribers) | ||||
| //                    { | ||||
| //                        var set = subscriber.Value; | ||||
| //                        if (!set.Contains(e.Channel)) | ||||
| //                            continue; | ||||
| //                        foreach (var chan in set.Except(new[] { e.Channel })) | ||||
| //                        { | ||||
| //                            await chan.SendMessageAsync(GetText(e.Server, e.Channel, umsg.Author, e.Message)).ConfigureAwait(false); | ||||
| //                        } | ||||
| //                    } | ||||
| //                } | ||||
| //                catch { } | ||||
| //            }; | ||||
| //            NadekoBot.Client.MessageUpdated += async (s, e) => | ||||
| //            { | ||||
| //                try | ||||
| //                { | ||||
| //                    if (e.After?.User?.Id == null || e.After.User.Id == NadekoBot.Client.CurrentUser.Id) return; | ||||
| //                    foreach (var subscriber in Subscribers) | ||||
| //                    { | ||||
| //                        var set = subscriber.Value; | ||||
| //                        if (!set.Contains(e.Channel)) | ||||
| //                            continue; | ||||
| //                        foreach (var chan in set.Except(new[] { e.Channel })) | ||||
| //                        { | ||||
| //                            var msg = chan.Messages | ||||
| //                                .FirstOrDefault(m => | ||||
| //                                    m.RawText == GetText(e.Server, e.Channel, umsg.Author, e.Before)); | ||||
| //                            if (msg != default(Message)) | ||||
| //                                await msg.Edit(GetText(e.Server, e.Channel, umsg.Author, e.After)).ConfigureAwait(false); | ||||
| //                        } | ||||
| //                    } | ||||
| namespace NadekoBot.Modules.Administration | ||||
| { | ||||
|     public partial class Administration | ||||
|     { | ||||
|         [Group] | ||||
|         public class CrossServerTextChannel | ||||
|         { | ||||
|             public CrossServerTextChannel() | ||||
|             { | ||||
|                 NadekoBot.Client.MessageReceived += (imsg) => | ||||
|                 { | ||||
|                     var msg = imsg as IUserMessage; | ||||
|                     if (msg == null) | ||||
|                         return Task.CompletedTask; | ||||
|  | ||||
| //                } | ||||
| //                catch { } | ||||
| //            }; | ||||
| //        } | ||||
|                     var channel = imsg.Channel as ITextChannel; | ||||
|                     if (channel == null) | ||||
|                         return Task.CompletedTask; | ||||
|  | ||||
| //        private string GetText(Server server, Channel channel, User user, Message message) => | ||||
| //            $"**{server.Name} | {channel.Name}** `{user.Name}`: " + message.RawText; | ||||
|                     Task.Run(async () => | ||||
|                     { | ||||
|                         try | ||||
|                         { | ||||
|                             if (msg.Author.Id == NadekoBot.Client.GetCurrentUser().Id) return; | ||||
|                             foreach (var subscriber in Subscribers) | ||||
|                             { | ||||
|                                 var set = subscriber.Value; | ||||
|                                 if (!set.Contains(msg.Channel)) | ||||
|                                     continue; | ||||
|                                 foreach (var chan in set.Except(new[] { channel })) | ||||
|                                 { | ||||
|                                     await chan.SendMessageAsync(GetText(channel.Guild, channel, (IGuildUser)msg.Author, msg)).ConfigureAwait(false); | ||||
|                                 } | ||||
|                             } | ||||
|                         } | ||||
|                         catch { } | ||||
|                     }); | ||||
|  | ||||
| //        public static readonly ConcurrentDictionary<int, HashSet<Channel>> Subscribers = new ConcurrentDictionary<int, HashSet<Channel>>(); | ||||
|                     return Task.CompletedTask; | ||||
|                 }; | ||||
|             } | ||||
|  | ||||
| //        internal override void Init(CommandGroupBuilder cgb) | ||||
| //        { | ||||
| //            cgb.CreateCommand(Module.Prefix + "scsc") | ||||
| //                .Description("Starts an instance of cross server channel. You will get a token as a DM " + | ||||
| //                             $"that other people will use to tune in to the same instance. **Bot Owner Only.** | `{Prefix}scsc`") | ||||
| //                .AddCheck(SimpleCheckers.OwnerOnly()) | ||||
| //                .Do(async e => | ||||
| //                { | ||||
| //                    var token = new Random().Next(); | ||||
| //                    var set = new HashSet<Channel>(); | ||||
| //                    if (Subscribers.TryAdd(token, set)) | ||||
| //                    { | ||||
| //                        set.Add(e.Channel); | ||||
| //                        await umsg.Author.SendMessageAsync("This is your CSC token:" + token.ToString()).ConfigureAwait(false); | ||||
| //                    } | ||||
| //                }); | ||||
|             private string GetText(IGuild server, ITextChannel channel, IGuildUser user, IUserMessage message) => | ||||
|                 $"**{server.Name} | {channel.Name}** `{user.Username}`: " + message.Content; | ||||
|  | ||||
| //            cgb.CreateCommand(Module.Prefix + "jcsc") | ||||
| //                .Description($"Joins current channel to an instance of cross server channel using the token. **Needs Manage Server Permissions.**| `{Prefix}jcsc`") | ||||
| //                .Parameter("token") | ||||
| //                .AddCheck(SimpleCheckers.ManageServer()) | ||||
| //                .Do(async e => | ||||
| //                { | ||||
| //                    int token; | ||||
| //                    if (!int.TryParse(token, out token)) | ||||
| //                        return; | ||||
| //                    HashSet<Channel> set; | ||||
| //                    if (!Subscribers.TryGetValue(token, out set)) | ||||
| //                        return; | ||||
| //                    set.Add(e.Channel); | ||||
| //                    await channel.SendMessageAsync(":ok:").ConfigureAwait(false); | ||||
| //                }); | ||||
|             public static readonly ConcurrentDictionary<int, HashSet<ITextChannel>> Subscribers = new ConcurrentDictionary<int, HashSet<ITextChannel>>(); | ||||
|  | ||||
| //            cgb.CreateCommand(Module.Prefix + "lcsc") | ||||
| //                .Description($"Leaves Cross server channel instance from this channel. **Needs Manage Server Permissions.**| `{Prefix}lcsc`") | ||||
| //                .AddCheck(SimpleCheckers.ManageServer()) | ||||
| //                .Do(async e => | ||||
| //                { | ||||
| //                    foreach (var subscriber in Subscribers) | ||||
| //                    { | ||||
| //                        subscriber.Value.Remove(e.Channel); | ||||
| //                    } | ||||
| //                    await channel.SendMessageAsync(":ok:").ConfigureAwait(false); | ||||
| //                }); | ||||
| //        } | ||||
| //    } | ||||
| //} | ||||
|             //todo owner only | ||||
|             [LocalizedCommand, LocalizedDescription, LocalizedSummary] | ||||
|             [RequireContext(ContextType.Guild)] | ||||
|             public async Task Scsc(IUserMessage msg) | ||||
|             { | ||||
|                 var channel = (ITextChannel)msg.Channel; | ||||
|                 var token = new Random().Next(); | ||||
|                 var set = new HashSet<ITextChannel>(); | ||||
|                 if (Subscribers.TryAdd(token, set)) | ||||
|                 { | ||||
|                     set.Add(channel); | ||||
|                     await ((IGuildUser)msg.Author).SendMessageAsync("This is your CSC token:" + token.ToString()).ConfigureAwait(false); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             [LocalizedCommand, LocalizedDescription, LocalizedSummary] | ||||
|             [RequireContext(ContextType.Guild)] | ||||
|             [RequirePermission(GuildPermission.ManageGuild)] | ||||
|             public async Task Jcsc(IUserMessage imsg, int token) | ||||
|             { | ||||
|                 var channel = (ITextChannel)imsg.Channel; | ||||
|  | ||||
|                 HashSet<ITextChannel> set; | ||||
|                 if (!Subscribers.TryGetValue(token, out set)) | ||||
|                     return; | ||||
|                 set.Add(channel); | ||||
|                 await channel.SendMessageAsync(":ok:").ConfigureAwait(false); | ||||
|             } | ||||
|  | ||||
|             [LocalizedCommand, LocalizedDescription, LocalizedSummary] | ||||
|             [RequireContext(ContextType.Guild)] | ||||
|             [RequirePermission(GuildPermission.ManageGuild)] | ||||
|             public async Task cmd(IUserMessage imsg) | ||||
|             { | ||||
|                 var channel = (ITextChannel)imsg.Channel; | ||||
|  | ||||
|                 foreach (var subscriber in Subscribers) | ||||
|                 { | ||||
|                     subscriber.Value.Remove(channel); | ||||
|                 } | ||||
|                 await channel.SendMessageAsync(":ok:").ConfigureAwait(false); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										20
									
								
								src/NadekoBot/_Models/JSONModels/AnimeResult.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/NadekoBot/_Models/JSONModels/AnimeResult.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| namespace NadekoBot.Classes.JSONModels | ||||
| { | ||||
|     public class AnimeResult | ||||
|     { | ||||
|         public int id; | ||||
|         public string airing_status; | ||||
|         public string title_english; | ||||
|         public int total_episodes; | ||||
|         public string description; | ||||
|         public string image_url_lge; | ||||
|  | ||||
|         public override string ToString() => | ||||
|             "`Title:` **" + title_english + | ||||
|             "**\n`Status:` " + airing_status + | ||||
|             "\n`Episodes:` " + total_episodes + | ||||
|             "\n`Link:` http://anilist.co/anime/" + id + | ||||
|             "\n`Synopsis:` " + description.Substring(0, description.Length > 500 ? 500 : description.Length) + "..." + | ||||
|             "\n`img:` " + image_url_lge; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user