lelegram: stuckness fixes, timeout

Change-Id: I3c1ad4e589ea66db846a56aab8a2c1698bdee539
diff --git a/personal/q3k/lelegram/irc/manager_control.go b/personal/q3k/lelegram/irc/manager_control.go
index 68e9002..4e6b0b7 100644
--- a/personal/q3k/lelegram/irc/manager_control.go
+++ b/personal/q3k/lelegram/irc/manager_control.go
@@ -8,16 +8,23 @@
 )
 
 // Control: send a message to IRC.
-func (m *Manager) SendMessage(user, text string) error {
+func (m *Manager) SendMessage(ctx context.Context, user, text string) error {
 	done := make(chan error)
-	m.ctrl <- &control{
+
+	msg := &control{
 		message: &controlMessage{
 			from:    user,
 			message: text,
 			done:    done,
 		},
 	}
-	return <-done
+
+	select {
+	case <-ctx.Done():
+		return ctx.Err()
+	case m.ctrl <- msg:
+		return <-done
+	}
 }
 
 // Control: subscribe to notifiactions.