81 lines
2.5 KiB
C#
81 lines
2.5 KiB
C#
|
using SharpChat.Channels;
|
|||
|
using SharpChat.Sessions;
|
|||
|
using SharpChat.Users;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
|
|||
|
namespace SharpChat.Protocol.IRC.Users {
|
|||
|
public static class IUserExtensions {
|
|||
|
public static string GetIRCName(this IUser user, IChannel channel = null) {
|
|||
|
StringBuilder sb = new();
|
|||
|
|
|||
|
// SharpChat does not implement per-channel permissions besides owner
|
|||
|
// if it did an IMember should exist
|
|||
|
// these should also be Less Hardcoded
|
|||
|
if(channel != null) {
|
|||
|
if(user.UserId == 1) // flashwave
|
|||
|
sb.Append('~');
|
|||
|
else if(user.Rank >= 10) // admins
|
|||
|
sb.Append('&');
|
|||
|
else if(user.Rank >= 5) // mods
|
|||
|
sb.Append('@');
|
|||
|
else if(user.UserId == channel.OwnerId) // channel owner
|
|||
|
sb.Append('%');
|
|||
|
else if(user.Can(UserPermissions.SetOwnNickname)) // tenshi
|
|||
|
sb.Append('+');
|
|||
|
}
|
|||
|
|
|||
|
if(user is ILocalUser lu && !string.IsNullOrWhiteSpace(lu.NickName))
|
|||
|
sb.Append(lu.NickName);
|
|||
|
else
|
|||
|
sb.Append(user.UserName);
|
|||
|
|
|||
|
return sb.ToString();
|
|||
|
}
|
|||
|
|
|||
|
public static string GetIRCMask(this IUser user) {
|
|||
|
return $@"{user.GetIRCName()}!{user.UserName}";
|
|||
|
}
|
|||
|
|
|||
|
public static string GetIRCMask(this IUser user, IRCServer server) {
|
|||
|
return $@"{user.GetIRCMask()}@{server.ServerHost}";
|
|||
|
}
|
|||
|
|
|||
|
public static string GetIRCModeString(this IUser user, bool isSecure = false) {
|
|||
|
StringBuilder sb = new();
|
|||
|
|
|||
|
// see GetIRCName for rank based modes
|
|||
|
|
|||
|
if(user.UserId == 1) // flashwave
|
|||
|
sb.Append('A'); // administrator
|
|||
|
|
|||
|
if(user.IsBot()) // bot, make IsBot attr
|
|||
|
sb.Append('B');
|
|||
|
|
|||
|
if(user.Rank >= 10)
|
|||
|
sb.Append('C'); // co-admin
|
|||
|
|
|||
|
if(user is ILocalUser lu) {
|
|||
|
if(lu.Status == UserStatus.Away)
|
|||
|
sb.Append('a'); // away
|
|||
|
|
|||
|
if(lu.Status == UserStatus.Offline)
|
|||
|
sb.Append('i'); // invisible
|
|||
|
}
|
|||
|
|
|||
|
if(user.Rank is < 10 and >= 5)
|
|||
|
sb.Append('o'); // global mod
|
|||
|
|
|||
|
sb.Append('w'); // wallops
|
|||
|
sb.Append('x'); // host hiding
|
|||
|
|
|||
|
if(isSecure)
|
|||
|
sb.Append('z'); // secure
|
|||
|
|
|||
|
return sb.ToString();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|