diff --git a/.gitignore b/.gitignore
index ac19e01..76b1ae2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@ riderModule.iml
/_ReSharper.Caches/
.idea/
.vs/
+/APP.sln.DotSettings.user
diff --git a/0i21ur4fl1x11.png b/0i21ur4fl1x11.png
new file mode 100644
index 0000000..d3dfd54
Binary files /dev/null and b/0i21ur4fl1x11.png differ
diff --git a/APP/APP.csproj b/APP/APP.csproj
index 0434b56..18a249d 100644
--- a/APP/APP.csproj
+++ b/APP/APP.csproj
@@ -11,7 +11,7 @@
Hanami Anime plan program
Hanami
HANAMI
- net6.0-windows7.0
+ net6.0-windows10.0.22000.0
10
7.0
@@ -22,4 +22,23 @@
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
\ No newline at end of file
diff --git a/APP/DTO/Genre.cs b/APP/DTO/Genre.cs
new file mode 100644
index 0000000..106c369
--- /dev/null
+++ b/APP/DTO/Genre.cs
@@ -0,0 +1,10 @@
+using System.Text.Json.Serialization;
+
+namespace APP.DTO;
+
+public class Genre
+{
+ [JsonPropertyName("id")] public int Id { get; set; }
+
+ [JsonPropertyName("name")] public string Name { get; set; }
+}
diff --git a/APP/DTO/SeasonAnime.cs b/APP/DTO/SeasonAnime.cs
new file mode 100644
index 0000000..781450f
--- /dev/null
+++ b/APP/DTO/SeasonAnime.cs
@@ -0,0 +1,58 @@
+using System.Text.Json.Serialization;
+
+namespace APP.DTO;
+
+public class SeasonAnime
+{
+ [JsonPropertyName("anime")] public long Anime { get; set; }
+
+ [JsonPropertyName("title")] public string Title { get; set; }
+
+ [JsonPropertyName("titleEn")] public string TitleEn { get; set; }
+
+ [JsonPropertyName("titleJp")] public string TitleJp { get; set; }
+
+ [JsonPropertyName("imageMedium")] public string ImageMedium { get; set; }
+
+ [JsonPropertyName("imageLarge")] public string ImageLarge { get; set; }
+
+ [JsonPropertyName("imageThumb")] public string? ImageThumb { get; set; }
+
+ [JsonPropertyName("type")] public string Type { get; set; }
+
+ [JsonPropertyName("status")] public string Status { get; set; }
+
+ [JsonPropertyName("episodes")] public int Episodes { get; set; }
+
+ [JsonPropertyName("synopsis")] public string? Synopsis { get; set; }
+
+ [JsonPropertyName("genres")] public List? Genres { get; set; }
+
+ [JsonPropertyName("startDate")] public DateTime StartDate { get; set; }
+
+ [JsonPropertyName("endDate")] public DateTime EndDate { get; set; }
+
+ [JsonPropertyName("year")] public int Year { get; set; }
+
+ [JsonPropertyName("season")] public string SeasonString { get; set; }
+
+ [JsonPropertyName("score")] public double Score { get; set; }
+
+ [JsonPropertyName("scoredBy")] public int ScoredBy { get; set; }
+
+ [JsonPropertyName("rank")] public int Rank { get; set; }
+
+ [JsonPropertyName("popularity")] public int Popularity { get; set; }
+
+ [JsonPropertyName("members")] public int Members { get; set; }
+
+ [JsonPropertyName("source")] public string? Source { get; set; }
+
+ [JsonPropertyName("weekday")] public string? Weekday { get; set; }
+
+ [JsonPropertyName("studios")] public List? Studios { get; set; }
+
+ [JsonPropertyName("trailerUrl")] public string? TrailerUrl { get; set; }
+
+ [JsonPropertyName("trailerEmbedUrl")] public string? TrailerEmbedUrl { get; set; }
+}
diff --git a/APP/DTO/Studio.cs b/APP/DTO/Studio.cs
new file mode 100644
index 0000000..0ef866e
--- /dev/null
+++ b/APP/DTO/Studio.cs
@@ -0,0 +1,10 @@
+using System.Text.Json.Serialization;
+
+namespace APP.DTO;
+
+public class Studio
+{
+ [JsonPropertyName("id")] public int Id { get; set; }
+
+ [JsonPropertyName("name")] public string Name { get; set; }
+}
diff --git a/APP/DTO/User.cs b/APP/DTO/User.cs
new file mode 100644
index 0000000..6cc3e15
--- /dev/null
+++ b/APP/DTO/User.cs
@@ -0,0 +1,24 @@
+using System.Text.Json.Serialization;
+
+namespace APP.DTO;
+
+public class User
+{
+ [JsonPropertyName("id")] public long Id { get; set; }
+
+ [JsonPropertyName("username")] public string Username { get; set; }
+
+ [JsonPropertyName("url")] public string Url { get; set; }
+
+ [JsonPropertyName("imageUrl")] public string ImageUrl { get; set; }
+
+ [JsonPropertyName("lastOnline")] public DateTime LastOnline { get; set; }
+
+ [JsonPropertyName("gender")] public string? Gender { get; set; }
+
+ [JsonPropertyName("birthday")] public DateTime? Birthday { get; set; }
+
+ [JsonPropertyName("location")] public string? Location { get; set; }
+
+ [JsonPropertyName("joined")] public DateTime Joined { get; set; }
+}
diff --git a/APP/Main.Designer.cs b/APP/Main.Designer.cs
index e9387ac..71ba0a3 100644
--- a/APP/Main.Designer.cs
+++ b/APP/Main.Designer.cs
@@ -31,13 +31,20 @@
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main));
this.tabControl = new System.Windows.Forms.TabControl();
this.tabUser = new System.Windows.Forms.TabPage();
+ this.userLinkLabel = new System.Windows.Forms.LinkLabel();
+ this.userLabelInfo = new System.Windows.Forms.Label();
+ this.userLabel = new System.Windows.Forms.Label();
+ this.userImage = new System.Windows.Forms.PictureBox();
this.tabSeason = new System.Windows.Forms.TabPage();
+ this.listViewSeason = new System.Windows.Forms.ListView();
this.tabAddAnime = new System.Windows.Forms.TabPage();
this.menuStrip = new System.Windows.Forms.MenuStrip();
this.memeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.loginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.listViewSeason = new System.Windows.Forms.ListView();
+ this.userLabelInfoData = new System.Windows.Forms.Label();
this.tabControl.SuspendLayout();
+ this.tabUser.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.userImage)).BeginInit();
this.tabSeason.SuspendLayout();
this.menuStrip.SuspendLayout();
this.SuspendLayout();
@@ -56,7 +63,12 @@
//
// tabUser
//
- this.tabUser.BackColor = System.Drawing.SystemColors.ControlDarkDark;
+ this.tabUser.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.tabUser.Controls.Add(this.userLabelInfoData);
+ this.tabUser.Controls.Add(this.userLinkLabel);
+ this.tabUser.Controls.Add(this.userLabelInfo);
+ this.tabUser.Controls.Add(this.userLabel);
+ this.tabUser.Controls.Add(this.userImage);
this.tabUser.Location = new System.Drawing.Point(4, 24);
this.tabUser.Name = "tabUser";
this.tabUser.Padding = new System.Windows.Forms.Padding(3);
@@ -64,6 +76,55 @@
this.tabUser.TabIndex = 0;
this.tabUser.Text = "YOURNAME";
//
+ // userLinkLabel
+ //
+ this.userLinkLabel.AutoSize = true;
+ this.userLinkLabel.LinkColor = System.Drawing.SystemColors.Highlight;
+ this.userLinkLabel.Location = new System.Drawing.Point(264, 51);
+ this.userLinkLabel.Name = "userLinkLabel";
+ this.userLinkLabel.Size = new System.Drawing.Size(60, 15);
+ this.userLinkLabel.TabIndex = 3;
+ this.userLinkLabel.TabStop = true;
+ this.userLinkLabel.Text = "linkLabel1";
+ this.userLinkLabel.Visible = false;
+ this.userLinkLabel.VisitedLinkColor = System.Drawing.SystemColors.Highlight;
+ this.userLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.userLinkLabel_LinkClicked);
+ //
+ // userLabelInfo
+ //
+ this.userLabelInfo.AutoSize = true;
+ this.userLabelInfo.ForeColor = System.Drawing.SystemColors.Control;
+ this.userLabelInfo.Location = new System.Drawing.Point(264, 76);
+ this.userLabelInfo.Name = "userLabelInfo";
+ this.userLabelInfo.Size = new System.Drawing.Size(67, 60);
+ this.userLabelInfo.TabIndex = 2;
+ this.userLabelInfo.Text = "MAL ID:\r\nLast online:\r\nLocation:\r\nJoined:";
+ this.userLabelInfo.Visible = false;
+ //
+ // userLabel
+ //
+ this.userLabel.AutoSize = true;
+ this.userLabel.Font = new System.Drawing.Font("Comic Sans MS", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point);
+ this.userLabel.ForeColor = System.Drawing.SystemColors.Control;
+ this.userLabel.Location = new System.Drawing.Point(264, 18);
+ this.userLabel.Name = "userLabel";
+ this.userLabel.Size = new System.Drawing.Size(123, 27);
+ this.userLabel.TabIndex = 1;
+ this.userLabel.Text = "YOURNAME";
+ this.userLabel.Visible = false;
+ //
+ // userImage
+ //
+ this.userImage.ErrorImage = null;
+ this.userImage.Image = ((System.Drawing.Image)(resources.GetObject("userImage.Image")));
+ this.userImage.InitialImage = null;
+ this.userImage.Location = new System.Drawing.Point(8, 6);
+ this.userImage.Name = "userImage";
+ this.userImage.Size = new System.Drawing.Size(250, 250);
+ this.userImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+ this.userImage.TabIndex = 0;
+ this.userImage.TabStop = false;
+ //
// tabSeason
//
this.tabSeason.BackColor = System.Drawing.SystemColors.ControlDarkDark;
@@ -75,9 +136,24 @@
this.tabSeason.TabIndex = 1;
this.tabSeason.Text = "Season";
//
+ // listViewSeason
+ //
+ this.listViewSeason.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ this.listViewSeason.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.listViewSeason.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.listViewSeason.ForeColor = System.Drawing.SystemColors.Control;
+ this.listViewSeason.GridLines = true;
+ this.listViewSeason.Location = new System.Drawing.Point(3, 3);
+ this.listViewSeason.Name = "listViewSeason";
+ this.listViewSeason.ShowGroups = false;
+ this.listViewSeason.Size = new System.Drawing.Size(814, 513);
+ this.listViewSeason.TabIndex = 0;
+ this.listViewSeason.UseCompatibleStateImageBehavior = false;
+ this.listViewSeason.View = System.Windows.Forms.View.Tile;
+ //
// tabAddAnime
//
- this.tabAddAnime.BackColor = System.Drawing.SystemColors.ControlDarkDark;
+ this.tabAddAnime.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.tabAddAnime.Location = new System.Drawing.Point(4, 24);
this.tabAddAnime.Name = "tabAddAnime";
this.tabAddAnime.Padding = new System.Windows.Forms.Padding(3);
@@ -110,21 +186,22 @@
this.loginToolStripMenuItem.Text = "Login";
this.loginToolStripMenuItem.Click += new System.EventHandler(this.loginToolStripMenuItem_Click);
//
- // listViewSeason
+ // userLabelInfoData
//
- this.listViewSeason.BackColor = System.Drawing.SystemColors.ControlDark;
- this.listViewSeason.Dock = System.Windows.Forms.DockStyle.Fill;
- this.listViewSeason.Location = new System.Drawing.Point(3, 3);
- this.listViewSeason.Name = "listViewSeason";
- this.listViewSeason.Size = new System.Drawing.Size(814, 513);
- this.listViewSeason.TabIndex = 0;
- this.listViewSeason.UseCompatibleStateImageBehavior = false;
+ this.userLabelInfoData.AutoSize = true;
+ this.userLabelInfoData.ForeColor = System.Drawing.SystemColors.Control;
+ this.userLabelInfoData.Location = new System.Drawing.Point(374, 76);
+ this.userLabelInfoData.Name = "userLabelInfoData";
+ this.userLabelInfoData.Size = new System.Drawing.Size(38, 15);
+ this.userLabelInfoData.TabIndex = 4;
+ this.userLabelInfoData.Text = "label1";
+ this.userLabelInfoData.Visible = false;
//
// Main
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.BackColor = System.Drawing.SystemColors.ControlDarkDark;
+ this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.ClientSize = new System.Drawing.Size(828, 571);
this.Controls.Add(this.tabControl);
this.Controls.Add(this.menuStrip);
@@ -132,6 +209,9 @@
this.Name = "Main";
this.Text = "APP - Anime plan program";
this.tabControl.ResumeLayout(false);
+ this.tabUser.ResumeLayout(false);
+ this.tabUser.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.userImage)).EndInit();
this.tabSeason.ResumeLayout(false);
this.menuStrip.ResumeLayout(false);
this.menuStrip.PerformLayout();
@@ -150,5 +230,10 @@
private ToolStripMenuItem memeToolStripMenuItem;
private ToolStripMenuItem loginToolStripMenuItem;
private ListView listViewSeason;
+ private PictureBox userImage;
+ private Label userLabel;
+ private Label userLabelInfo;
+ private LinkLabel userLinkLabel;
+ private Label userLabelInfoData;
}
}
\ No newline at end of file
diff --git a/APP/Main.cs b/APP/Main.cs
index 042a2e4..719080a 100644
--- a/APP/Main.cs
+++ b/APP/Main.cs
@@ -1,25 +1,91 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
+using System.Diagnostics;
+using APP.DTO;
+using APP.Utility;
-namespace APP
+namespace APP;
+
+public partial class Main : Form
{
- public partial class Main : Form
+ private ImageList _imageListSeason;
+ private List? _seasonAnime;
+ private User? _user;
+
+ public Main()
{
- public Main()
+ InitializeComponent();
+ _imageListSeason = new ImageList();
+ Load += OnLoad;
+ }
+
+ private async void OnLoad(object? sender, EventArgs e)
+ {
+ await UpdateData();
+ }
+
+ private async Task UpdateData()
+ {
+ _seasonAnime = await BackendComms.GetSeason();
+ if (_seasonAnime == null)
{
- InitializeComponent();
+ ShowError("Fehler beim Season abrufen");
+ }
+ else
+ {
+ foreach (var anime in _seasonAnime)
+ {
+ //_imageListSeason.Images.Add("", new )
+ listViewSeason.Items.Add(new ListViewItem
+ {
+ Text = anime.Title
+ });
+ }
}
- private void loginToolStripMenuItem_Click(object sender, EventArgs e)
+ _user = await BackendComms.GetUser("ultrasn0w");
+ if (_user == null)
{
- // TODO search for user in backend
+ ShowError("Fehler beim User abrufen");
+ }
+ else
+ {
+ tabUser.Text = _user.Username;
+ userLabel.Text = _user.Username;
+ userLabel.Visible = true;
+ userLinkLabel.Text = _user.Url;
+ userLinkLabel.Visible = true;
+ userLabelInfo.Text = StringAssemble.UserInfo(_user);
+ userLabelInfo.Visible = true;
+ userLabelInfoData.Text = StringAssemble.UserData(_user);
+ userLabelInfoData.Visible = true;
+ userImage.LoadAsync(_user.ImageUrl);
+ }
+ }
+
+ private static void ShowError(string text)
+ {
+ MessageBox.Show(text, @"FEHLER", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+
+ private void loginToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ // TODO search for user in backend
+ }
+
+ private void userLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ if (string.IsNullOrWhiteSpace(_user?.Url)) return;
+ try
+ {
+ var url = new Uri(_user.Url).ToString();
+ var sInfo = new ProcessStartInfo(url)
+ {
+ UseShellExecute = true
+ };
+ Process.Start(sInfo);
+ }
+ catch (Exception ex)
+ {
+ Console.Error.WriteLineAsync(ex.Message);
}
}
}
diff --git a/APP/Main.resx b/APP/Main.resx
index 4c75266..18e31bb 100644
--- a/APP/Main.resx
+++ b/APP/Main.resx
@@ -57,10 +57,171 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ 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
+
+
17, 17
-
AAABAAEAAAAAAAEAIADupQEAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAIABJ
diff --git a/APP/Program.cs b/APP/Program.cs
index c9f8d51..b12a8d8 100644
--- a/APP/Program.cs
+++ b/APP/Program.cs
@@ -3,7 +3,7 @@ namespace APP;
internal static class Program
{
///
- /// The main entry point for the application.
+ /// The main entry point for the application.
///
[STAThread]
private static void Main()
diff --git a/APP/Properties/Resources.Designer.cs b/APP/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..2487693
--- /dev/null
+++ b/APP/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace APP.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("APP.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/APP/Properties/Resources.resx b/APP/Properties/Resources.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/APP/Properties/Resources.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/APP/Utility/BackendComms.cs b/APP/Utility/BackendComms.cs
new file mode 100644
index 0000000..8832a6e
--- /dev/null
+++ b/APP/Utility/BackendComms.cs
@@ -0,0 +1,31 @@
+using System.Net.Http.Json;
+using System.Text.Json;
+using APP.DTO;
+
+namespace APP.Utility;
+
+internal static class BackendComms
+{
+ private const string ApiBaseUrl = "https://huso.hanami.family/api/";
+ private static readonly HttpClient Client = new();
+ private static readonly JsonSerializerOptions JsonSerializerOptions = new() {PropertyNameCaseInsensitive = true};
+
+ internal static async Task?> GetSeason()
+ {
+ var resp = await Client.GetAsync(ApiBaseUrl + "season");
+ if (!resp.IsSuccessStatusCode) return null;
+ return await resp.Content.ReadFromJsonAsync>(JsonSerializerOptions);
+ }
+
+ internal static async Task GetUser(string username)
+ {
+ if (string.IsNullOrWhiteSpace(username))
+ {
+ return null;
+ }
+ var resp = await Client.GetAsync(ApiBaseUrl + "user/"+username);
+ if (!resp.IsSuccessStatusCode) return null;
+ var users = await resp.Content.ReadFromJsonAsync>(JsonSerializerOptions);
+ return users?.SingleOrDefault();
+ }
+}
diff --git a/APP/Utility/StringAssemble.cs b/APP/Utility/StringAssemble.cs
new file mode 100644
index 0000000..5bdb40d
--- /dev/null
+++ b/APP/Utility/StringAssemble.cs
@@ -0,0 +1,59 @@
+using System.Text;
+using APP.DTO;
+
+namespace APP.Utility;
+
+public static class StringAssemble
+{
+ public static string UserInfo(User? user)
+ {
+ if (user == null)
+ {
+ return string.Empty;
+ }
+
+ var sb = new StringBuilder();
+ sb.Append("MAL ID:");
+ sb.AppendLine();
+
+ sb.Append("Last online:");
+ sb.AppendLine();
+
+ if (!string.IsNullOrEmpty(user.Location))
+ {
+ sb.Append("Location:");
+ sb.AppendLine();
+ }
+
+ sb.Append("Joined:");
+ sb.AppendLine();
+
+ return sb.ToString();
+ }
+
+ public static string UserData(User? user)
+ {
+ if (user == null)
+ {
+ return string.Empty;
+ }
+
+ var sb = new StringBuilder();
+ sb.Append(user.Id);
+ sb.AppendLine();
+
+ sb.Append(user.LastOnline);
+ sb.AppendLine();
+
+ if (!string.IsNullOrEmpty(user.Location))
+ {
+ sb.Append(user.Location);
+ sb.AppendLine();
+ }
+
+ sb.Append(user.Joined.ToShortDateString());
+ sb.AppendLine();
+
+ return sb.ToString();
+ }
+}
diff --git a/doge.png b/doge.png
new file mode 100644
index 0000000..91de458
Binary files /dev/null and b/doge.png differ
diff --git a/icon.png b/icon.png
new file mode 100644
index 0000000..cb8a0e5
Binary files /dev/null and b/icon.png differ