Conversations cleaned up completely
This commit is contained in:
parent
fda5755a7f
commit
874eefdf89
@ -5,7 +5,6 @@ using System.Threading.Tasks;
|
||||
using System.Security.Cryptography;
|
||||
using Discord.Commands;
|
||||
using Discord;
|
||||
using NadekoBot.Modules;
|
||||
using System.IO;
|
||||
using System.Drawing;
|
||||
using NadekoBot.Classes;
|
||||
|
@ -1,8 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NadekoBot.Classes {
|
||||
static class FlowersHandler {
|
||||
|
20
NadekoBot/Classes/JSONModels/AnimeResult.cs
Normal file
20
NadekoBot/Classes/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;
|
||||
}
|
||||
}
|
22
NadekoBot/Classes/JSONModels/MangaResult.cs
Normal file
22
NadekoBot/Classes/JSONModels/MangaResult.cs
Normal file
@ -0,0 +1,22 @@
|
||||
namespace NadekoBot.Classes.JSONModels
|
||||
{
|
||||
public class MangaResult
|
||||
{
|
||||
public int id;
|
||||
public string publishing_status;
|
||||
public string image_url_lge;
|
||||
public string title_english;
|
||||
public int total_chapters;
|
||||
public int total_volumes;
|
||||
public string description;
|
||||
|
||||
public override string ToString() =>
|
||||
"`Title:` **" + title_english +
|
||||
"**\n`Status:` " + publishing_status +
|
||||
"\n`Chapters:` " + total_chapters +
|
||||
"\n`Volumes:` " + total_volumes +
|
||||
"\n`Link:` http://anilist.co/manga/" + id +
|
||||
"\n`Synopsis:` " + description.Substring(0, description.Length > 500 ? 500 : description.Length) + "..." +
|
||||
"\n`img:` " + image_url_lge;
|
||||
}
|
||||
}
|
18
NadekoBot/Classes/JSONModels/_JSONModels.cs
Normal file
18
NadekoBot/Classes/JSONModels/_JSONModels.cs
Normal file
@ -0,0 +1,18 @@
|
||||
// ReSharper disable InconsistentNaming
|
||||
namespace NadekoBot.Classes.JSONModels
|
||||
{
|
||||
public class Credentials
|
||||
{
|
||||
public string Username;
|
||||
public string Password;
|
||||
public string BotId;
|
||||
public string GoogleAPIKey;
|
||||
public ulong[] OwnerIds;
|
||||
public string TrelloAppKey;
|
||||
public bool? ForwardMessages;
|
||||
public string SoundCloudClientID;
|
||||
public string MashapeKey;
|
||||
public string LOLAPIKey;
|
||||
public bool DontJoinServers = false;
|
||||
}
|
||||
}
|
@ -1,9 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace NadekoBot.Classes.Music {
|
||||
public class SoundCloud {
|
||||
|
@ -1,7 +1,6 @@
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using NadekoBot.Extensions;
|
||||
@ -10,43 +9,38 @@ using System.Reflection;
|
||||
|
||||
namespace NadekoBot {
|
||||
public class NadekoStats {
|
||||
public string BotVersion { get; } = $"{Assembly.GetExecutingAssembly().GetName().Name} v{Assembly.GetExecutingAssembly().GetName().Version.ToString()}";
|
||||
public static NadekoStats Instance { get; } = new NadekoStats();
|
||||
|
||||
private static readonly NadekoStats _instance = new NadekoStats();
|
||||
public static NadekoStats Instance => _instance;
|
||||
private readonly CommandService commandService;
|
||||
|
||||
private CommandService _service;
|
||||
private DiscordClient _client;
|
||||
public string BotVersion => $"{Assembly.GetExecutingAssembly().GetName().Name} v{Assembly.GetExecutingAssembly().GetName().Version}";
|
||||
|
||||
private int _commandsRan = 0;
|
||||
private string _statsCache = "";
|
||||
private Stopwatch _statsSW = new Stopwatch();
|
||||
private readonly Stopwatch statsStopwatch = new Stopwatch();
|
||||
|
||||
public int ServerCount { get; private set; } = 0;
|
||||
public int TextChannelsCount { get; private set; } = 0;
|
||||
public int VoiceChannelsCount { get; private set; } = 0;
|
||||
|
||||
List<string> messages = new List<string>();
|
||||
|
||||
static NadekoStats() { }
|
||||
|
||||
private NadekoStats() {
|
||||
_service = NadekoBot.Client.GetService<CommandService>();
|
||||
_client = NadekoBot.Client;
|
||||
commandService = NadekoBot.Client.GetService<CommandService>();
|
||||
|
||||
_statsSW = new Stopwatch();
|
||||
_statsSW.Start();
|
||||
_service.CommandExecuted += StatsCollector_RanCommand;
|
||||
statsStopwatch = new Stopwatch();
|
||||
statsStopwatch.Start();
|
||||
commandService.CommandExecuted += StatsCollector_RanCommand;
|
||||
|
||||
Task.Run(() => StartCollecting());
|
||||
Task.Run(StartCollecting);
|
||||
Console.WriteLine("Logging enabled.");
|
||||
|
||||
ServerCount = _client.Servers.Count();
|
||||
var channels = _client.Servers.SelectMany(s => s.AllChannels);
|
||||
TextChannelsCount = channels.Where(c => c.Type == ChannelType.Text).Count();
|
||||
ServerCount = NadekoBot.Client.Servers.Count();
|
||||
var channels = NadekoBot.Client.Servers.SelectMany(s => s.AllChannels);
|
||||
TextChannelsCount = channels.Count(c => c.Type == ChannelType.Text);
|
||||
VoiceChannelsCount = channels.Count() - TextChannelsCount;
|
||||
|
||||
_client.JoinedServer += (s, e) => {
|
||||
NadekoBot.Client.JoinedServer += (s, e) => {
|
||||
try {
|
||||
ServerCount++;
|
||||
TextChannelsCount += e.Server.TextChannels.Count();
|
||||
@ -54,7 +48,7 @@ namespace NadekoBot {
|
||||
}
|
||||
catch { }
|
||||
};
|
||||
_client.LeftServer += (s, e) => {
|
||||
NadekoBot.Client.LeftServer += (s, e) => {
|
||||
try {
|
||||
ServerCount--;
|
||||
TextChannelsCount -= e.Server.TextChannels.Count();
|
||||
@ -62,7 +56,7 @@ namespace NadekoBot {
|
||||
}
|
||||
catch { }
|
||||
};
|
||||
_client.ChannelCreated += (s, e) => {
|
||||
NadekoBot.Client.ChannelCreated += (s, e) => {
|
||||
try {
|
||||
if (e.Channel.IsPrivate)
|
||||
return;
|
||||
@ -73,7 +67,7 @@ namespace NadekoBot {
|
||||
}
|
||||
catch { }
|
||||
};
|
||||
_client.ChannelDestroyed += (s, e) => {
|
||||
NadekoBot.Client.ChannelDestroyed += (s, e) => {
|
||||
try {
|
||||
if (e.Channel.IsPrivate)
|
||||
return;
|
||||
@ -98,20 +92,15 @@ namespace NadekoBot {
|
||||
Task.Run(() => {
|
||||
var sb = new System.Text.StringBuilder();
|
||||
sb.AppendLine("`Author: Kwoth` `Library: Discord.Net`");
|
||||
//$"\nDiscord.Net version: {DiscordConfig.LibVersion}" +
|
||||
//$"\nRuntime: {_client.GetRuntime()}" +
|
||||
sb.AppendLine($"`Bot Version: {BotVersion}`");
|
||||
//$"\nLogged in as: {_client.CurrentUser.Name}" +
|
||||
sb.AppendLine($"`Bot id: {_client.CurrentUser.Id}`");
|
||||
sb.AppendLine($"`Owner id: {NadekoBot.OwnerID}`");
|
||||
sb.AppendLine($"`Bot id: {NadekoBot.Client.CurrentUser.Id}`");
|
||||
sb.AppendLine($"`Owner id: {(NadekoBot.Creds.OwnerIds.FirstOrDefault())}`");
|
||||
sb.AppendLine($"`Uptime: {GetUptimeString()}`");
|
||||
sb.Append($"`Servers: {ServerCount}");
|
||||
sb.Append($" | TextChannels: {TextChannelsCount}");
|
||||
sb.AppendLine($" | VoiceChannels: {VoiceChannelsCount}`");
|
||||
//$"\nUsers: {_client.Servers.SelectMany(x => x.Users.Select(y => y.Id)).Count()} (non-unique)" +
|
||||
//sb.AppendLine($"`Heap: {} MB`");
|
||||
sb.AppendLine($"`Commands Ran this session: {_commandsRan}`");
|
||||
sb.AppendLine($"`Message queue size:{_client.MessageQueue.Count}`");
|
||||
sb.AppendLine($"`Message queue size:{NadekoBot.Client.MessageQueue.Count}`");
|
||||
sb.AppendLine($"`Greeted {Commands.ServerGreetCommand.Greeted} times.`");
|
||||
_statsCache = sb.ToString();
|
||||
});
|
||||
@ -119,10 +108,9 @@ namespace NadekoBot {
|
||||
public string Heap() => Math.Round((double)GC.GetTotalMemory(true) / 1.MiB(), 2).ToString();
|
||||
|
||||
public async Task<string> GetStats() {
|
||||
if (_statsSW.Elapsed.Seconds > 5) {
|
||||
await LoadStats();
|
||||
_statsSW.Restart();
|
||||
}
|
||||
if (statsStopwatch.Elapsed.Seconds <= 5) return _statsCache;
|
||||
await LoadStats();
|
||||
statsStopwatch.Restart();
|
||||
return _statsCache;
|
||||
}
|
||||
|
||||
@ -132,7 +120,7 @@ namespace NadekoBot {
|
||||
try {
|
||||
var onlineUsers = await Task.Run(() => NadekoBot.Client.Servers.Sum(x => x.Users.Count()));
|
||||
var realOnlineUsers = await Task.Run(() => NadekoBot.Client.Servers
|
||||
.Sum(x => x.Users.Where(u => u.Status == UserStatus.Online).Count()));
|
||||
.Sum(x => x.Users.Count(u => u.Status == UserStatus.Online)));
|
||||
var connectedServers = NadekoBot.Client.Servers.Count();
|
||||
|
||||
Classes.DBHandler.Instance.InsertData(new Classes._DataModels.Stats {
|
||||
@ -165,7 +153,7 @@ namespace NadekoBot {
|
||||
});
|
||||
}
|
||||
catch {
|
||||
Console.WriteLine("Parse error in ran command.");
|
||||
Console.WriteLine("Error in ran command DB write.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,7 @@
|
||||
using Discord.Commands;
|
||||
using Discord.Modules;
|
||||
using NadekoBot.Extensions;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Discord;
|
||||
|
||||
namespace NadekoBot.Classes {
|
||||
|
@ -1,11 +1,9 @@
|
||||
using Discord;
|
||||
using Discord.Commands.Permissions;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Discord.Commands;
|
||||
|
||||
|
@ -1,14 +1,28 @@
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Discord.Commands.Permissions;
|
||||
|
||||
namespace NadekoBot.Classes.Permissions {
|
||||
static class SimpleCheckers {
|
||||
public static class SimpleCheckers
|
||||
{
|
||||
public static ManageRoles CanManageRoles { get; } = new ManageRoles();
|
||||
|
||||
public static Func<Command, User, Channel, bool> OwnerOnly() =>
|
||||
(com, user, ch) => user.Id == NadekoBot.Creds.OwnerID;
|
||||
(com, user, ch) => NadekoBot.IsOwner(user.Id);
|
||||
|
||||
public static Func<Command, User, Channel, bool> ManageMessages() =>
|
||||
(com, user, ch) => NadekoBot.IsOwner(user.Id);
|
||||
|
||||
public class ManageRoles :IPermissionChecker
|
||||
{
|
||||
public bool CanRun(Command command, User user, Channel channel, out string error) {
|
||||
error = string.Empty;
|
||||
if(user.ServerPermissions.ManageRoles)
|
||||
return true;
|
||||
error = "You do not have a permission to manage roles.";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using NadekoBot.Extensions;
|
||||
|
||||
namespace NadekoBot.Classes.Trivia {
|
||||
public class TriviaQuestionPool {
|
||||
|
@ -1,8 +1,7 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
class Announcement : IDataModel {
|
||||
internal class Announcement : IDataModel {
|
||||
public long ServerId { get; set; } = 0;
|
||||
public bool Greet { get; set; } = false;
|
||||
public bool GreetPM { get; set; } = false;
|
||||
|
@ -1,7 +1,5 @@
|
||||
using System;
|
||||
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
class Command : IDataModel {
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
internal class Command : IDataModel {
|
||||
public long UserId { get; set; }
|
||||
public string UserName { get; set; }
|
||||
public long ServerId { get; set; }
|
||||
|
@ -1,5 +1,5 @@
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
class CurrencyState : IDataModel {
|
||||
internal class CurrencyState : IDataModel {
|
||||
public long Value { get; set; }
|
||||
[SQLite.Unique]
|
||||
public long UserId { get; set; }
|
||||
|
@ -1,5 +1,5 @@
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
class CurrencyTransaction : IDataModel {
|
||||
internal class CurrencyTransaction : IDataModel {
|
||||
public string Reason { get; set; }
|
||||
public int Value { get; set; }
|
||||
public long UserId { get; set; }
|
||||
|
@ -1,11 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
class Donator : IDataModel {
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
internal class Donator : IDataModel {
|
||||
public long UserId { get; set; }
|
||||
public string UserName { get; set; }
|
||||
public int Amount { get; set; }
|
||||
|
@ -2,7 +2,7 @@
|
||||
using System;
|
||||
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
abstract class IDataModel {
|
||||
internal abstract class IDataModel {
|
||||
[PrimaryKey, AutoIncrement]
|
||||
public int Id { get; set; }
|
||||
[Newtonsoft.Json.JsonProperty("createdAt")]
|
||||
|
@ -1,5 +1,5 @@
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
class Request : IDataModel {
|
||||
internal class Request : IDataModel {
|
||||
public string UserName { get; set; }
|
||||
public long UserId { get; set; }
|
||||
public string ServerName { get; set; }
|
||||
|
@ -1,7 +1,7 @@
|
||||
using System;
|
||||
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
class Stats : IDataModel {
|
||||
internal class Stats : IDataModel {
|
||||
public int ConnectedServers { get; set; }
|
||||
public int OnlineUsers { get; set; }
|
||||
public TimeSpan Uptime { get; set; }
|
||||
|
@ -1,5 +1,5 @@
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
class TypingArticle : IDataModel {
|
||||
internal class TypingArticle : IDataModel {
|
||||
public string Text { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
class UserQuote : IDataModel {
|
||||
namespace NadekoBot.Classes._DataModels {
|
||||
internal class UserQuote : IDataModel {
|
||||
public string UserName { get; set; }
|
||||
public string Keyword { get; set; }
|
||||
public string Text { get; set; }
|
||||
|
@ -1,55 +0,0 @@
|
||||
// ReSharper disable InconsistentNaming
|
||||
namespace NadekoBot.Classes
|
||||
{
|
||||
public class Credentials
|
||||
{
|
||||
public string Username;
|
||||
public string Password;
|
||||
public string BotMention;
|
||||
public string GoogleAPIKey;
|
||||
public ulong OwnerID;
|
||||
public string TrelloAppKey;
|
||||
public bool? ForwardMessages;
|
||||
public string SoundCloudClientID;
|
||||
public string MashapeKey;
|
||||
public string LOLAPIKey;
|
||||
public bool DontJoinServers = false;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
public class MangaResult
|
||||
{
|
||||
public int id;
|
||||
public string publishing_status;
|
||||
public string image_url_lge;
|
||||
public string title_english;
|
||||
public int total_chapters;
|
||||
public int total_volumes;
|
||||
public string description;
|
||||
|
||||
public override string ToString() =>
|
||||
"`Title:` **" + title_english +
|
||||
"**\n`Status:` " + publishing_status +
|
||||
"\n`Chapters:` " + total_chapters +
|
||||
"\n`Volumes:` " + total_volumes +
|
||||
"\n`Link:` http://anilist.co/manga/" + id +
|
||||
"\n`Synopsis:` " + description.Substring(0, description.Length > 500 ? 500 : description.Length) + "..." +
|
||||
"\n`img:` " + image_url_lge;
|
||||
}
|
||||
}
|
@ -1,11 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Discord.Commands;
|
||||
using System.Collections.Concurrent;
|
||||
using Discord;
|
||||
using System.Threading;
|
||||
|
||||
namespace NadekoBot.Commands {
|
||||
|
@ -2,7 +2,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Discord.Commands;
|
||||
using NadekoBot.Extensions;
|
||||
|
||||
namespace NadekoBot
|
||||
{
|
||||
|
@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Discord.Commands;
|
||||
using Discord.Legacy;
|
||||
using NadekoBot.Extensions;
|
||||
using System.Drawing;
|
||||
|
||||
|
@ -35,22 +35,21 @@ namespace NadekoBot {
|
||||
#endregion OldHelp
|
||||
|
||||
if (string.IsNullOrWhiteSpace(e.GetArg("command"))) {
|
||||
await e.User.Send("**LIST OF COMMANDS CAN BE FOUND ON THIS LINK**\n\n <https://github.com/Kwoth/NadekoBot/blob/master/commandlist.md>");
|
||||
await e.User.Send(HelpString);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
await Task.Run(async () => {
|
||||
var comToFind = e.GetArg("command");
|
||||
await Task.Run(async () => {
|
||||
var comToFind = e.GetArg("command");
|
||||
|
||||
var com = NadekoBot.Client.GetService<CommandService>().AllCommands
|
||||
.Where(c => c.Text.ToLower().Equals(comToFind))
|
||||
.FirstOrDefault();
|
||||
if (com != null)
|
||||
await e.Channel.SendMessage($"`Help for '{com.Text}:'` **{com.Description}**");
|
||||
});
|
||||
}
|
||||
var com = NadekoBot.Client.GetService<CommandService>().AllCommands
|
||||
.FirstOrDefault(c => c.Text.ToLower().Equals(comToFind));
|
||||
if (com != null)
|
||||
await e.Channel.SendMessage($"`Help for '{com.Text}:'` **{com.Description}**");
|
||||
});
|
||||
};
|
||||
|
||||
public static string HelpString => "**LIST OF COMMANDS CAN BE FOUND ON THIS LINK**\n\n <https://github.com/Kwoth/NadekoBot/blob/master/commandlist.md>";
|
||||
|
||||
public Action<CommandEventArgs> DoGitFunc() => e => {
|
||||
string helpstr =
|
||||
$@"######For more information and how to setup your own NadekoBot, go to: **http://github.com/Kwoth/NadekoBot/**
|
||||
|
@ -4,11 +4,9 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Discord.Commands;
|
||||
using NadekoBot;
|
||||
using System.Drawing;
|
||||
using NadekoBot.Extensions;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace NadekoBot.Commands {
|
||||
class LoLCommands : DiscordCommand {
|
||||
|
@ -3,7 +3,6 @@ using System.Collections.Concurrent;
|
||||
using System.Threading.Tasks;
|
||||
using Discord.Commands;
|
||||
using Discord;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NadekoBot.Commands {
|
||||
class LogCommand : DiscordCommand {
|
||||
@ -21,7 +20,7 @@ namespace NadekoBot.Commands {
|
||||
ConcurrentDictionary<Channel, Channel> voiceChannelLog = new ConcurrentDictionary<Channel, Channel>();
|
||||
|
||||
public override Func<CommandEventArgs, Task> DoFunc() => async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID ||
|
||||
if (!NadekoBot.IsOwner(e.User.Id) ||
|
||||
!e.User.ServerPermissions.ManageServer)
|
||||
return;
|
||||
Channel ch;
|
||||
@ -116,7 +115,7 @@ namespace NadekoBot.Commands {
|
||||
cgb.CreateCommand(".userpresence")
|
||||
.Description("Starts logging to this channel when someone from the server goes online/offline/idle. BOT OWNER ONLY. SERVER OWNER ONLY.")
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID ||
|
||||
if (!NadekoBot.IsOwner(e.User.Id) ||
|
||||
!e.User.ServerPermissions.ManageServer)
|
||||
return;
|
||||
Channel ch;
|
||||
@ -130,9 +129,9 @@ namespace NadekoBot.Commands {
|
||||
});
|
||||
|
||||
cgb.CreateCommand(".voicepresence")
|
||||
.Description("Toggles logging to this channel whenever someone joins or leaves a voice channel you are in right now.")
|
||||
.Description("Toggles logging to this channel whenever someone joins or leaves a voice channel you are in right now. BOT OWNER ONLY. SERVER OWNER ONLY.")
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID ||
|
||||
if (!NadekoBot.IsOwner(e.User.Id) ||
|
||||
!e.User.ServerPermissions.ManageServer)
|
||||
return;
|
||||
|
||||
|
@ -73,7 +73,7 @@ namespace NadekoBot.Commands {
|
||||
.Description("Deletes a request. Only owner is able to do this.")
|
||||
.Parameter("reqNumber", ParameterType.Required)
|
||||
.Do(async e => {
|
||||
if (e.User.Id == NadekoBot.OwnerId) {
|
||||
if (NadekoBot.IsOwner(e.User.Id)) {
|
||||
try {
|
||||
if (DeleteRequest(int.Parse(e.Args[0]))) {
|
||||
await e.Channel.SendMessage(e.User.Mention + " Request deleted.");
|
||||
@ -90,7 +90,7 @@ namespace NadekoBot.Commands {
|
||||
.Description("Resolves a request. Only owner is able to do this.")
|
||||
.Parameter("reqNumber", ParameterType.Required)
|
||||
.Do(async e => {
|
||||
if (e.User.Id == NadekoBot.OwnerId) {
|
||||
if (NadekoBot.IsOwner(e.User.Id)) {
|
||||
try {
|
||||
var sc = ResolveRequest(int.Parse(e.Args[0]));
|
||||
if (sc != null) {
|
||||
|
@ -151,7 +151,7 @@ namespace NadekoBot.Commands {
|
||||
.Description("Adds a new article to the typing contest. Owner only.")
|
||||
.Parameter("text", ParameterType.Unparsed)
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID || string.IsNullOrWhiteSpace(e.GetArg("text"))) return;
|
||||
if (!NadekoBot.IsOwner(e.User.Id) || string.IsNullOrWhiteSpace(e.GetArg("text"))) return;
|
||||
|
||||
Classes.DBHandler.Instance.InsertData(new Classes._DataModels.TypingArticle {
|
||||
Text = e.GetArg("text"),
|
||||
|
@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Discord.Commands;
|
||||
using NadekoBot.Extensions;
|
||||
using System.Collections.Concurrent;
|
||||
using Discord;
|
||||
using TriviaGame = NadekoBot.Classes.Trivia.TriviaGame;
|
||||
|
@ -2,9 +2,7 @@
|
||||
using Discord.Commands;
|
||||
using Discord;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Timers;
|
||||
using NadekoBot.Extensions;
|
||||
using System.Threading.Tasks;
|
||||
using NadekoBot.Commands;
|
||||
@ -12,13 +10,13 @@ using System.IO;
|
||||
using System.Collections.Concurrent;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Collections.Generic;
|
||||
using NadekoBot.Classes.Permissions;
|
||||
using NadekoBot.Classes._DataModels;
|
||||
using System.Threading;
|
||||
using Timer = System.Timers.Timer;
|
||||
|
||||
namespace NadekoBot.Modules {
|
||||
class Administration : DiscordModule {
|
||||
public Administration() : base() {
|
||||
internal class Administration : DiscordModule {
|
||||
public Administration() {
|
||||
commands.Add(new ServerGreetCommand());
|
||||
commands.Add(new LogCommand());
|
||||
commands.Add(new PlayingRotate());
|
||||
@ -27,7 +25,7 @@ namespace NadekoBot.Modules {
|
||||
public override void Install(ModuleManager manager) {
|
||||
manager.CreateCommands("", cgb => {
|
||||
|
||||
cgb.AddCheck(Classes.Permissions.PermissionChecker.Instance);
|
||||
cgb.AddCheck(PermissionChecker.Instance);
|
||||
|
||||
var client = manager.Client;
|
||||
|
||||
@ -37,27 +35,34 @@ namespace NadekoBot.Modules {
|
||||
.Description("Sets a role for a given user.\n**Usage**: .sr @User Guest")
|
||||
.Parameter("user_name", ParameterType.Required)
|
||||
.Parameter("role_name", ParameterType.Unparsed)
|
||||
.AddCheck(SimpleCheckers.CanManageRoles)
|
||||
.Do(async e => {
|
||||
if (!e.User.ServerPermissions.ManageRoles ||
|
||||
string.IsNullOrWhiteSpace(e.GetArg("role_name"))) return;
|
||||
var usr = e.Server.FindUsers(e.GetArg("user_name")).FirstOrDefault();
|
||||
var userName = e.GetArg("user_name");
|
||||
var roleName = e.GetArg("role_name");
|
||||
|
||||
if (string.IsNullOrWhiteSpace(roleName)) return;
|
||||
|
||||
if (!e.User.ServerPermissions.ManageRoles) {
|
||||
await e.Channel.SendMessage("You have insufficient permissions.");
|
||||
}
|
||||
|
||||
var usr = e.Server.FindUsers(userName).FirstOrDefault();
|
||||
if (usr == null) {
|
||||
await e.Channel.SendMessage("You failed to supply a valid username");
|
||||
return;
|
||||
}
|
||||
|
||||
var role = e.Server.FindRoles(e.GetArg("role_name")).FirstOrDefault();
|
||||
var role = e.Server.FindRoles(roleName).FirstOrDefault();
|
||||
if (role == null) {
|
||||
await e.Channel.SendMessage("You failed to supply a valid role");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await usr.AddRoles(new Role[] { role });
|
||||
await usr.AddRoles(role);
|
||||
await e.Channel.SendMessage($"Successfully added role **{role.Name}** to user **{usr.Name}**");
|
||||
}
|
||||
catch (Exception ex) {
|
||||
await e.Channel.SendMessage("Failed to add roles. Most likely reason: Insufficient permissions.\n");
|
||||
} catch (Exception ex) {
|
||||
await e.Channel.SendMessage("Failed to add roles. Bot has insufficient permissions.\n");
|
||||
Console.WriteLine(ex.ToString());
|
||||
}
|
||||
});
|
||||
@ -66,28 +71,29 @@ namespace NadekoBot.Modules {
|
||||
.Description("Removes a role from a given user.\n**Usage**: .rr @User Admin")
|
||||
.Parameter("user_name", ParameterType.Required)
|
||||
.Parameter("role_name", ParameterType.Unparsed)
|
||||
.AddCheck(SimpleCheckers.CanManageRoles)
|
||||
.Do(async e => {
|
||||
if (!e.User.ServerPermissions.ManageRoles ||
|
||||
string.IsNullOrWhiteSpace("role_name")) return;
|
||||
var userName = e.GetArg("user_name");
|
||||
var roleName = e.GetArg("role_name");
|
||||
|
||||
var usr = e.Server.FindUsers(e.GetArg("user_name")).FirstOrDefault();
|
||||
if (string.IsNullOrWhiteSpace(roleName)) return;
|
||||
|
||||
var usr = e.Server.FindUsers(userName).FirstOrDefault();
|
||||
if (usr == null) {
|
||||
await e.Channel.SendMessage("You failed to supply a valid username");
|
||||
return;
|
||||
}
|
||||
var role = e.Server.FindRoles(e.GetArg("role_name")).FirstOrDefault();
|
||||
|
||||
var role = e.Server.FindRoles(roleName).FirstOrDefault();
|
||||
if (role == null) {
|
||||
await e.Channel.SendMessage("You failed to supply a valid role");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await usr.RemoveRoles(new Role[] { role });
|
||||
await usr.RemoveRoles(role);
|
||||
await e.Channel.SendMessage($"Successfully removed role **{role.Name}** from user **{usr.Name}**");
|
||||
}
|
||||
catch (InvalidOperationException) {
|
||||
}
|
||||
catch {
|
||||
} catch {
|
||||
await e.Channel.SendMessage("Failed to remove roles. Most likely reason: Insufficient permissions.");
|
||||
}
|
||||
});
|
||||
@ -95,21 +101,20 @@ namespace NadekoBot.Modules {
|
||||
cgb.CreateCommand(".r").Alias(".role").Alias(".cr")
|
||||
.Description("Creates a role with a given name.**Usage**: .r Awesome Role")
|
||||
.Parameter("role_name", ParameterType.Unparsed)
|
||||
.AddCheck(SimpleCheckers.CanManageRoles)
|
||||
.Do(async e => {
|
||||
if (!e.User.ServerPermissions.ManageRoles) return;
|
||||
if (string.IsNullOrWhiteSpace(e.GetArg("role_name")))
|
||||
return;
|
||||
try {
|
||||
var r = await e.Server.CreateRole(e.GetArg("role_name"));
|
||||
await e.Channel.SendMessage($"Successfully created role **{r.Name}**.");
|
||||
}
|
||||
catch (Exception ex) {
|
||||
} catch (Exception) {
|
||||
await e.Channel.SendMessage(":warning: Unspecified error.");
|
||||
}
|
||||
});
|
||||
|
||||
cgb.CreateCommand(".rolecolor").Alias(".rc")
|
||||
.Parameter("Rolename", ParameterType.Required)
|
||||
.Parameter("role_name", ParameterType.Required)
|
||||
.Parameter("r", ParameterType.Optional)
|
||||
.Parameter("g", ParameterType.Optional)
|
||||
.Parameter("b", ParameterType.Optional)
|
||||
@ -120,47 +125,44 @@ namespace NadekoBot.Modules {
|
||||
return;
|
||||
}
|
||||
|
||||
var args = e.Args.Where(s => s != String.Empty);
|
||||
var args = e.Args.Where(s => s != string.Empty);
|
||||
|
||||
if (args.Count() != 2 && args.Count() != 4) {
|
||||
await e.Channel.SendMessage("The parameters are invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
Role role = e.Server.FindRoles(e.Args[0]).FirstOrDefault();
|
||||
var role = e.Server.FindRoles(e.Args[0]).FirstOrDefault();
|
||||
|
||||
if (role == null) {
|
||||
await e.Channel.SendMessage("That role does not exist.");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
bool rgb = args.Count() == 4;
|
||||
var rgb = args.Count() == 4;
|
||||
|
||||
byte red = Convert.ToByte(rgb ? int.Parse(e.Args[1]) : Convert.ToInt32(e.Args[1].Substring(0, 2), 16));
|
||||
byte green = Convert.ToByte(rgb ? int.Parse(e.Args[2]) : Convert.ToInt32(e.Args[1].Substring(2, 2), 16));
|
||||
byte blue = Convert.ToByte(rgb ? int.Parse(e.Args[3]) : Convert.ToInt32(e.Args[1].Substring(4, 2), 16));
|
||||
var red = Convert.ToByte(rgb ? int.Parse(e.Args[1]) : Convert.ToInt32(e.Args[1].Substring(0, 2), 16));
|
||||
var green = Convert.ToByte(rgb ? int.Parse(e.Args[2]) : Convert.ToInt32(e.Args[1].Substring(2, 2), 16));
|
||||
var blue = Convert.ToByte(rgb ? int.Parse(e.Args[3]) : Convert.ToInt32(e.Args[1].Substring(4, 2), 16));
|
||||
|
||||
await role.Edit(color: new Color(red, green, blue));
|
||||
await e.Channel.SendMessage($"Role {role.Name}'s color has been changed.");
|
||||
}
|
||||
catch (Exception ex) {
|
||||
await e.Channel.SendMessage(":warning: Unspecified error, please report this.");
|
||||
} catch (Exception ex) {
|
||||
await e.Channel.SendMessage("Error occured, most likely invalid parameters.");
|
||||
Console.WriteLine($".rolecolor error: {ex}");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
cgb.CreateCommand(".roles")
|
||||
.Description("List all roles on this server or a single user if specified.")
|
||||
.Parameter("user", ParameterType.Unparsed)
|
||||
.Do(async e => {
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(e.GetArg("user"))) {
|
||||
var usr = e.Server.FindUsers(e.GetArg("user")).FirstOrDefault();
|
||||
if (usr != null) {
|
||||
await e.Channel.SendMessage($"`List of roles for **{usr.Name}**:` \n• " + string.Join("\n• ", usr.Roles));
|
||||
return;
|
||||
}
|
||||
if (usr == null) return;
|
||||
|
||||
await e.Channel.SendMessage($"`List of roles for **{usr.Name}**:` \n• " + string.Join("\n• ", usr.Roles));
|
||||
return;
|
||||
}
|
||||
await e.Channel.SendMessage("`List of roles:` \n• " + string.Join("\n• ", e.Server.Roles));
|
||||
});
|
||||
@ -175,8 +177,7 @@ namespace NadekoBot.Modules {
|
||||
await usr.Server.Ban(usr);
|
||||
await e.Channel.SendMessage("Banned user " + usr.Name + " Id: " + usr.Id);
|
||||
}
|
||||
}
|
||||
catch (Exception ex) { }
|
||||
} catch (Exception ex) { }
|
||||
});
|
||||
|
||||
cgb.CreateCommand(".ub").Alias(".unban")
|
||||
@ -189,8 +190,7 @@ namespace NadekoBot.Modules {
|
||||
await usr.Server.Unban(usr);
|
||||
await e.Channel.SendMessage("Unbanned user " + usr.Name + " Id: " + usr.Id);
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
} catch { }
|
||||
});
|
||||
|
||||
cgb.CreateCommand(".k").Alias(".kick")
|
||||
@ -203,8 +203,7 @@ namespace NadekoBot.Modules {
|
||||
await e.Message.MentionedUsers.First().Kick();
|
||||
await e.Channel.SendMessage("Kicked user " + usr.Name + " Id: " + usr.Id);
|
||||
}
|
||||
}
|
||||
catch {
|
||||
} catch {
|
||||
await e.Channel.SendMessage("No sufficient permissions.");
|
||||
}
|
||||
});
|
||||
@ -223,8 +222,7 @@ namespace NadekoBot.Modules {
|
||||
await u.Edit(isMuted: true);
|
||||
}
|
||||
await e.Channel.SendMessage("Mute successful");
|
||||
}
|
||||
catch {
|
||||
} catch {
|
||||
await e.Channel.SendMessage("I do not have permission to do that most likely.");
|
||||
}
|
||||
});
|
||||
@ -244,8 +242,7 @@ namespace NadekoBot.Modules {
|
||||
await u.Edit(isMuted: false);
|
||||
}
|
||||
await e.Channel.SendMessage("Unmute successful");
|
||||
}
|
||||
catch {
|
||||
} catch {
|
||||
await e.Channel.SendMessage("I do not have permission to do that most likely.");
|
||||
}
|
||||
});
|
||||
@ -266,8 +263,7 @@ namespace NadekoBot.Modules {
|
||||
await u.Edit(isDeafened: true);
|
||||
}
|
||||
await e.Channel.SendMessage("Deafen successful");
|
||||
}
|
||||
catch {
|
||||
} catch {
|
||||
await e.Channel.SendMessage("I do not have permission to do that most likely.");
|
||||
}
|
||||
});
|
||||
@ -288,8 +284,7 @@ namespace NadekoBot.Modules {
|
||||
await u.Edit(isDeafened: false);
|
||||
}
|
||||
await e.Channel.SendMessage("Undeafen successful");
|
||||
}
|
||||
catch {
|
||||
} catch {
|
||||
await e.Channel.SendMessage("I do not have permission to do that most likely.");
|
||||
}
|
||||
});
|
||||
@ -303,8 +298,7 @@ namespace NadekoBot.Modules {
|
||||
await e.Server.FindChannels(e.GetArg("channel_name"), ChannelType.Voice).FirstOrDefault()?.Delete();
|
||||
await e.Channel.SendMessage($"Removed channel **{e.GetArg("channel_name")}**.");
|
||||
}
|
||||
}
|
||||
catch {
|
||||
} catch {
|
||||
await e.Channel.SendMessage("Insufficient permissions.");
|
||||
}
|
||||
});
|
||||
@ -318,8 +312,7 @@ namespace NadekoBot.Modules {
|
||||
await e.Server.CreateChannel(e.GetArg("channel_name"), ChannelType.Voice);
|
||||
await e.Channel.SendMessage($"Created voice channel **{e.GetArg("channel_name")}**.");
|
||||
}
|
||||
}
|
||||
catch {
|
||||
} catch {
|
||||
await e.Channel.SendMessage("Insufficient permissions.");
|
||||
}
|
||||
});
|
||||
@ -333,8 +326,7 @@ namespace NadekoBot.Modules {
|
||||
await e.Server.FindChannels(e.GetArg("channel_name"), ChannelType.Text).FirstOrDefault()?.Delete();
|
||||
await e.Channel.SendMessage($"Removed text channel **{e.GetArg("channel_name")}**.");
|
||||
}
|
||||
}
|
||||
catch {
|
||||
} catch {
|
||||
await e.Channel.SendMessage("Insufficient permissions.");
|
||||
}
|
||||
});
|
||||
@ -348,8 +340,7 @@ namespace NadekoBot.Modules {
|
||||
await e.Server.CreateChannel(e.GetArg("channel_name"), ChannelType.Text);
|
||||
await e.Channel.SendMessage($"Added text channel **{e.GetArg("channel_name")}**.");
|
||||
}
|
||||
}
|
||||
catch {
|
||||
} catch {
|
||||
await e.Channel.SendMessage("Insufficient permissions.");
|
||||
}
|
||||
});
|
||||
@ -361,8 +352,7 @@ namespace NadekoBot.Modules {
|
||||
try {
|
||||
if (e.User.ServerPermissions.ManageChannels)
|
||||
await e.Channel.Edit(topic: e.GetArg("topic"));
|
||||
}
|
||||
catch { }
|
||||
} catch { }
|
||||
});
|
||||
|
||||
cgb.CreateCommand(".uid").Alias(".userid")
|
||||
@ -399,7 +389,7 @@ namespace NadekoBot.Modules {
|
||||
cgb.CreateCommand(".leaveall")
|
||||
.Description("Nadeko leaves all servers **OWNER ONLY**")
|
||||
.Do(e => {
|
||||
if (e.User.Id == NadekoBot.OwnerID)
|
||||
if (NadekoBot.IsOwner(e.User.Id))
|
||||
NadekoBot.client.Servers.ForEach(async s => { if (s.Name == e.Server.Name) return; await s.Leave(); });
|
||||
});
|
||||
*/
|
||||
@ -422,7 +412,7 @@ namespace NadekoBot.Modules {
|
||||
.Alias(".graceful")
|
||||
.Description("Works only for the owner. Shuts the bot down and notifies users about the restart.")
|
||||
.Do(async e => {
|
||||
if (e.User.Id == NadekoBot.OwnerID) {
|
||||
if (NadekoBot.IsOwner(e.User.Id)) {
|
||||
Timer t = new Timer();
|
||||
t.Interval = 2000;
|
||||
t.Elapsed += (s, ev) => { Environment.Exit(0); };
|
||||
@ -447,8 +437,7 @@ namespace NadekoBot.Modules {
|
||||
foreach (var m in msgs) {
|
||||
try {
|
||||
await m.Delete();
|
||||
}
|
||||
catch { }
|
||||
} catch { }
|
||||
await Task.Delay(200);
|
||||
}
|
||||
|
||||
@ -460,9 +449,9 @@ namespace NadekoBot.Modules {
|
||||
.Description("Give the bot a new name.")
|
||||
.Parameter("new_name", ParameterType.Unparsed)
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID || e.GetArg("new_name") == null) return;
|
||||
if (!NadekoBot.IsOwner(e.User.Id) || e.GetArg("new_name") == null) return;
|
||||
|
||||
await client.CurrentUser.Edit(NadekoBot.password, e.GetArg("new_name"));
|
||||
await client.CurrentUser.Edit(NadekoBot.Creds.Password, e.GetArg("new_name"));
|
||||
});
|
||||
|
||||
cgb.CreateCommand(".newavatar")
|
||||
@ -470,7 +459,7 @@ namespace NadekoBot.Modules {
|
||||
.Description("Sets a new avatar image for the NadekoBot.")
|
||||
.Parameter("img", ParameterType.Unparsed)
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID || string.IsNullOrWhiteSpace(e.GetArg("img")))
|
||||
if (!NadekoBot.IsOwner(e.User.Id) || string.IsNullOrWhiteSpace(e.GetArg("img")))
|
||||
return;
|
||||
// Gather user provided URL.
|
||||
string avatarAddress = e.GetArg("img");
|
||||
@ -484,7 +473,7 @@ namespace NadekoBot.Modules {
|
||||
System.Drawing.Image image = System.Drawing.Image.FromStream(webResponse.GetResponseStream());
|
||||
// Save the image to disk.
|
||||
image.Save("data/avatar.png", System.Drawing.Imaging.ImageFormat.Png);
|
||||
await client.CurrentUser.Edit(NadekoBot.password, avatar: image.ToStream());
|
||||
await client.CurrentUser.Edit(NadekoBot.Creds.Password, avatar: image.ToStream());
|
||||
// Send confirm.
|
||||
await e.Channel.SendMessage("New avatar set.");
|
||||
});
|
||||
@ -493,7 +482,7 @@ namespace NadekoBot.Modules {
|
||||
.Description("Sets the bots game.")
|
||||
.Parameter("set_game", ParameterType.Unparsed)
|
||||
.Do(e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID || e.GetArg("set_game") == null) return;
|
||||
if (e.User.Id != NadekoBot.Creds.OwnerID || e.GetArg("set_game") == null) return;
|
||||
|
||||
client.SetGame(e.GetArg("set_game"));
|
||||
});
|
||||
@ -517,13 +506,12 @@ namespace NadekoBot.Modules {
|
||||
.Description("Sets a user for through-bot communication. Only works if server is set. Resets commschannel.**Owner only**.")
|
||||
.Parameter("name", ParameterType.Unparsed)
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID) return;
|
||||
if (!NadekoBot.IsOwner(e.User.Id)) return;
|
||||
commsUser = commsServer?.FindUsers(e.GetArg("name")).FirstOrDefault();
|
||||
if (commsUser != null) {
|
||||
commsChannel = null;
|
||||
await e.Channel.SendMessage("User for comms set.");
|
||||
}
|
||||
else
|
||||
} else
|
||||
await e.Channel.SendMessage("No server specified or user.");
|
||||
});
|
||||
|
||||
@ -531,7 +519,7 @@ namespace NadekoBot.Modules {
|
||||
.Description("Sets a server for through-bot communication.**Owner only**.")
|
||||
.Parameter("server", ParameterType.Unparsed)
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID) return;
|
||||
if (!NadekoBot.IsOwner(e.User.Id)) return;
|
||||
commsServer = client.FindServers(e.GetArg("server")).FirstOrDefault();
|
||||
if (commsServer != null)
|
||||
await e.Channel.SendMessage("Server for comms set.");
|
||||
@ -543,13 +531,12 @@ namespace NadekoBot.Modules {
|
||||
.Description("Sets a channel for through-bot communication. Only works if server is set. Resets commsuser.**Owner only**.")
|
||||
.Parameter("ch", ParameterType.Unparsed)
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID) return;
|
||||
if (!NadekoBot.IsOwner(e.User.Id)) return;
|
||||
commsChannel = commsServer?.FindChannels(e.GetArg("ch"), ChannelType.Text).FirstOrDefault();
|
||||
if (commsChannel != null) {
|
||||
commsUser = null;
|
||||
await e.Channel.SendMessage("Server for comms set.");
|
||||
}
|
||||
else
|
||||
} else
|
||||
await e.Channel.SendMessage("No server specified or channel is invalid.");
|
||||
});
|
||||
|
||||
@ -557,7 +544,7 @@ namespace NadekoBot.Modules {
|
||||
.Description("Send a message to someone on a different server through the bot.**Owner only.**\n **Usage**: .send Message text multi word!")
|
||||
.Parameter("msg", ParameterType.Unparsed)
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID) return;
|
||||
if (!NadekoBot.IsOwner(e.User.Id)) return;
|
||||
if (commsUser != null)
|
||||
await commsUser.SendMessage(e.GetArg("msg"));
|
||||
else if (commsChannel != null)
|
||||
@ -593,7 +580,7 @@ namespace NadekoBot.Modules {
|
||||
cgb.CreateCommand(".parsetosql")
|
||||
.Description("Loads exported parsedata from /data/parsedata/ into sqlite database.")
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID)
|
||||
if (!NadekoBot.IsOwner(e.User.Id))
|
||||
return;
|
||||
await Task.Run(() => {
|
||||
SaveParseToDb<Announcement>("data/parsedata/Announcements.json");
|
||||
@ -631,7 +618,7 @@ namespace NadekoBot.Modules {
|
||||
.Parameter("amount")
|
||||
.Do(e => {
|
||||
try {
|
||||
if (NadekoBot.OwnerID != e.User.Id)
|
||||
if (!NadekoBot.IsOwner(e.User.Id))
|
||||
return;
|
||||
var donator = e.Server.FindUsers(e.GetArg("donator")).FirstOrDefault();
|
||||
var amount = int.Parse(e.GetArg("amount"));
|
||||
@ -641,8 +628,7 @@ namespace NadekoBot.Modules {
|
||||
UserId = (long)e.User.Id
|
||||
});
|
||||
e.Channel.SendMessage("Successfuly added a new donator. 👑");
|
||||
}
|
||||
catch (Exception ex) {
|
||||
} catch (Exception ex) {
|
||||
Console.WriteLine(ex);
|
||||
Console.WriteLine("---------------\nInner error:\n" + ex.InnerException);
|
||||
}
|
||||
@ -662,8 +648,7 @@ namespace NadekoBot.Modules {
|
||||
foreach (var usr in allUsrs) {
|
||||
await usr.SendMessage(str);
|
||||
}
|
||||
}
|
||||
catch (Exception ex) {
|
||||
} catch (Exception ex) {
|
||||
Console.WriteLine(ex);
|
||||
}
|
||||
});
|
||||
@ -679,8 +664,7 @@ namespace NadekoBot.Modules {
|
||||
objects.Add(obj.ToObject<T>());
|
||||
}
|
||||
Classes.DBHandler.Instance.InsertMany(objects);
|
||||
}
|
||||
catch { }
|
||||
} catch { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,42 +23,34 @@ namespace NadekoBot.Modules {
|
||||
}
|
||||
|
||||
public override void Install(ModuleManager manager) {
|
||||
Random rng = new Random();
|
||||
var rng = new Random();
|
||||
|
||||
manager.CreateCommands("", cgb => {
|
||||
|
||||
cgb.AddCheck(Classes.Permissions.PermissionChecker.Instance);
|
||||
|
||||
var client = manager.Client;
|
||||
|
||||
cgb.CreateCommand("\\o\\")
|
||||
.Description("Nadeko replies with /o/")
|
||||
.Do(async e => {
|
||||
await e.Channel.SendMessage(e.User.Mention + "/o/");
|
||||
});
|
||||
.Do(async e => await e.Channel.SendMessage(e.User.Mention + "/o/"));
|
||||
|
||||
cgb.CreateCommand("/o/")
|
||||
.Description("Nadeko replies with \\o\\")
|
||||
.Do(async e => {
|
||||
await e.Channel.SendMessage(e.User.Mention + "\\o\\");
|
||||
});
|
||||
.Do(async e => await e.Channel.SendMessage(e.User.Mention + "\\o\\"));
|
||||
|
||||
cgb.CreateCommand("..")
|
||||
.Description("Adds a new quote with the specified name (single word) and message (no limit).\n**Usage**: .. abc My message")
|
||||
.Parameter("keyword", ParameterType.Required)
|
||||
.Parameter("text", ParameterType.Unparsed)
|
||||
.Do(async e => {
|
||||
var keyword = e.GetArg("keyword");
|
||||
var text = e.GetArg("text");
|
||||
if (string.IsNullOrWhiteSpace(text) || string.IsNullOrWhiteSpace(keyword))
|
||||
if (string.IsNullOrWhiteSpace(text))
|
||||
return;
|
||||
|
||||
Classes.DBHandler.Instance.InsertData(new Classes._DataModels.UserQuote() {
|
||||
DateAdded = DateTime.Now,
|
||||
Keyword = keyword.ToLowerInvariant(),
|
||||
Text = text,
|
||||
UserName = e.User.Name,
|
||||
});
|
||||
await Task.Run(() =>
|
||||
Classes.DBHandler.Instance.InsertData(new Classes._DataModels.UserQuote() {
|
||||
DateAdded = DateTime.Now,
|
||||
Keyword = e.GetArg("keyword").ToLowerInvariant(),
|
||||
Text = text,
|
||||
UserName = e.User.Name,
|
||||
}));
|
||||
|
||||
await e.Channel.SendMessage("`New quote added.`");
|
||||
});
|
||||
@ -71,17 +63,18 @@ namespace NadekoBot.Modules {
|
||||
if (string.IsNullOrWhiteSpace(keyword))
|
||||
return;
|
||||
|
||||
var quote = Classes.DBHandler.Instance.GetRandom<Classes._DataModels.UserQuote>(uqm => uqm.Keyword == keyword);
|
||||
var quote =
|
||||
Classes.DBHandler.Instance.GetRandom<Classes._DataModels.UserQuote>(
|
||||
uqm => uqm.Keyword == keyword);
|
||||
|
||||
if (quote != null)
|
||||
await e.Channel.SendMessage($"📣 {quote.Text}");
|
||||
else
|
||||
await e.Channel.SendMessage("💢`No quote found.`");
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
manager.CreateCommands(NadekoBot.botMention, cgb => {
|
||||
manager.CreateCommands(NadekoBot.BotMention, cgb => {
|
||||
var client = manager.Client;
|
||||
|
||||
cgb.AddCheck(Classes.Permissions.PermissionChecker.Instance);
|
||||
@ -92,76 +85,28 @@ namespace NadekoBot.Modules {
|
||||
.Description("Shows how long Nadeko has been running for.")
|
||||
.Do(async e => {
|
||||
var time = (DateTime.Now - Process.GetCurrentProcess().StartTime);
|
||||
string str = "I have been running for " + time.Days + " days, " + time.Hours + " hours, and " + time.Minutes + " minutes.";
|
||||
var str = "I have been running for " + time.Days + " days, " + time.Hours + " hours, and " + time.Minutes + " minutes.";
|
||||
await e.Channel.SendMessage(str);
|
||||
});
|
||||
|
||||
cgb.CreateCommand("die")
|
||||
.Description("Works only for the owner. Shuts the bot down.")
|
||||
.Do(async e => {
|
||||
if (e.User.Id == NadekoBot.OwnerID) {
|
||||
Timer t = new Timer();
|
||||
t.Interval = 2000;
|
||||
t.Elapsed += (s, ev) => { Environment.Exit(0); };
|
||||
t.Start();
|
||||
if (NadekoBot.IsOwner(e.User.Id)) {
|
||||
await e.Channel.SendMessage(e.User.Mention + ", Yes, my love.");
|
||||
await Task.Delay(5000);
|
||||
Environment.Exit(0);
|
||||
} else
|
||||
await e.Channel.SendMessage(e.User.Mention + ", No.");
|
||||
});
|
||||
|
||||
Stopwatch randServerSW = new Stopwatch();
|
||||
randServerSW.Start();
|
||||
var randServerSw = new Stopwatch();
|
||||
randServerSw.Start();
|
||||
|
||||
cgb.CreateCommand("randserver")
|
||||
.Description("Generates an invite to a random server and prints some stats.")
|
||||
.Do(async e => {
|
||||
if (client.Servers.Count() < 10) {
|
||||
await e.Channel.SendMessage("I need to be connected to at least 10 servers for this command to work.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (randServerSW.Elapsed.Seconds < 1800) {
|
||||
await e.Channel.SendMessage("You have to wait " + (1800 - randServerSW.Elapsed.Seconds) + " more seconds to use this function.");
|
||||
return;
|
||||
}
|
||||
randServerSW.Restart();
|
||||
while (true) {
|
||||
var server = client.Servers.OrderBy(x => rng.Next()).FirstOrDefault();
|
||||
if (server == null)
|
||||
continue;
|
||||
try {
|
||||
var inv = await server.CreateInvite(100, 5);
|
||||
await e.Channel.SendMessage("**Server:** " + server.Name +
|
||||
"\n**Owner:** " + server.Owner.Name +
|
||||
"\n**Channels:** " + server.AllChannels.Count() +
|
||||
"\n**Total Members:** " + server.Users.Count() +
|
||||
"\n**Online Members:** " + server.Users.Where(u => u.Status == UserStatus.Online).Count() +
|
||||
"\n**Invite:** " + inv.Url);
|
||||
break;
|
||||
} catch { continue; }
|
||||
}
|
||||
});
|
||||
/*
|
||||
cgb.CreateCommand("avalanche!")
|
||||
.Description("Mentions a person in every channel of the server, then deletes it")
|
||||
.Parameter("name", ParameterType.Required)
|
||||
.Do(e => {
|
||||
var usr = e.Server.FindUsers(e.GetArg("name")).FirstOrDefault();
|
||||
if (usr == null) return;
|
||||
e.Server.AllChannels.ForEach(async c => {
|
||||
try {
|
||||
var m = await c.SendMessage(usr.Mention);
|
||||
await m.Delete();
|
||||
} catch (Exception ex) {
|
||||
Console.WriteLine(ex);
|
||||
}
|
||||
});
|
||||
});
|
||||
*/
|
||||
cgb.CreateCommand("do you love me")
|
||||
.Description("Replies with positive answer only to the bot owner.")
|
||||
.Do(async e => {
|
||||
if (e.User.Id == NadekoBot.OwnerID)
|
||||
if (NadekoBot.IsOwner(e.User.Id))
|
||||
await e.Channel.SendMessage(e.User.Mention + ", Of course I do, my Master.");
|
||||
else
|
||||
await e.Channel.SendMessage(e.User.Mention + ", Don't be silly.");
|
||||
@ -170,15 +115,15 @@ namespace NadekoBot.Modules {
|
||||
cgb.CreateCommand("how are you")
|
||||
.Description("Replies positive only if bot owner is online.")
|
||||
.Do(async e => {
|
||||
if (e.User.Id == NadekoBot.OwnerID) {
|
||||
if (NadekoBot.IsOwner(e.User.Id)) {
|
||||
await e.Channel.SendMessage(e.User.Mention + " I am great as long as you are here.");
|
||||
return;
|
||||
}
|
||||
var kw = e.Server.GetUser(NadekoBot.Creds.OwnerIds[0]);
|
||||
if (kw != null && kw.Status == UserStatus.Online) {
|
||||
await e.Channel.SendMessage(e.User.Mention + " I am great as long as " + kw.Mention + " is with me.");
|
||||
} else {
|
||||
var kw = e.Server.GetUser(NadekoBot.OwnerID);
|
||||
if (kw != null && kw.Status == UserStatus.Online) {
|
||||
await e.Channel.SendMessage(e.User.Mention + " I am great as long as " + kw.Mention + " is with me.");
|
||||
} else {
|
||||
await e.Channel.SendMessage(e.User.Mention + " I am sad. My Master is not with me.");
|
||||
}
|
||||
await e.Channel.SendMessage(e.User.Mention + " I am sad. My Master is not with me.");
|
||||
}
|
||||
});
|
||||
|
||||
@ -186,33 +131,31 @@ namespace NadekoBot.Modules {
|
||||
.Parameter("mention", ParameterType.Required)
|
||||
.Description("Insults @X person.\n**Usage**: @NadekoBot insult @X.")
|
||||
.Do(async e => {
|
||||
List<string> insults = new List<string> { " You are a poop.", " You're a jerk.", " I will eat you when I get my powers back." };
|
||||
Random r = new Random();
|
||||
var insults = new List<string> { " You are a poop.", " You're a jerk.", " I will eat you when I get my powers back." };
|
||||
var u = e.Channel.FindUsers(e.GetArg("mention")).FirstOrDefault();
|
||||
if (u == null) {
|
||||
await e.Channel.SendMessage("Invalid user specified.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (u.Id == NadekoBot.OwnerID) {
|
||||
if (NadekoBot.IsOwner(u.Id)) {
|
||||
await e.Channel.SendMessage("I would never insult my master <3");
|
||||
return;
|
||||
}
|
||||
await e.Channel.SendMessage(u.Mention + insults[r.Next(0, insults.Count)]);
|
||||
await e.Channel.SendMessage(u.Mention + insults[rng.Next(0, insults.Count)]);
|
||||
});
|
||||
|
||||
cgb.CreateCommand("praise")
|
||||
.Description("Praises @X person.\n**Usage**: @NadekoBot praise @X.")
|
||||
.Parameter("mention", ParameterType.Required)
|
||||
.Do(async e => {
|
||||
List<string> praises = new List<string> { " You are cool.",
|
||||
var praises = new[] { " You are cool.",
|
||||
" You are nice!",
|
||||
" You did a good job.",
|
||||
" You did something nice.",
|
||||
" is awesome!",
|
||||
" Wow."};
|
||||
|
||||
Random r = new Random();
|
||||
var u = e.Channel.FindUsers(e.GetArg("mention")).FirstOrDefault();
|
||||
|
||||
if (u == null) {
|
||||
@ -220,11 +163,11 @@ namespace NadekoBot.Modules {
|
||||
return;
|
||||
}
|
||||
|
||||
if (u.Id == NadekoBot.OwnerID) {
|
||||
if (NadekoBot.IsOwner(u.Id)) {
|
||||
await e.Channel.SendMessage(e.User.Mention + " I don't need your permission to praise my beloved Master <3");
|
||||
return;
|
||||
}
|
||||
await e.Channel.SendMessage(u.Mention + praises[r.Next(0, praises.Count)]);
|
||||
await e.Channel.SendMessage(u.Mention + praises[rng.Next(0, praises.Length)]);
|
||||
});
|
||||
|
||||
cgb.CreateCommand("pat")
|
||||
@ -232,28 +175,28 @@ namespace NadekoBot.Modules {
|
||||
.Parameter("user", ParameterType.Unparsed)
|
||||
.Do(async e => {
|
||||
var user = e.GetArg("user");
|
||||
if (user == null || e.Message.MentionedUsers.Count() == 0) return;
|
||||
string[] pats = new string[] { "http://i.imgur.com/IiQwK12.gif",
|
||||
"http://i.imgur.com/JCXj8yD.gif",
|
||||
"http://i.imgur.com/qqBl2bm.gif",
|
||||
"http://i.imgur.com/eOJlnwP.gif",
|
||||
"https://45.media.tumblr.com/229ec0458891c4dcd847545c81e760a5/tumblr_mpfy232F4j1rxrpjzo1_r2_500.gif",
|
||||
"https://media.giphy.com/media/KZQlfylo73AMU/giphy.gif",
|
||||
"https://media.giphy.com/media/12hvLuZ7uzvCvK/giphy.gif",
|
||||
"http://gallery1.anivide.com/_full/65030_1382582341.gif",
|
||||
"https://49.media.tumblr.com/8e8a099c4eba22abd3ec0f70fd087cce/tumblr_nxovj9oY861ur1mffo1_500.gif ",
|
||||
if (string.IsNullOrWhiteSpace(user) || !e.Message.MentionedUsers.Any()) return;
|
||||
string[] pats = { "http://i.imgur.com/IiQwK12.gif",
|
||||
"http://i.imgur.com/JCXj8yD.gif",
|
||||
"http://i.imgur.com/qqBl2bm.gif",
|
||||
"http://i.imgur.com/eOJlnwP.gif",
|
||||
"https://45.media.tumblr.com/229ec0458891c4dcd847545c81e760a5/tumblr_mpfy232F4j1rxrpjzo1_r2_500.gif",
|
||||
"https://media.giphy.com/media/KZQlfylo73AMU/giphy.gif",
|
||||
"https://media.giphy.com/media/12hvLuZ7uzvCvK/giphy.gif",
|
||||
"http://gallery1.anivide.com/_full/65030_1382582341.gif",
|
||||
"https://49.media.tumblr.com/8e8a099c4eba22abd3ec0f70fd087cce/tumblr_nxovj9oY861ur1mffo1_500.gif ",
|
||||
};
|
||||
await e.Channel.SendMessage($"{e.Message.MentionedUsers.First().Mention} {pats[new Random().Next(0, pats.Length)]}");
|
||||
await e.Channel.SendMessage($"{e.Message.MentionedUsers.First().Mention} {pats[rng.Next(0, pats.Length)]}");
|
||||
});
|
||||
|
||||
cgb.CreateCommand("cry")
|
||||
.Description("Tell Nadeko to cry. You are a heartless monster if you use this command.")
|
||||
.Do(async e => {
|
||||
string[] pats = new string[] { "http://i.imgur.com/Xg3i1Qy.gif",
|
||||
"http://i.imgur.com/3K8DRrU.gif",
|
||||
"http://i.imgur.com/k58BcAv.gif",
|
||||
"http://i.imgur.com/I2fLXwo.gif" };
|
||||
await e.Channel.SendMessage($"(•̥́ _•ૅ。)\n{pats[new Random().Next(0, pats.Length)]}");
|
||||
string[] pats = { "http://i.imgur.com/Xg3i1Qy.gif",
|
||||
"http://i.imgur.com/3K8DRrU.gif",
|
||||
"http://i.imgur.com/k58BcAv.gif",
|
||||
"http://i.imgur.com/I2fLXwo.gif" };
|
||||
await e.Channel.SendMessage($"(•̥́ _•ૅ。)\n{pats[rng.Next(0, pats.Length)]}");
|
||||
});
|
||||
|
||||
cgb.CreateCommand("are you real")
|
||||
@ -264,7 +207,7 @@ namespace NadekoBot.Modules {
|
||||
|
||||
cgb.CreateCommand("are you there")
|
||||
.Description("Checks if Nadeko is operational.")
|
||||
.Alias(new string[] { "!", "?" })
|
||||
.Alias("!", "?")
|
||||
.Do(SayYes());
|
||||
|
||||
cgb.CreateCommand("draw")
|
||||
@ -276,16 +219,16 @@ namespace NadekoBot.Modules {
|
||||
.Description("Shows a unicode fire message. Optional parameter [x] tells her how many times to repeat the fire.\n**Usage**: @NadekoBot fire [x]")
|
||||
.Parameter("times", ParameterType.Optional)
|
||||
.Do(async e => {
|
||||
int count = 0;
|
||||
if (e.Args?.Length > 0)
|
||||
int.TryParse(e.Args[0], out count);
|
||||
var count = 1;
|
||||
int.TryParse(e.Args[0], out count);
|
||||
|
||||
if (count < 1)
|
||||
count = 1;
|
||||
else if (count > 12)
|
||||
count = 12;
|
||||
string str = "";
|
||||
for (int i = 0; i < count; i++) {
|
||||
if (count < 1 || count > 12) {
|
||||
await e.Channel.SendMessage("Number must be between 0 and 12");
|
||||
return;
|
||||
}
|
||||
|
||||
var str = "";
|
||||
for (var i = 0; i < count; i++) {
|
||||
str += firestr;
|
||||
}
|
||||
await e.Channel.SendMessage(str);
|
||||
@ -299,22 +242,29 @@ namespace NadekoBot.Modules {
|
||||
if (string.IsNullOrWhiteSpace(e.GetArg("user")))
|
||||
return;
|
||||
var usr = e.Channel.FindUsers(e.GetArg("user")).FirstOrDefault();
|
||||
string text = "";
|
||||
var text = "";
|
||||
text = usr?.Name ?? e.GetArg("user");
|
||||
await e.Channel.SendFile("ripzor_m8.png", RipName(text, e.GetArg("year") == "" ? null : e.GetArg("year")));
|
||||
await
|
||||
e.Channel.SendFile("ripzor_m8.png",
|
||||
RipName(text, string.IsNullOrWhiteSpace(e.GetArg("year")) ? null : e.GetArg("year")));
|
||||
});
|
||||
if (!NadekoBot.creds.DontJoinServers) {
|
||||
if (!NadekoBot.Creds.DontJoinServers) {
|
||||
cgb.CreateCommand("j")
|
||||
.Description("Joins a server using a code.")
|
||||
.Parameter("id", ParameterType.Required)
|
||||
.Do(async e => {
|
||||
try {
|
||||
await (await client.GetInvite(e.Args[0])).Accept();
|
||||
var invite = await client.GetInvite(e.Args[0]);
|
||||
if (invite != null) {
|
||||
try {
|
||||
await invite.Accept();
|
||||
}
|
||||
catch {
|
||||
await e.Channel.SendMessage("Failed to accept invite.");
|
||||
}
|
||||
await e.Channel.SendMessage("I got in!");
|
||||
return;
|
||||
}
|
||||
catch {
|
||||
await e.Channel.SendMessage("Invalid code.");
|
||||
}
|
||||
await e.Channel.SendMessage("Invalid code.");
|
||||
});
|
||||
}
|
||||
|
||||
@ -329,7 +279,7 @@ namespace NadekoBot.Modules {
|
||||
if (msgs.Count() > 0)
|
||||
msg = msgs.First();
|
||||
else {
|
||||
int attempt = 0;
|
||||
var attempt = 0;
|
||||
Message lastMessage = null;
|
||||
while (msg == null && attempt++ < 5) {
|
||||
var msgsarr = await e.Channel.DownloadMessages(100, lastMessage?.Id);
|
||||
@ -350,7 +300,7 @@ namespace NadekoBot.Modules {
|
||||
.Description("Says bye to someone. **Usage**: @NadekoBot bb @X")
|
||||
.Parameter("ppl", ParameterType.Unparsed)
|
||||
.Do(async e => {
|
||||
string str = "Bye";
|
||||
var str = "Bye";
|
||||
foreach (var u in e.Message.MentionedUsers) {
|
||||
if (u.Id != NadekoBot.Client.CurrentUser.Id)
|
||||
str += " " + u.Mention;
|
||||
@ -367,8 +317,8 @@ namespace NadekoBot.Modules {
|
||||
cgb.CreateCommand("hide")
|
||||
.Description("Hides Nadeko in plain sight!11!!")
|
||||
.Do(async e => {
|
||||
using (Stream ms = Resources.hidden.ToStream(ImageFormat.Png)) {
|
||||
await client.CurrentUser.Edit(NadekoBot.password, avatar: ms);
|
||||
using (var ms = Resources.hidden.ToStream(ImageFormat.Png)) {
|
||||
await client.CurrentUser.Edit(NadekoBot.Creds.Password, avatar: ms);
|
||||
}
|
||||
await e.Channel.SendMessage("*hides*");
|
||||
});
|
||||
@ -376,8 +326,8 @@ namespace NadekoBot.Modules {
|
||||
cgb.CreateCommand("unhide")
|
||||
.Description("Unhides Nadeko in plain sight!1!!1")
|
||||
.Do(async e => {
|
||||
using (FileStream fs = new FileStream("data/avatar.png", FileMode.Open)) {
|
||||
await client.CurrentUser.Edit(NadekoBot.password, avatar: fs);
|
||||
using (var fs = new FileStream("data/avatar.png", FileMode.Open)) {
|
||||
await client.CurrentUser.Edit(NadekoBot.Creds.Password, avatar: fs);
|
||||
}
|
||||
await e.Channel.SendMessage("*unhides*");
|
||||
});
|
||||
@ -385,16 +335,16 @@ namespace NadekoBot.Modules {
|
||||
cgb.CreateCommand("dump")
|
||||
.Description("Dumps all of the invites it can to dump.txt.** Owner Only.**")
|
||||
.Do(async e => {
|
||||
if (NadekoBot.OwnerID != e.User.Id) return;
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
string invites = "";
|
||||
if (!NadekoBot.IsOwner(e.User.Id)) return;
|
||||
var i = 0;
|
||||
var j = 0;
|
||||
var invites = "";
|
||||
foreach (var s in client.Servers) {
|
||||
try {
|
||||
var invite = await s.CreateInvite(0);
|
||||
invites += invite.Url + "\n";
|
||||
i++;
|
||||
} catch {
|
||||
} catch {
|
||||
j++;
|
||||
continue;
|
||||
}
|
||||
@ -407,8 +357,8 @@ namespace NadekoBot.Modules {
|
||||
.Description("Try to get 'abalabahaha'")
|
||||
.Do(async e => {
|
||||
string[] strings = { "ba", "la", "ha" };
|
||||
string construct = "@a";
|
||||
int cnt = rng.Next(4, 7);
|
||||
var construct = "@a";
|
||||
var cnt = rng.Next(4, 7);
|
||||
while (cnt-- > 0) {
|
||||
construct += strings[rng.Next(0, strings.Length)];
|
||||
}
|
||||
@ -426,65 +376,31 @@ namespace NadekoBot.Modules {
|
||||
}
|
||||
await e.Channel.SendMessage(await usr.AvatarUrl.ShortenUrl());
|
||||
});
|
||||
/*
|
||||
string saved = "";
|
||||
cgb.CreateCommand("save")
|
||||
.Description("Saves up to 5 last messages as a quote")
|
||||
.Parameter("number", ParameterType.Required)
|
||||
.Do(e => {
|
||||
var arg = e.GetArg("number");
|
||||
int num;
|
||||
if (!int.TryParse(arg, out num) || num < 1 || num > 5)
|
||||
num = 1;
|
||||
saved = string.Join("\n", e.Channel.Messages.Skip(1).Take(num));
|
||||
});
|
||||
|
||||
cgb.CreateCommand("quote")
|
||||
.Description("Shows the previously saved quote")
|
||||
.Parameter("arg", ParameterType.Required)
|
||||
.Do(async e => {
|
||||
var arg = e.GetArg("arg");
|
||||
await e.Channel.SendMessage("```"+saved+"```");
|
||||
});
|
||||
*/
|
||||
//TODO add eval
|
||||
/*
|
||||
cgb.CreateCommand(">")
|
||||
.Parameter("code", ParameterType.Unparsed)
|
||||
.Do(async e =>
|
||||
{
|
||||
if (e.Message.User.Id == NadekoBot.OwnerId)
|
||||
{
|
||||
var result = await CSharpScript.EvaluateAsync(e.Args[0]);
|
||||
await e.Channel.SendMessage( result?.ToString() ?? "null");
|
||||
return;
|
||||
}
|
||||
});*/
|
||||
});
|
||||
}
|
||||
|
||||
public Stream RipName(string name, string year = null) {
|
||||
Bitmap bm = Resources.rip;
|
||||
var bm = Resources.rip;
|
||||
|
||||
int offset = name.Length * 5;
|
||||
var offset = name.Length * 5;
|
||||
|
||||
int fontSize = 20;
|
||||
var fontSize = 20;
|
||||
|
||||
if (name.Length > 10) {
|
||||
fontSize -= (name.Length - 10) / 2;
|
||||
}
|
||||
|
||||
//TODO use measure string
|
||||
Graphics g = Graphics.FromImage(bm);
|
||||
var g = Graphics.FromImage(bm);
|
||||
g.DrawString(name, new Font("Comic Sans MS", fontSize, FontStyle.Bold), Brushes.Black, 100 - offset, 200);
|
||||
g.DrawString((year == null ? "?" : year) + " - " + DateTime.Now.Year, new Font("Consolas", 12, FontStyle.Bold), Brushes.Black, 80, 235);
|
||||
g.DrawString((year ?? "?") + " - " + DateTime.Now.Year, new Font("Consolas", 12, FontStyle.Bold), Brushes.Black, 80, 235);
|
||||
g.Flush();
|
||||
g.Dispose();
|
||||
|
||||
return bm.ToStream(ImageFormat.Png);
|
||||
}
|
||||
|
||||
private Func<CommandEventArgs, Task> SayYes()
|
||||
private static Func<CommandEventArgs, Task> SayYes()
|
||||
=> async e => await e.Channel.SendMessage("Yes. :)");
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Discord.Modules;
|
||||
using NadekoBot.Extensions;
|
||||
using NadekoBot.Commands;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.IO;
|
||||
|
@ -1,8 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Linq;
|
||||
using Discord.Modules;
|
||||
using Discord.Commands;
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
using Discord;
|
||||
using Discord.Audio;
|
||||
using Discord.Commands;
|
||||
using Discord.Modules;
|
||||
using NadekoBot.Classes;
|
||||
@ -8,7 +7,6 @@ using NadekoBot.Extensions;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Timer = System.Timers.Timer;
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using Discord.Modules;
|
||||
using NadekoBot.Extensions;
|
||||
using Discord.Commands;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NadekoBot.Classes;
|
||||
|
@ -1,11 +1,9 @@
|
||||
using System;
|
||||
using Discord.Modules;
|
||||
using Discord.Commands;
|
||||
using NadekoBot.Extensions;
|
||||
using NadekoBot.Classes;
|
||||
using PermsHandler = NadekoBot.Classes.Permissions.PermissionsHandler;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace NadekoBot.Modules {
|
||||
class PermissionModule : DiscordModule {
|
||||
|
@ -65,7 +65,7 @@ namespace NadekoBot.Modules {
|
||||
.Description("Joins a server")
|
||||
.Parameter("code", Discord.Commands.ParameterType.Required)
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerId) return;
|
||||
if (!NadekoBot.IsOwner(e.User.Id)) return;
|
||||
try {
|
||||
await (await client.GetInvite(e.GetArg("code"))).Accept();
|
||||
} catch (Exception ex) {
|
||||
@ -77,7 +77,7 @@ namespace NadekoBot.Modules {
|
||||
.Description("Bind a trello bot to a single channel. You will receive notifications from your board when something is added or edited.")
|
||||
.Parameter("board_id", Discord.Commands.ParameterType.Required)
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerId) return;
|
||||
if (!NadekoBot.IsOwner(e.User.Id)) return;
|
||||
if (bound != null) return;
|
||||
try {
|
||||
bound = e.Channel;
|
||||
@ -93,7 +93,7 @@ namespace NadekoBot.Modules {
|
||||
cgb.CreateCommand("unbind")
|
||||
.Description("Unbinds a bot from the channel and board.")
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerId) return;
|
||||
if (!NadekoBot.IsOwner(e.User.Id)) return;
|
||||
if (bound == null || bound != e.Channel) return;
|
||||
t.Stop();
|
||||
bound = null;
|
||||
@ -106,7 +106,7 @@ namespace NadekoBot.Modules {
|
||||
.Alias("list")
|
||||
.Description("Lists all lists yo ;)")
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerId) return;
|
||||
if (!NadekoBot.IsOwner(e.User.Id)) return;
|
||||
if (bound == null || board == null || bound != e.Channel) return;
|
||||
await e.Channel.SendMessage("Lists for a board '" + board.Name + "'\n" + string.Join("\n", board.Lists.Select(l => "**• " + l.ToString() + "**")));
|
||||
});
|
||||
@ -115,7 +115,7 @@ namespace NadekoBot.Modules {
|
||||
.Description("Lists all cards from the supplied list. You can supply either a name or an index.")
|
||||
.Parameter("list_name", Discord.Commands.ParameterType.Unparsed)
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerId) return;
|
||||
if (!NadekoBot.IsOwner(e.User.Id)) return;
|
||||
if (bound == null || board == null || bound != e.Channel || e.GetArg("list_name") == null) return;
|
||||
|
||||
int num;
|
||||
|
@ -6,69 +6,54 @@ using Discord.Commands;
|
||||
using NadekoBot.Modules;
|
||||
using Discord.Modules;
|
||||
using Discord.Audio;
|
||||
using NadekoBot.Extensions;
|
||||
using System.Timers;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using NadekoBot.Classes;
|
||||
using NadekoBot.Classes.JSONModels;
|
||||
|
||||
namespace NadekoBot {
|
||||
public class NadekoBot {
|
||||
public static DiscordClient Client;
|
||||
public static string botMention;
|
||||
public static string GoogleAPIKey = null;
|
||||
public static Channel OwnerPrivateChannel = null;
|
||||
public static string TrelloAppKey;
|
||||
public static bool ForwardMessages = false;
|
||||
public static Credentials Creds { get; set; }
|
||||
public static string BotMention { get; set; } = "";
|
||||
|
||||
private static Channel OwnerPrivateChannel { get; set; }
|
||||
|
||||
static void Main() {
|
||||
//load credentials from credentials.json
|
||||
bool loadTrello = false;
|
||||
try {
|
||||
//load credentials from credentials.json
|
||||
Creds = JsonConvert.DeserializeObject<Credentials>(File.ReadAllText("credentials.json"));
|
||||
botMention = Creds.BotMention;
|
||||
if (string.IsNullOrWhiteSpace(Creds.GoogleAPIKey)) {
|
||||
Console.WriteLine("No google api key found. You will not be able to use music and links won't be shortened.");
|
||||
}
|
||||
else {
|
||||
Console.WriteLine("Google API key provided.");
|
||||
GoogleAPIKey = Creds.GoogleAPIKey;
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(Creds.TrelloAppKey)) {
|
||||
Console.WriteLine("No trello appkey found. You will not be able to use trello commands.");
|
||||
}
|
||||
else {
|
||||
Console.WriteLine("Trello app key provided.");
|
||||
TrelloAppKey = Creds.TrelloAppKey;
|
||||
loadTrello = true;
|
||||
}
|
||||
if (Creds.ForwardMessages != true)
|
||||
Console.WriteLine("Not forwarding messages.");
|
||||
else {
|
||||
ForwardMessages = true;
|
||||
Console.WriteLine("Forwarding messages.");
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(Creds.SoundCloudClientID))
|
||||
Console.WriteLine("No soundcloud Client ID found. Soundcloud streaming is disabled.");
|
||||
else
|
||||
Console.WriteLine("SoundCloud streaming enabled.");
|
||||
}
|
||||
catch (Exception ex) {
|
||||
} catch (Exception ex) {
|
||||
Console.WriteLine($"Failed to load stuff from credentials.json, RTFM\n{ex.Message}");
|
||||
Console.ReadKey();
|
||||
return;
|
||||
}
|
||||
|
||||
//create new discord client
|
||||
Console.WriteLine(string.IsNullOrWhiteSpace(Creds.GoogleAPIKey)
|
||||
? "No google api key found. You will not be able to use music and links won't be shortened."
|
||||
: "Google API key provided.");
|
||||
Console.WriteLine(string.IsNullOrWhiteSpace(Creds.TrelloAppKey)
|
||||
? "No trello appkey found. You will not be able to use trello commands."
|
||||
: "Trello app key provided.");
|
||||
Console.WriteLine(Creds.ForwardMessages != true
|
||||
? "Not forwarding messages."
|
||||
: "Forwarding private messages to owner.");
|
||||
Console.WriteLine(string.IsNullOrWhiteSpace(Creds.SoundCloudClientID)
|
||||
? "No soundcloud Client ID found. Soundcloud streaming is disabled."
|
||||
: "SoundCloud streaming enabled.");
|
||||
|
||||
BotMention = $"<@{Creds.BotId}>";
|
||||
|
||||
//create new discord client and log
|
||||
Client = new DiscordClient(new DiscordConfigBuilder() {
|
||||
MessageCacheSize = 20,
|
||||
LogLevel = LogSeverity.Warning,
|
||||
LogHandler = (s, e) => {
|
||||
try {
|
||||
Console.WriteLine($"Severity: {e.Severity}\nMessage: {e.Message}\nExceptionMessage: {e.Exception?.Message ?? "-"}");//\nException: {(e.Exception?.ToString() ?? "-")}");
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
LogHandler = (s, e) =>
|
||||
Console.WriteLine($"Severity: {e.Severity}" +
|
||||
$"Message: {e.Message}" +
|
||||
$"ExceptionMessage: {e.Exception?.Message ?? "-"}"),
|
||||
});
|
||||
|
||||
//create a command service
|
||||
@ -77,14 +62,13 @@ namespace NadekoBot {
|
||||
CustomPrefixHandler = m => 0,
|
||||
HelpMode = HelpMode.Disabled,
|
||||
ErrorHandler = async (s, e) => {
|
||||
if (e.ErrorType != CommandErrorType.BadPermissions)
|
||||
return;
|
||||
if (string.IsNullOrWhiteSpace(e.Exception?.Message))
|
||||
return;
|
||||
try {
|
||||
if (e.ErrorType != CommandErrorType.BadPermissions)
|
||||
return;
|
||||
if (string.IsNullOrWhiteSpace(e.Exception.Message))
|
||||
return;
|
||||
await e.Channel.SendMessage(e.Exception.Message);
|
||||
}
|
||||
catch { }
|
||||
} catch { }
|
||||
}
|
||||
});
|
||||
|
||||
@ -92,13 +76,13 @@ namespace NadekoBot {
|
||||
Client.MessageReceived += Client_MessageReceived;
|
||||
|
||||
//add command service
|
||||
var commands = Client.AddService<CommandService>(commandService);
|
||||
Client.AddService<CommandService>(commandService);
|
||||
|
||||
//create module service
|
||||
var modules = Client.AddService<ModuleService>(new ModuleService());
|
||||
|
||||
//add audio service
|
||||
var audio = Client.AddService<AudioService>(new AudioService(new AudioServiceConfigBuilder() {
|
||||
Client.AddService<AudioService>(new AudioService(new AudioServiceConfigBuilder() {
|
||||
Channels = 2,
|
||||
EnableEncryption = false,
|
||||
EnableMultiserver = true,
|
||||
@ -114,16 +98,15 @@ namespace NadekoBot {
|
||||
modules.Add(new Games(), "Games", ModuleFilter.None);
|
||||
modules.Add(new Music(), "Music", ModuleFilter.None);
|
||||
modules.Add(new Searches(), "Searches", ModuleFilter.None);
|
||||
if (loadTrello)
|
||||
modules.Add(new Trello(), "Trello", ModuleFilter.None);
|
||||
modules.Add(new NSFW(), "NSFW", ModuleFilter.None);
|
||||
if (!string.IsNullOrWhiteSpace(Creds.TrelloAppKey))
|
||||
modules.Add(new Trello(), "Trello", ModuleFilter.None);
|
||||
|
||||
//run the bot
|
||||
Client.ExecuteAndWait(async () => {
|
||||
try {
|
||||
await Client.Connect(Creds.Username, Creds.Password);
|
||||
}
|
||||
catch (Exception ex) {
|
||||
} catch (Exception ex) {
|
||||
Console.WriteLine($"Probably wrong EMAIL or PASSWORD.\n{ex.Message}");
|
||||
Console.ReadKey();
|
||||
Console.WriteLine(ex);
|
||||
@ -135,47 +118,36 @@ namespace NadekoBot {
|
||||
Console.WriteLine("-----------------");
|
||||
|
||||
try {
|
||||
OwnerPrivateChannel = await Client.CreatePrivateChannel(OwnerId);
|
||||
}
|
||||
catch {
|
||||
Console.WriteLine("Failed creating private channel with the owner");
|
||||
OwnerPrivateChannel = await Client.CreatePrivateChannel(Creds.OwnerIds[0]);
|
||||
} catch {
|
||||
Console.WriteLine("Failed creating private channel with the first owner listed in credentials.json");
|
||||
}
|
||||
|
||||
Classes.Permissions.PermissionsHandler.Initialize();
|
||||
|
||||
Client.ClientAPI.SendingRequest += (s, e) => {
|
||||
|
||||
try {
|
||||
var request = e.Request as Discord.API.Client.Rest.SendMessageRequest;
|
||||
if (request != null) {
|
||||
//@everyοne
|
||||
request.Content = request.Content?.Replace("@everyone", "@everryone") ?? "_error_";
|
||||
if (string.IsNullOrWhiteSpace(request.Content))
|
||||
e.Cancel = true;
|
||||
//else
|
||||
// Console.WriteLine("Sending request");
|
||||
}
|
||||
}
|
||||
catch {
|
||||
Console.WriteLine("SENDING REQUEST ERRORED!!!!");
|
||||
}
|
||||
var request = e.Request as Discord.API.Client.Rest.SendMessageRequest;
|
||||
if (request == null) return;
|
||||
request.Content = request.Content?.Replace("@everyone", "@everyοne") ?? "_error_";
|
||||
if (string.IsNullOrWhiteSpace(request.Content))
|
||||
e.Cancel = true;
|
||||
};
|
||||
|
||||
//client.ClientAPI.SentRequest += (s, e) => {
|
||||
// try {
|
||||
// var request = e.Request as Discord.API.Client.Rest.SendMessageRequest;
|
||||
// if (request != null) {
|
||||
// Console.WriteLine("Sent.");
|
||||
// }
|
||||
// }
|
||||
// catch { Console.WriteLine("SENT REQUEST ERRORED!!!"); }
|
||||
//};
|
||||
});
|
||||
Console.WriteLine("Exiting...");
|
||||
Console.ReadKey();
|
||||
}
|
||||
|
||||
static bool repliedRecently = false;
|
||||
public static bool IsOwner(ulong id) => Creds.OwnerIds.Contains(id);
|
||||
|
||||
public static bool IsOwner(User u) => IsOwner(u.Id);
|
||||
|
||||
public async Task SendMessageToOwner(string message) {
|
||||
if (ForwardMessages && OwnerPrivateChannel != null)
|
||||
await OwnerPrivateChannel.SendMessage(message);
|
||||
}
|
||||
|
||||
private static bool repliedRecently = false;
|
||||
|
||||
private static async void Client_MessageReceived(object sender, MessageEventArgs e) {
|
||||
try {
|
||||
if (e.Server != null || e.User.Id == Client.CurrentUser.Id) return;
|
||||
@ -193,8 +165,7 @@ namespace NadekoBot {
|
||||
await (await Client.GetInvite(e.Message.Text)).Accept();
|
||||
await e.Channel.SendMessage("I got in!");
|
||||
return;
|
||||
}
|
||||
catch {
|
||||
} catch {
|
||||
if (e.User.Id == 109338686889476096) { //carbonitex invite
|
||||
await e.Channel.SendMessage("Failed to join the server.");
|
||||
return;
|
||||
@ -205,23 +176,15 @@ namespace NadekoBot {
|
||||
if (ForwardMessages && OwnerPrivateChannel != null)
|
||||
await OwnerPrivateChannel.SendMessage(e.User + ": ```\n" + e.Message.Text + "\n```");
|
||||
|
||||
if (!repliedRecently) {
|
||||
if (repliedRecently) return;
|
||||
|
||||
repliedRecently = true;
|
||||
await e.Channel.SendMessage(HelpCommand.HelpString);
|
||||
await Task.Run(async () => {
|
||||
await Task.Delay(2000);
|
||||
repliedRecently = true;
|
||||
await e.Channel.SendMessage("**FULL LIST OF COMMANDS**:\n❤ <https://gist.github.com/Kwoth/1ab3a38424f208802b74> ❤\n\n⚠**COMMANDS DO NOT WORK IN PERSONAL MESSAGES**\n\n\n**Bot Creator's server:** <https://discord.gg/0ehQwTK2RBjAxzEY>");
|
||||
Timer t = new Timer();
|
||||
t.Interval = 2000;
|
||||
t.Start();
|
||||
t.Elapsed += (s, ev) => {
|
||||
try {
|
||||
repliedRecently = false;
|
||||
t.Stop();
|
||||
t.Dispose();
|
||||
}
|
||||
catch { }
|
||||
};
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
});
|
||||
} catch { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -117,6 +117,9 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="Classes\DBHandler.cs" />
|
||||
<Compile Include="Classes\FlowersHandler.cs" />
|
||||
<Compile Include="Classes\JSONModels\AnimeResult.cs" />
|
||||
<Compile Include="Classes\JSONModels\MangaResult.cs" />
|
||||
<Compile Include="Classes\JSONModels\_JSONModels.cs" />
|
||||
<Compile Include="Classes\Music\MusicControls.cs" />
|
||||
<Compile Include="Classes\Music\Song.cs" />
|
||||
<Compile Include="Classes\Music\StreamRequest.cs" />
|
||||
@ -147,7 +150,6 @@
|
||||
<Compile Include="Commands\RequestsCommand.cs" />
|
||||
<Compile Include="Commands\ServerGreetCommand.cs" />
|
||||
<Compile Include="Commands\SpeedTyping.cs" />
|
||||
<Compile Include="Classes\_JSONModels.cs" />
|
||||
<Compile Include="Classes\Cards.cs" />
|
||||
<Compile Include="Classes\Extensions.cs" />
|
||||
<Compile Include="Commands\CopyCommand.cs" />
|
||||
|
@ -1,5 +1,4 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
|
Loading…
Reference in New Issue
Block a user