74 lines
2.5 KiB
C#
74 lines
2.5 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using Discord.Rest;
|
|
#if IXTEST
|
|
namespace Discord
|
|
{
|
|
public partial class TestsFixture
|
|
{
|
|
public const uint MigrationCount = 3;
|
|
|
|
public async Task MigrateAsync()
|
|
{
|
|
DiscordRestClient client = null;
|
|
RestGuild guild = null;
|
|
|
|
await _cache.LoadInfoAsync(_config.GuildId).ConfigureAwait(false);
|
|
while (_cache.Info.Version != MigrationCount)
|
|
{
|
|
if (client == null)
|
|
{
|
|
client = new DiscordRestClient();
|
|
await client.LoginAsync(TokenType.Bot, _config.Token).ConfigureAwait(false);
|
|
guild = await client.GetGuildAsync(_config.GuildId);
|
|
}
|
|
|
|
uint nextVer = _cache.Info.Version + 1;
|
|
try
|
|
{
|
|
await DoMigrateAsync(client, guild, nextVer).ConfigureAwait(false);
|
|
_cache.Info.Version = nextVer;
|
|
await _cache.SaveInfoAsync().ConfigureAwait(false);
|
|
}
|
|
catch
|
|
{
|
|
await _cache.ClearAsync().ConfigureAwait(false);
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static Task DoMigrateAsync(DiscordRestClient client, RestGuild guild, uint toVersion)
|
|
{
|
|
switch (toVersion)
|
|
{
|
|
case 1: return Migration_WipeGuild(client, guild);
|
|
case 2: return Tests.Migration_CreateTextChannels(client, guild);
|
|
case 3: return Tests.Migration_CreateVoiceChannels(client, guild);
|
|
default: throw new InvalidOperationException("Unknown migration: " + toVersion);
|
|
}
|
|
}
|
|
|
|
private static async Task Migration_WipeGuild(DiscordRestClient client, RestGuild guild)
|
|
{
|
|
var textChannels = await guild.GetTextChannelsAsync();
|
|
var voiceChannels = await guild.GetVoiceChannelsAsync();
|
|
var roles = guild.Roles;
|
|
|
|
foreach (var channel in textChannels)
|
|
{
|
|
//if (channel.Id != guild.DefaultChannelId)
|
|
await channel.DeleteAsync();
|
|
}
|
|
foreach (var channel in voiceChannels)
|
|
await channel.DeleteAsync();
|
|
foreach (var role in roles)
|
|
{
|
|
if (role.Id != guild.EveryoneRole.Id)
|
|
await role.DeleteAsync();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif
|