refactor: Add message.Author.ID(), remove a bunch of type assertions

This commit is contained in:
Andrey Petrov 2016-09-15 15:00:50 -04:00
parent e86996e6b5
commit 7f2b8e4689
7 changed files with 23 additions and 23 deletions

View File

@ -111,7 +111,7 @@ func InitCommands(c *Commands) {
c.Add(Command{ c.Add(Command{
Prefix: "/help", Prefix: "/help",
Handler: func(room *Room, msg message.CommandMsg) error { Handler: func(room *Room, msg message.CommandMsg) error {
op := room.IsOp(msg.From().(Member)) op := room.IsOp(msg.From())
room.Send(message.NewSystemMsg(room.commands.Help(op), msg.From())) room.Send(message.NewSystemMsg(room.commands.Help(op), msg.From()))
return nil return nil
}, },
@ -150,7 +150,7 @@ func InitCommands(c *Commands) {
if len(args) != 1 { if len(args) != 1 {
return ErrMissingArg return ErrMissingArg
} }
member, ok := room.MemberByID(msg.From().(Member).ID()) member, ok := room.MemberByID(msg.From().ID())
if !ok { if !ok {
return ErrMissingMember return ErrMissingMember
} }
@ -253,7 +253,7 @@ func InitCommands(c *Commands) {
PrefixHelp: "[USER]", PrefixHelp: "[USER]",
Help: "Hide messages from USER, /unignore USER to stop hiding.", Help: "Hide messages from USER, /unignore USER to stop hiding.",
Handler: func(room *Room, msg message.CommandMsg) error { Handler: func(room *Room, msg message.CommandMsg) error {
from, ok := room.Member(msg.From().(Member)) from, ok := room.Member(msg.From())
if !ok { if !ok {
return ErrMissingMember return ErrMissingMember
} }
@ -278,7 +278,7 @@ func InitCommands(c *Commands) {
return nil return nil
} }
if id == msg.From().(Member).ID() { if id == msg.From().ID() {
return errors.New("cannot ignore self") return errors.New("cannot ignore self")
} }
target, ok := room.MemberByID(id) target, ok := room.MemberByID(id)
@ -302,7 +302,7 @@ func InitCommands(c *Commands) {
Prefix: "/unignore", Prefix: "/unignore",
PrefixHelp: "USER", PrefixHelp: "USER",
Handler: func(room *Room, msg message.CommandMsg) error { Handler: func(room *Room, msg message.CommandMsg) error {
from, ok := room.Member(msg.From().(Member)) from, ok := room.Member(msg.From())
if !ok { if !ok {
return ErrMissingMember return ErrMissingMember
} }

View File

@ -16,7 +16,6 @@ type roomMember struct {
type Member interface { type Member interface {
message.Author message.Author
ID() string
SetName(string) SetName(string)
Config() message.UserConfig Config() message.UserConfig

View File

@ -7,6 +7,7 @@ import (
) )
type Author interface { type Author interface {
ID() string
Name() string Name() string
Color() int Color() int
} }

View File

@ -39,7 +39,7 @@ func HandledScreen(name string, handler func(Message) error) *handledScreen {
func Screen(name string) *baseScreen { func Screen(name string) *baseScreen {
return &baseScreen{ return &baseScreen{
User: NewUser(name), user: NewUser(name),
} }
} }
@ -71,7 +71,7 @@ func (u *pipedScreen) Send(m Message) error {
// User container that knows about writing to an IO screen. // User container that knows about writing to an IO screen.
type baseScreen struct { type baseScreen struct {
sync.Mutex sync.Mutex
*User *user
} }
func (u *baseScreen) Config() UserConfig { func (u *baseScreen) Config() UserConfig {

View File

@ -8,7 +8,7 @@ import (
const reHighlight = `\b(%s)\b` const reHighlight = `\b(%s)\b`
// User definition, implemented set Item interface and io.Writer // User definition, implemented set Item interface and io.Writer
type User struct { type user struct {
joined time.Time joined time.Time
name string name string
@ -16,8 +16,8 @@ type User struct {
replyTo Author // Set when user gets a /msg, for replying. replyTo Author // Set when user gets a /msg, for replying.
} }
func NewUser(name string) *User { func NewUser(name string) *user {
u := User{ u := user{
name: name, name: name,
config: DefaultUserConfig, config: DefaultUserConfig,
joined: time.Now(), joined: time.Now(),
@ -27,18 +27,18 @@ func NewUser(name string) *User {
return &u return &u
} }
func (u *User) Name() string { func (u *user) Name() string {
return u.name return u.name
} }
func (u *User) Color() int { func (u *user) Color() int {
return u.config.Seed return u.config.Seed
} }
func (u *User) ID() string { func (u *user) ID() string {
return SanitizeName(u.name) return SanitizeName(u.name)
} }
func (u *User) Joined() time.Time { func (u *user) Joined() time.Time {
return u.joined return u.joined
} }

View File

@ -92,7 +92,7 @@ func (r *Room) HandleMsg(m message.Message) {
roomMember := item.Value().(*roomMember) roomMember := item.Value().(*roomMember)
user := roomMember.Member user := roomMember.Member
if fromMsg != nil && fromMsg.From() != nil && roomMember.Ignored.In(fromMsg.From().(Member).ID()) { if fromMsg != nil && fromMsg.From() != nil && roomMember.Ignored.In(fromMsg.From().ID()) {
// Skip because ignored // Skip because ignored
return return
} }
@ -182,7 +182,7 @@ func (r *Room) Rename(oldID string, u Member) error {
// Member returns a corresponding Member object to a User if the Member is // Member returns a corresponding Member object to a User if the Member is
// present in this room. // present in this room.
func (r *Room) Member(u Member) (*roomMember, bool) { func (r *Room) Member(u message.Author) (*roomMember, bool) {
m, ok := r.MemberByID(u.ID()) m, ok := r.MemberByID(u.ID())
if !ok { if !ok {
return nil, false return nil, false
@ -204,7 +204,7 @@ func (r *Room) MemberByID(id string) (*roomMember, bool) {
} }
// IsOp returns whether a user is an operator in this room. // IsOp returns whether a user is an operator in this room.
func (r *Room) IsOp(u Member) bool { func (r *Room) IsOp(u message.Author) bool {
return r.Ops.In(u.ID()) return r.Ops.In(u.ID())
} }

10
host.go
View File

@ -353,7 +353,7 @@ func (h *Host) InitCommands(c *chat.Commands) {
} }
var whois string var whois string
switch room.IsOp(msg.From().(chat.Member)) { switch room.IsOp(msg.From()) {
case true: case true:
whois = whoisAdmin(target) whois = whoisAdmin(target)
case false: case false:
@ -389,7 +389,7 @@ func (h *Host) InitCommands(c *chat.Commands) {
PrefixHelp: "USER [DURATION]", PrefixHelp: "USER [DURATION]",
Help: "Set USER as admin.", Help: "Set USER as admin.",
Handler: func(room *chat.Room, msg message.CommandMsg) error { Handler: func(room *chat.Room, msg message.CommandMsg) error {
if !room.IsOp(msg.From().(chat.Member)) { if !room.IsOp(msg.From()) {
return errors.New("must be op") return errors.New("must be op")
} }
@ -435,7 +435,7 @@ func (h *Host) InitCommands(c *chat.Commands) {
Help: "Ban USER from the server.", Help: "Ban USER from the server.",
Handler: func(room *chat.Room, msg message.CommandMsg) error { Handler: func(room *chat.Room, msg message.CommandMsg) error {
// TODO: Would be nice to specify what to ban. Key? Ip? etc. // TODO: Would be nice to specify what to ban. Key? Ip? etc.
if !room.IsOp(msg.From().(chat.Member)) { if !room.IsOp(msg.From()) {
return errors.New("must be op") return errors.New("must be op")
} }
@ -475,7 +475,7 @@ func (h *Host) InitCommands(c *chat.Commands) {
PrefixHelp: "USER", PrefixHelp: "USER",
Help: "Kick USER from the server.", Help: "Kick USER from the server.",
Handler: func(room *chat.Room, msg message.CommandMsg) error { Handler: func(room *chat.Room, msg message.CommandMsg) error {
if !room.IsOp(msg.From().(chat.Member)) { if !room.IsOp(msg.From()) {
return errors.New("must be op") return errors.New("must be op")
} }
@ -513,7 +513,7 @@ func (h *Host) InitCommands(c *chat.Commands) {
room.Send(message.NewSystemMsg(motd, user)) room.Send(message.NewSystemMsg(motd, user))
return nil return nil
} }
if !room.IsOp(user.(chat.Member)) { if !room.IsOp(user) {
return errors.New("must be OP to modify the MOTD") return errors.New("must be OP to modify the MOTD")
} }