Started adding trello support. Maybe will rewrite.
This commit is contained in:
parent
7454f5611d
commit
9e870cfc87
@ -10,6 +10,7 @@
|
||||
public bool Crawl;
|
||||
public string ParseID;
|
||||
public string ParseKey;
|
||||
public string TrelloAppKey;
|
||||
}
|
||||
public class AnimeResult
|
||||
{
|
||||
|
136
NadekoBot/Modules/Trello.cs
Normal file
136
NadekoBot/Modules/Trello.cs
Normal file
@ -0,0 +1,136 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Discord.Modules;
|
||||
using Manatee.Trello.ManateeJson;
|
||||
using Manatee.Trello;
|
||||
using System.Timers;
|
||||
|
||||
namespace NadekoBot.Modules {
|
||||
class Trello : DiscordModule {
|
||||
public override void Install(ModuleManager manager) {
|
||||
|
||||
var client = manager.Client;
|
||||
|
||||
var serializer = new ManateeSerializer();
|
||||
TrelloConfiguration.Serializer = serializer;
|
||||
TrelloConfiguration.Deserializer = serializer;
|
||||
TrelloConfiguration.JsonFactory = new ManateeFactory();
|
||||
TrelloConfiguration.RestClientProvider = new Manatee.Trello.WebApi.WebApiClientProvider();
|
||||
TrelloAuthorization.Default.AppKey = NadekoBot.TrelloAppKey;
|
||||
//TrelloAuthorization.Default.UserToken = "[your user token]";
|
||||
|
||||
Discord.Channel bound = null;
|
||||
Board board = null;
|
||||
|
||||
Timer t = new Timer();
|
||||
t.Interval = 2000;
|
||||
List<string> last5ActionIDs = null;
|
||||
t.Elapsed += async (s, e) => {
|
||||
try {
|
||||
if (board == null || bound == null)
|
||||
return; //do nothing if there is no bound board
|
||||
|
||||
board.Refresh();
|
||||
IEnumerable<Manatee.Trello.Action> cur5Actions;
|
||||
if (board.Actions.Count() < 5)
|
||||
cur5Actions = board.Actions.Take(board.Actions.Count());
|
||||
else
|
||||
cur5Actions = board.Actions.Take(5);
|
||||
|
||||
if (last5ActionIDs == null) {
|
||||
last5ActionIDs = new List<string>();
|
||||
foreach (var a in cur5Actions)
|
||||
last5ActionIDs.Add(a.Id);
|
||||
return;
|
||||
}
|
||||
foreach (var a in cur5Actions.Where(ca => !last5ActionIDs.Contains(ca.Id))) {
|
||||
await bound.Send("**--TRELLO NOTIFICATION--**\n" + a.ToString());
|
||||
}
|
||||
last5ActionIDs.Clear();
|
||||
foreach (var a in cur5Actions)
|
||||
last5ActionIDs.Add(a.Id);
|
||||
} catch (Exception ex) {
|
||||
Console.WriteLine("Timer failed " + ex.ToString());
|
||||
}
|
||||
};
|
||||
|
||||
manager.CreateCommands("", cgb => {
|
||||
cgb.CreateCommand("join")
|
||||
.Alias("j")
|
||||
.Description("Joins a server")
|
||||
.Parameter("code", Discord.Commands.ParameterType.Required)
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID) return;
|
||||
try {
|
||||
await (await client.GetInvite(e.GetArg("code"))).Accept();
|
||||
} catch (Exception ex) {
|
||||
Console.WriteLine(ex.ToString());
|
||||
}
|
||||
});
|
||||
|
||||
cgb.CreateCommand("bind")
|
||||
.Description("Bind a trello bot to a certain channel. Bot will operate only in 1 channel at a time")
|
||||
.Parameter("board_id", Discord.Commands.ParameterType.Required)
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID) return;
|
||||
if (bound != null) return;
|
||||
try {
|
||||
bound = e.Channel;
|
||||
board = new Board(e.GetArg("board_id").Trim());
|
||||
board.Refresh();
|
||||
await e.Send("Successfully bound to this channel and board " + board.Name);
|
||||
t.Start();
|
||||
} catch (Exception ex) {
|
||||
Console.WriteLine("Failed to join the board. " + ex.ToString());
|
||||
}
|
||||
});
|
||||
|
||||
cgb.CreateCommand("unbind")
|
||||
.Description("Unbinds a bot from the channel and board.")
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID) return;
|
||||
if (bound == null || bound != e.Channel) return;
|
||||
t.Stop();
|
||||
bound = null;
|
||||
board = null;
|
||||
await e.Send("Successfully unbound trello from this channel.");
|
||||
|
||||
});
|
||||
|
||||
cgb.CreateCommand("lists")
|
||||
.Alias("list")
|
||||
.Description("Lists all lists yo ;)")
|
||||
.Do(async e => {
|
||||
if (e.User.Id != NadekoBot.OwnerID) return;
|
||||
if (bound == null || board == null || bound != e.Channel) return;
|
||||
await e.Send("Lists for a board '" + board.Name + "'\n" + string.Join("\n", board.Lists.Select(l => "**• " + l.ToString() + "**")));
|
||||
});
|
||||
|
||||
cgb.CreateCommand("cards")
|
||||
.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 (bound == null || board == null || bound != e.Channel || e.GetArg("list_name") == null) return;
|
||||
|
||||
int num;
|
||||
var success = int.TryParse(e.GetArg("list_name"), out num);
|
||||
List list = null;
|
||||
if (success && num <= board.Lists.Count() && num > 0)
|
||||
list = board.Lists[num - 1];
|
||||
else
|
||||
list = board.Lists.Where(l => l.Name == e.GetArg("list_name")).FirstOrDefault();
|
||||
|
||||
|
||||
if (list != null)
|
||||
await e.Send("There are " + list.Cards.Count() + " cards in a **" + list.Name + "** list\n" + string.Join("\n", list.Cards.Select(c => "**• " + c.ToString() + "**")));
|
||||
else
|
||||
await e.Send("No such list.");
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@ -20,11 +20,13 @@ namespace NadekoBot
|
||||
public static string GoogleAPIKey = null;
|
||||
public static ulong OwnerID;
|
||||
public static string password;
|
||||
public static string TrelloAppKey;
|
||||
|
||||
static void Main()
|
||||
{
|
||||
//load credentials from credentials.json
|
||||
Credentials c;
|
||||
bool trelloLoaded = false;
|
||||
try
|
||||
{
|
||||
c = JsonConvert.DeserializeObject<Credentials>(File.ReadAllText("credentials.json"));
|
||||
@ -34,6 +36,12 @@ namespace NadekoBot
|
||||
} else {
|
||||
GoogleAPIKey = c.GoogleAPIKey;
|
||||
}
|
||||
if (c.TrelloAppKey == null || c.TrelloAppKey == "") {
|
||||
Console.WriteLine("No trello appkey found. You will not be able to use trello commands.");
|
||||
} else {
|
||||
TrelloAppKey = c.TrelloAppKey;
|
||||
trelloLoaded = true;
|
||||
}
|
||||
OwnerID = c.OwnerID;
|
||||
password = c.Password;
|
||||
}
|
||||
@ -86,6 +94,8 @@ namespace NadekoBot
|
||||
modules.Install(new Games(), "Games", FilterType.Unrestricted);
|
||||
modules.Install(new Music(), "Music", FilterType.Unrestricted);
|
||||
modules.Install(new Searches(), "Searches", FilterType.Unrestricted);
|
||||
if(trelloLoaded)
|
||||
modules.Install(new Trello(), "Trello", FilterType.Unrestricted);
|
||||
|
||||
//run the bot
|
||||
client.Run(async () =>
|
||||
@ -97,6 +107,7 @@ namespace NadekoBot
|
||||
Console.ReadKey();
|
||||
}
|
||||
static bool repliedRecently = false;
|
||||
|
||||
private static async void Client_MessageReceived(object sender, MessageEventArgs e) {
|
||||
if (e.Server != null) return;
|
||||
try {
|
||||
|
@ -1,5 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Manatee.Json" version="3.2.1" targetFramework="net452" />
|
||||
<package id="Manatee.StateMachine" version="1.1.2" targetFramework="net452" />
|
||||
<package id="Manatee.Trello" version="1.8.2" targetFramework="net452" />
|
||||
<package id="Manatee.Trello.ManateeJson" version="1.4.0" targetFramework="net452" />
|
||||
<package id="Manatee.Trello.WebApi" version="1.0.1" targetFramework="net452" />
|
||||
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
|
||||
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
|
||||
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net452" />
|
||||
<package id="Parse" version="1.6.2" targetFramework="net452" />
|
||||
<package id="RestSharp" version="105.2.3" targetFramework="net452" />
|
||||
|
Loading…
Reference in New Issue
Block a user