module discord.w.bot;

import discord.w.api;
import discord.w.gateway;
import discord.w.types;

struct DiscordBot
{
	string token;
	DiscordGateway gateway;

	ChannelAPI[Snowflake] channelAPIs;

	ChannelAPI channel(Snowflake id) @safe
	{
		auto api = id in channelAPIs;
		if (api)
			return *api;
		return channelAPIs[id] = ChannelAPI(id, authBot(token));
	}

	GuildAPI[Snowflake] guildAPIs;

	GuildAPI guild(Snowflake id) @safe
	{
		auto api = id in guildAPIs;
		if (api)
			return *api;
		return guildAPIs[id] = GuildAPI(id, authBot(token));
}
}

DiscordBot makeBot(string token, DiscordGateway gateway)
{
	DiscordBot ret;
	ret.token = token;
	ret.gateway = gateway;
	ret.gateway.connect();
	return ret;
}

DiscordBot makeBot(Gateway : DiscordGateway = DiscordGateway)(string token)
{
	return makeBot(token, new Gateway(token));
}