diff --git a/chat/command.go b/chat/command.go index d4873f3..ea313c8 100644 --- a/chat/command.go +++ b/chat/command.go @@ -216,31 +216,4 @@ func InitCommands(c *Commands) { return nil }, }) - - c.Add(Command{ - Op: true, - Prefix: "/op", - PrefixHelp: "USER", - Help: "Mark user as admin.", - Handler: func(room *Room, msg CommandMsg) error { - if !room.IsOp(msg.From()) { - return errors.New("must be op") - } - - args := msg.Args() - if len(args) != 1 { - return errors.New("must specify user") - } - - // TODO: Add support for fingerprint-based op'ing. This will - // probably need to live in host land. - member, ok := room.MemberById(args[0]) - if !ok { - return errors.New("user not found") - } - - member.Op = true - return nil - }, - }) } diff --git a/host.go b/host.go index 3f59233..2e1a57f 100644 --- a/host.go +++ b/host.go @@ -400,4 +400,34 @@ func (h *Host) InitCommands(c *chat.Commands) { return nil }, }) + + c.Add(chat.Command{ + Op: true, + Prefix: "/op", + PrefixHelp: "USER", + Help: "Set USER as admin.", + Handler: func(room *chat.Room, msg chat.CommandMsg) error { + if !room.IsOp(msg.From()) { + return errors.New("must be op") + } + + args := msg.Args() + if len(args) != 1 { + return errors.New("must specify user") + } + + member, ok := room.MemberById(args[0]) + if !ok { + return errors.New("user not found") + } + member.Op = true + id := member.Identifier.(*Identity) + h.auth.Op(id.PublicKey()) + + body := fmt.Sprintf("Made op by %s.", msg.From().Name()) + room.Send(chat.NewSystemMsg(body, member.User)) + + return nil + }, + }) }