woops
This commit is contained in:
parent
a21a66f3c1
commit
8578f46ecf
89
NadekoBot/Commands/CrossServerTextChannel.cs
Normal file
89
NadekoBot/Commands/CrossServerTextChannel.cs
Normal file
@ -0,0 +1,89 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
using NadekoBot.Classes.Permissions;
|
||||
using NadekoBot.Modules;
|
||||
|
||||
namespace NadekoBot.Commands {
|
||||
class CrossServerTextChannel : DiscordCommand {
|
||||
public CrossServerTextChannel(DiscordModule module) : base(module) {
|
||||
try {
|
||||
NadekoBot.Client.MessageReceived += async (s, e) => {
|
||||
if (e.Message.User.Id == NadekoBot.Creds.BotId) 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.SendMessage(GetText(e.Server, e.Channel, e.User, e.Message));
|
||||
}
|
||||
}
|
||||
};
|
||||
NadekoBot.Client.MessageUpdated += async (s, e) => {
|
||||
if (e.After.User.Id == NadekoBot.Creds.BotId) 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, e.User, e.Before));
|
||||
if (msg != default(Message))
|
||||
await msg.Edit(GetText(e.Server, e.Channel, e.User, e.After));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
} catch { }
|
||||
}
|
||||
|
||||
private string GetText(Server server, Channel channel, User user, Message message) =>
|
||||
$"**{server.Name} | {channel.Name}** `{user.Name}`: " + message.RawText;
|
||||
|
||||
public static readonly ConcurrentDictionary<int, HashSet<Channel>> Subscribers = new ConcurrentDictionary<int, HashSet<Channel>>();
|
||||
|
||||
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")
|
||||
.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 e.User.SendMessage("This is your CSC token:" + token.ToString());
|
||||
}
|
||||
});
|
||||
|
||||
cgb.CreateCommand(Module.Prefix + "jcsc")
|
||||
.Description("Joins current channel to an instance of cross server channel using the token.")
|
||||
.Parameter("token")
|
||||
.AddCheck(SimpleCheckers.ManageServer())
|
||||
.Do(async e => {
|
||||
int token;
|
||||
if (!int.TryParse(e.GetArg("token"), out token))
|
||||
return;
|
||||
HashSet<Channel> set;
|
||||
if (!Subscribers.TryGetValue(token, out set))
|
||||
return;
|
||||
set.Add(e.Channel);
|
||||
await e.Channel.SendMessage(":ok:");
|
||||
});
|
||||
|
||||
cgb.CreateCommand(Module.Prefix + "lcsc")
|
||||
.Description("Leaves Cross server channel instance from this channel")
|
||||
.AddCheck(SimpleCheckers.ManageServer())
|
||||
.Do(async e => {
|
||||
foreach (var subscriber in Subscribers) {
|
||||
subscriber.Value.Remove(e.Channel);
|
||||
}
|
||||
await e.Channel.SendMessage(":ok:");
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user