public UnspecificUserInfo ChangeStrikes(Discord.Server Server, ulong UserID, int Change)
    {
        const int NUMSTRIKESFORKICK = 2;
        const int NUMSTRIKESFORBAN  = 3;

        // Setup variables
        UnspecificUserInfo     InitialUserInfo       = Modules.DataModule.GetUserInfo(UserID);
        ServerSpecificUserInfo InitialUserServerInfo = Modules.DataModule.GetUserServerInfo(UserID, Server.Id);

        Discord.User User = Modules.UserModule.GetUserByID(UserID, Server).User;

        // Check if the user was NOT found...
        if (!Modules.UserModule.GetUserByID(UserID, Server).WasFound)
        {
            // and return an empty user info.
            return(InitialUserInfo);
        }

        int NewNumberOfStrikes = InitialUserServerInfo.NumStrikes + Change; // will calculate the new number of strikes CUZ ( +- = -)

        if (Change == 0)
        {
            goto end; // Nothing to change!
        }
        else if (Change > 0)
        {
            User.SendMessage($"Be carefull! You just recieved {Change} strikes (total number of strikes: {NewNumberOfStrikes}). {NUMSTRIKESFORKICK} strikes is a kick and {NUMSTRIKESFORBAN} is a ban!");
        }
        else if (Change < 0)
        {
            if (Modules.DataModule.GetUserServerInfo(UserID, Server.Id).NumStrikes == 0)
            {
                goto end; // Do nothing as the user cannot have sub-zero strikes!
            }
            else
            {
                User.SendMessage($"{Change * -1} strikes just got revoked to give you a total of {NewNumberOfStrikes} strikes. {NUMSTRIKESFORKICK} strikes is a kick and {NUMSTRIKESFORBAN} is a ban!");
            }
        }

        // Create a new ServerSpecificUserInfo struct with the update ammount of strikes.
        ServerSpecificUserInfo NewServerUserInfo = InitialUserServerInfo;

        NewServerUserInfo.NumStrikes = NewNumberOfStrikes;
        // Create a new UserInfo based on the origional user info to house the new ServerUserInfo
        UnspecificUserInfo NewUserInfo = InitialUserInfo;

        // Find the server's list index in the new userinfo.
        int index = NewUserInfo.ServerInfo.FindIndex(d => d.ServerID == NewServerUserInfo.ServerID);

        // And set the above index of the list to the new serveruserinfo.
        NewUserInfo.ServerInfo[index] = NewServerUserInfo;
        // TODO extract above (update UserServer info) into function or something.

        Modules.DataModule.UpdateUserInfo(NewUserInfo);

        // Check if the user has enough strikes to get kicked
        if (Modules.DataModule.GetUserServerInfo(UserID, Server.Id).NumStrikes == NUMSTRIKESFORKICK)
        {
            // TODO make a rejoinmsg.
            User.SendMessage($"You got a total of {NewNumberOfStrikes} strikes, this is more than {NUMSTRIKESFORKICK} so you got kicked!");
            // Now kick the user TODO: be sure that User.Kick(); is actually the right command :D
            User.Kick();
        }
        // Check if the user has enough strikes for a ban.
        else if (Modules.DataModule.GetUserServerInfo(UserID, Server.Id).NumStrikes >= NUMSTRIKESFORBAN)
        {
            // Send the user a message telling them they got banned as they had more than the ban threshhold strikes.
            User.SendMessage($"You got a total of {NewNumberOfStrikes} strikes, this is more than {NUMSTRIKESFORBAN} so you got banned!");
            // And then actually ban them from the server
            Server.Ban(Modules.UserModule.GetUserByID(UserID, Server).User);
        }
        // an end goto for stuff that doesnt need to process the ammount of strikes etc. When strikes are not processed it will automagically fall through to this.
end:
        // Get and return the updated user info
        return(Modules.DataModule.GetUserInfo(UserID));
    }