diff --git a/Commands/InteractionCommands/JoinwatchInteractions.cs b/Commands/InteractionCommands/JoinwatchInteractions.cs
index be1cbc9b..b1ac0fd6 100644
--- a/Commands/InteractionCommands/JoinwatchInteractions.cs
+++ b/Commands/InteractionCommands/JoinwatchInteractions.cs
@@ -8,24 +8,24 @@ public class JoinwatchSlashCmds
         {
             [SlashCommand("add", "Watch for joins and leaves of a given user. Output goes to #investigations.")]
             public async Task JoinwatchAdd(InteractionContext ctx,
-                [Option("user", "The user to watch for joins and leaves of.")] DiscordUser _,
-                [Option("note", "An optional note for context.")] string __ = "")
+                [Option("user", "The user to watch for joins and leaves of.")] DiscordUser user,
+                [Option("note", "An optional note for context.")] string note = "")
             {
-                await ctx.RespondAsync($"{Program.cfgjson.Emoji.Error} This command is deprecated and no longer works; all joinwatches have been converted to notes. Please use `/note add` instead, with the `show_on_join_and_leave` option.");
+                await ctx.RespondAsync($"{Program.cfgjson.Emoji.Error} This command is deprecated and no longer works; all joinwatches have been converted to notes. Please use `/note add` instead, like this: `/note add user:{user.Id} note:{(string.IsNullOrEmpty(note) ? "<context>" : note)} show_on_join_and_leave:True`");
             }
 
             [SlashCommand("remove", "Stop watching for joins and leaves of a user.")]
             public async Task JoinwatchRemove(InteractionContext ctx,
                 [Option("user", "The user to stop watching for joins and leaves of.")] DiscordUser user)
             {
-                await ctx.RespondAsync($"{Program.cfgjson.Emoji.Error} This command is deprecated and no longer works; all joinwatches have been converted to notes. Please use `/note remove` instead.");
+                await ctx.RespondAsync($"{Program.cfgjson.Emoji.Error} This command is deprecated and no longer works; all joinwatches have been converted to notes. Please use `/note delete` instead, like this: `/note delete user:{user.Id} note:<note>`");
             }
 
             [SlashCommand("status", "Check the joinwatch status for a user.")]
             public async Task JoinwatchStatus(InteractionContext ctx,
                 [Option("user", "The user whose joinwatch status to check.")] DiscordUser user)
             {
-                await ctx.RespondAsync($"{Program.cfgjson.Emoji.Error} This command is deprecated and no longer works; all joinwatches have been converted to notes. Please use `/note list` or `/note details` instead.");
+                await ctx.RespondAsync($"{Program.cfgjson.Emoji.Error} This command is deprecated and no longer works; all joinwatches have been converted to notes. Please use `/note list user:{user.Id}` to show all of this user's notes, or `/note details user:{user.Id} note:<note>` for details on a specific note, instead. Notes with \"Show on Join & Leave\" enabled will behave like joinwatches.");
             }
         }
     }
diff --git a/Commands/Lists.cs b/Commands/Lists.cs
index 78ef8d9f..93ecdd63 100644
--- a/Commands/Lists.cs
+++ b/Commands/Lists.cs
@@ -169,11 +169,11 @@ public async Task ScamCheck(CommandContext ctx, [RemainingText, Description("Dom
         [HomeServer, RequireHomeserverPerm(ServerPermLevel.TrialModerator)]
         public async Task JoinWatch(
             CommandContext ctx,
-            [Description("The user to watch for joins and leaves of.")] DiscordUser _,
-            [Description("An optional note for context."), RemainingText] string __ = ""
+            [Description("The user to watch for joins and leaves of.")] DiscordUser user,
+            [Description("An optional note for context."), RemainingText] string note = ""
         )
         {
-            await ctx.RespondAsync($"{Program.cfgjson.Emoji.Error} This command is deprecated and no longer works; all joinwatches have been converted to notes. Please use `/note add` instead, with the `show_on_join_and_leave` option.");
+            await ctx.RespondAsync($"{Program.cfgjson.Emoji.Error} This command is deprecated and no longer works; all joinwatches have been converted to notes. To add a note for this user, please use `/note add user:{user.Id} note:{(string.IsNullOrEmpty(note) ? "<context>" : note)} show_on_join_and_leave:True`; to remove one, use `/note delete user:{user.Id} note:<note>`.");
         }
 
         [Command("appealblock")]