message=$"{userLinkTemplate()} unlocked the {activity.Achievement.Name} medal!";
break;
caseRecentActivityType.BeatmapPlaycount:
message=$"{beatmapLinkTemplate()} has been played {activity.Count} times!";
break;
caseRecentActivityType.BeatmapsetApprove:
message=$"{beatmapsetLinkTemplate()} has been {activity.Approval.ToString().ToLowerInvariant()}!";
break;
caseRecentActivityType.BeatmapsetDelete:
message=$"{beatmapsetLinkTemplate()} has been deleted.";
break;
caseRecentActivityType.BeatmapsetRevive:
message=$"{beatmapsetLinkTemplate()} has been revived from eternal slumber by {userLinkTemplate()}.";
break;
caseRecentActivityType.BeatmapsetUpdate:
message=$"{userLinkTemplate()} has updated the beatmap {beatmapsetLinkTemplate()}!";
break;
caseRecentActivityType.BeatmapsetUpload:
message=$"{userLinkTemplate()} has submitted a new beatmap {beatmapsetLinkTemplate()}!";
break;
caseRecentActivityType.Medal:
// apparently this shouldn't exist look at achievement instead (https://github.com/ppy/osu-web/blob/master/resources/assets/coffee/react/profile-page/recent-activity.coffee#L111)
message=string.Empty;
break;
caseRecentActivityType.Rank:
message=$"{userLinkTemplate()} achieved rank #{activity.Rank} on {beatmapLinkTemplate()} ({activity.Mode}!)";
break;
caseRecentActivityType.RankLost:
message=$"{userLinkTemplate()} has lost first place on {beatmapLinkTemplate()} ({activity.Mode}!)";
break;
caseRecentActivityType.UserSupportAgain:
message=$"{userLinkTemplate()} has once again chosen to support osu! - thanks for your generosity!";
break;
caseRecentActivityType.UserSupportFirst:
message=$"{userLinkTemplate()} has become an osu! supporter - thanks for your generosity!";
break;
caseRecentActivityType.UserSupportGift:
message=$"{userLinkTemplate()} has received the gift of osu! supporter!";
break;
caseRecentActivityType.UsernameChange:
message=$"{activity.User?.PreviousUsername} has changed their username to {userLinkTemplate()}!";