Restructured folders and project names, ci should be fixed

This commit is contained in:
Kwoth
2021-06-17 23:40:48 +02:00
parent 7aca29ae8a
commit 91ecf9ca41
788 changed files with 204 additions and 146 deletions

View File

@@ -0,0 +1,25 @@
using NadekoBot.Core.Services.Database.Models;
namespace NadekoBot.Modules.Xp
{
public class FullUserStats
{
public DiscordUser User { get; }
public UserXpStats FullGuildStats { get; }
public LevelStats Global { get; }
public LevelStats Guild { get; }
public int GlobalRanking { get; }
public int GuildRanking { get; }
public FullUserStats(DiscordUser usr, UserXpStats fullGuildStats, LevelStats global,
LevelStats guild, int globalRanking, int guildRanking)
{
User = usr;
Global = global;
Guild = guild;
GlobalRanking = globalRanking;
GuildRanking = guildRanking;
FullGuildStats = fullGuildStats;
}
}
}

View File

@@ -0,0 +1,40 @@
using NadekoBot.Modules.Xp.Services;
namespace NadekoBot.Modules.Xp
{
public class LevelStats
{
public int Level { get; }
public int LevelXp { get; }
public int RequiredXp { get; }
public int TotalXp { get; }
public LevelStats(int xp)
{
if (xp < 0)
xp = 0;
TotalXp = xp;
const int baseXp = XpService.XP_REQUIRED_LVL_1;
var required = baseXp;
var totalXp = 0;
var lvl = 1;
while (true)
{
required = (int)(baseXp + baseXp / 4.0 * (lvl - 1));
if (required + totalXp > xp)
break;
totalXp += required;
lvl++;
}
Level = lvl - 1;
LevelXp = xp - totalXp;
RequiredXp = required;
}
}
}

View File

@@ -0,0 +1,25 @@
using NadekoBot.Common.Yml;
namespace NadekoBot.Modules.Xp
{
public sealed class XpConfig
{
[Comment(@"DO NOT CHANGE")]
public int Version { get; set; } = 2;
[Comment(@"How much XP will the users receive per message")]
public int XpPerMessage { get; set; } = 3;
[Comment(@"How often can the users receive XP in minutes")]
public int MessageXpCooldown { get; set; } = 5;
[Comment(@"Amount of xp users gain from posting an image")]
public int XpFromImage { get; set; } = 0;
[Comment(@"Average amount of xp earned per minute in VC")]
public double VoiceXpPerMinute { get; set; } = 0;
[Comment(@"The maximum amount of minutes the bot will keep track of a user in a voice channel")]
public int VoiceMaxMinutes { get; set; } = 720;
}
}

View File

