1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-28 02:02:53 +08:00

Add optional parameters to target messages at a specific channel

This commit is contained in:
Dean Herbert 2018-12-20 17:01:08 +09:00
parent 3a13899ce1
commit 65447d6f4a

View File

@ -96,12 +96,14 @@ namespace osu.Game.Online.Chat
/// </summary>
/// <param name="text">The message text that is going to be posted</param>
/// <param name="isAction">Is true if the message is an action, e.g.: user is currently eating </param>
public void PostMessage(string text, bool isAction = false)
/// <param name="target">An optional target channel. If null, <see cref="CurrentChannel"/> will be used.</param>
public void PostMessage(string text, bool isAction = false, Channel target = null)
{
if (CurrentChannel.Value == null)
return;
if (target == null)
target = CurrentChannel.Value;
var currentChannel = CurrentChannel.Value;
if (target == null)
return;
void dequeueAndRun()
{
@ -113,7 +115,7 @@ namespace osu.Game.Online.Chat
{
if (!api.IsLoggedIn)
{
currentChannel.AddNewMessages(new ErrorMessage("Please sign in to participate in chat!"));
target.AddNewMessages(new ErrorMessage("Please sign in to participate in chat!"));
return;
}
@ -121,29 +123,29 @@ namespace osu.Game.Online.Chat
{
Sender = api.LocalUser.Value,
Timestamp = DateTimeOffset.Now,
ChannelId = CurrentChannel.Value.Id,
ChannelId = target.Id,
IsAction = isAction,
Content = text
};
currentChannel.AddLocalEcho(message);
target.AddLocalEcho(message);
// if this is a PM and the first message, we need to do a special request to create the PM channel
if (currentChannel.Type == ChannelType.PM && !currentChannel.Joined)
if (target.Type == ChannelType.PM && !target.Joined)
{
var createNewPrivateMessageRequest = new CreateNewPrivateMessageRequest(currentChannel.Users.First(), message);
var createNewPrivateMessageRequest = new CreateNewPrivateMessageRequest(target.Users.First(), message);
createNewPrivateMessageRequest.Success += createRes =>
{
currentChannel.Id = createRes.ChannelID;
currentChannel.ReplaceMessage(message, createRes.Message);
target.Id = createRes.ChannelID;
target.ReplaceMessage(message, createRes.Message);
dequeueAndRun();
};
createNewPrivateMessageRequest.Failure += exception =>
{
Logger.Error(exception, "Posting message failed.");
currentChannel.ReplaceMessage(message, null);
target.ReplaceMessage(message, null);
dequeueAndRun();
};
@ -155,14 +157,14 @@ namespace osu.Game.Online.Chat
req.Success += m =>
{
currentChannel.ReplaceMessage(message, m);
target.ReplaceMessage(message, m);
dequeueAndRun();
};
req.Failure += exception =>
{
Logger.Error(exception, "Posting message failed.");
currentChannel.ReplaceMessage(message, null);
target.ReplaceMessage(message, null);
dequeueAndRun();
};
@ -178,9 +180,13 @@ namespace osu.Game.Online.Chat
/// Posts a command locally. Commands like /help will result in a help message written in the current channel.
/// </summary>
/// <param name="text">the text containing the command identifier and command parameters.</param>
public void PostCommand(string text)
/// <param name="target">An optional target channel. If null, <see cref="CurrentChannel"/> will be used.</param>
public void PostCommand(string text, Channel target = null)
{
if (CurrentChannel.Value == null)
if (target == null)
target = CurrentChannel.Value;
if (target == null)
return;
var parameters = text.Split(new[] { ' ' }, 2);
@ -192,7 +198,7 @@ namespace osu.Game.Online.Chat
case "me":
if (string.IsNullOrWhiteSpace(content))
{
CurrentChannel.Value.AddNewMessages(new ErrorMessage("Usage: /me [action]"));
target.AddNewMessages(new ErrorMessage("Usage: /me [action]"));
break;
}
@ -200,11 +206,11 @@ namespace osu.Game.Online.Chat
break;
case "help":
CurrentChannel.Value.AddNewMessages(new InfoMessage("Supported commands: /help, /me [action]"));
target.AddNewMessages(new InfoMessage("Supported commands: /help, /me [action]"));
break;
default:
CurrentChannel.Value.AddNewMessages(new ErrorMessage($@"""/{command}"" is not supported! For a list of supported commands see /help"));
target.AddNewMessages(new ErrorMessage($@"""/{command}"" is not supported! For a list of supported commands see /help"));
break;
}
}