@@ -0,0 +1,297 @@
using System;
using Newtonsoft.Json;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
namespace NadekoBot.Core.Modules.Xp
{
public class XpTemplate
{
[JsonProperty("output_size")]
public XpTemplatePos OutputSize { get; set; } = new XpTemplatePos
{
X = 450,
Y = 220,
};
public XpTemplateUser User { get; set; } = new XpTemplateUser
{
Name = new XpTemplateText
{
FontSize = 50,
Show = true,
Pos = new XpTemplatePos
{
X = 130,
Y = 17,
}
},
Icon = new XpTemplateIcon
{
Show = true,
Pos = new XpTemplatePos
{
X = 32,
Y = 10,
},
Size = new XpTemplatePos
{
X = 69,
Y = 70,
}
},
GuildLevel = new XpTemplateText
{
Show = true,
FontSize = 45,
Pos = new XpTemplatePos
{
X = 47,
Y = 297,
}
},
GlobalLevel = new XpTemplateText
{
Show = true,
FontSize = 45,
Pos = new XpTemplatePos
{
X = 47,
Y = 149,
}
},
GuildRank = new XpTemplateText
{
Show = true,
FontSize = 30,
Pos = new XpTemplatePos
{
X = 148,
Y = 326,
}
},
GlobalRank = new XpTemplateText
{
Show = true,
FontSize = 30,
Pos = new XpTemplatePos
{
X = 148,
Y = 179,
}
},
TimeOnLevel = new XpTemplateTimeOnLevel
{
Format = "{0}d{1}h{2}m",
Global = new XpTemplateText
{
FontSize = 20,
Show = true,
Pos = new XpTemplatePos
{
X = 50,
Y = 204
}
},
Guild = new XpTemplateText
{
FontSize = 20,
Show = true,
Pos = new XpTemplatePos
{
X = 50,
Y = 351
}
}
},
Xp = new XpTemplateXP
{
Bar = new XpTemplateXpBar
{
Show = true,
Global = new XpBar
{
Direction = XpTemplateDirection.Right,
Length = 450,
Color = new Rgba32(0, 0, 0, 0.4f),
PointA = new XpTemplatePos
{
X = 321,
Y = 104
},
PointB = new XpTemplatePos
{
X = 286,
Y = 235
}
},
Guild = new XpBar
{
Direction = XpTemplateDirection.Right,
Length = 450,
Color = new Rgba32(0, 0, 0, 0.4f),
PointA = new XpTemplatePos
{
X = 282,
Y = 248
},
PointB = new XpTemplatePos
{
X = 247,
Y = 379
}
}
},
Global = new XpTemplateText
{
Show = true,
FontSize = 50,
Pos = new XpTemplatePos
{
X = 430,
Y = 142
}
},
Guild = new XpTemplateText
{
Show = true,
FontSize = 50,
Pos = new XpTemplatePos
{
X = 400,
Y = 282
}
},
Awarded = new XpTemplateText
{
Show = true,
FontSize = 25,
Pos = new XpTemplatePos
{
X = 445,
Y = 347
}
}
}
};
public XpTemplateClub Club { get; set; } = new XpTemplateClub
{
Icon = new XpTemplateIcon
{
Show = true,
Pos = new XpTemplatePos
{
X = 722,
Y = 25,
},
Size = new XpTemplatePos
{
X = 45,
Y = 45,
}
},
Name = new XpTemplateText
{
FontSize = 35,
Pos = new XpTemplatePos
{
X = 650,
Y = 49
},
Show = true,
}
};
}
public class XpTemplateIcon
{
public bool Show { get; set; }
public XpTemplatePos Pos { get; set; }
public XpTemplatePos Size { get; set; }
}
public class XpTemplatePos
{
public int X { get; set; }
public int Y { get; set; }
}
public class XpTemplateUser
{
public XpTemplateText Name { get; set; }
public XpTemplateIcon Icon { get; set; }
public XpTemplateText GlobalLevel { get; set; }
public XpTemplateText GuildLevel { get; set; }
public XpTemplateText GlobalRank { get; set; }
public XpTemplateText GuildRank { get; set; }
public XpTemplateTimeOnLevel TimeOnLevel { get; set; }
public XpTemplateXP Xp { get; set; }
}
public class XpTemplateTimeOnLevel
{
public string Format { get; set; }
public XpTemplateText Global { get; set; }
public XpTemplateText Guild { get; set; }
}
public class XpTemplateClub
{
public XpTemplateIcon Icon { get; set; }
public XpTemplateText Name { get; set; }
}
public class XpTemplateText
{
[JsonConverter(typeof(XpRgba32Converter))]
public Rgba32 Color { get; set; } = SixLabors.ImageSharp.Color.White;
public bool Show { get; set; }
public int FontSize { get; set; }
public XpTemplatePos Pos { get; set; }
}
public class XpTemplateXP
{
public XpTemplateXpBar Bar { get; set; }
public XpTemplateText Global { get; set; }
public XpTemplateText Guild { get; set; }
public XpTemplateText Awarded { get; set; }
}
public class XpTemplateXpBar
{
public bool Show { get; set; }
public XpBar Global { get; set; }
public XpBar Guild { get; set; }
}
public class XpBar
{
[JsonConverter(typeof(XpRgba32Converter))]
public Rgba32 Color { get; set; }
public XpTemplatePos PointA { get; set; }
public XpTemplatePos PointB { get; set; }
public int Length { get; set; }
public XpTemplateDirection Direction { get; set; }
}
public enum XpTemplateDirection
{
Up,
Down,
Left,
Right
}
public class XpRgba32Converter : JsonConverter<Rgba32>
{
public override Rgba32 ReadJson(JsonReader reader, Type objectType, Rgba32 existingValue, bool hasExistingValue, JsonSerializer serializer)
{
return Color.ParseHex(reader.Value.ToString());
}
public override void WriteJson(JsonWriter writer, Rgba32 value, JsonSerializer serializer)
{
writer.WriteValue(value.ToHex().ToLowerInvariant());
}
}
}