)]}'
{"fun/clbot/clbot.go":[{"author":{"_account_id":1000008,"name":"eta","email":"tvl@eta.st","username":"eta"},"change_message_id":"2280df3c82610cd464176272bc157da04fa30b80","unresolved":true,"context_lines":[{"line_number":32,"context_line":"\tircUser      \u003d flag.String(\"irc_user\", \"clbot\", \"User string to use for IRC\")"},{"line_number":33,"context_line":"\tircName      \u003d flag.String(\"irc_name\", \"clbot\", \"Name string to use for IRC\")"},{"line_number":34,"context_line":"\tircChannel   \u003d flag.String(\"irc_channel\", \"##tvl\", \"Channel to send messages to\")"},{"line_number":35,"context_line":"\tircPassword  \u003d flag.String(\"irc_pass\", \"\", \"Password to use for IRC\")"},{"line_number":36,"context_line":"\tircSendLimit \u003d flag.Duration(\"irc_send_limit\", 100*time.Millisecond, \"Delay between messages\")"},{"line_number":37,"context_line":"\tircSendBurst \u003d flag.Int(\"irc_send_burst\", 10, \"Number of messages which can be sent in a burst\")"},{"line_number":38,"context_line":")"}],"source_content_type":"text/x-go","patch_set":1,"id":"150676f1_4f759657","line":35,"updated":"2020-06-15 09:02:53.000000000","message":"I\u0027m assuming it uses the (server) password to auth to nickserv, but that\u0027s a freenode non-standard extension (afaik). What about non-freenode networks?","commit_id":"419bb2b32867934d6aa13af2f5df7f4a6fcf4a70"},{"author":{"_account_id":1000000,"name":"lukegb","email":"lukegb@tvl.fyi","username":"lukegb","status":"zzz"},"change_message_id":"6a1e24e72ae99e562c521fbdbce674b01f1f646a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"\tircUser      \u003d flag.String(\"irc_user\", \"clbot\", \"User string to use for IRC\")"},{"line_number":33,"context_line":"\tircName      \u003d flag.String(\"irc_name\", \"clbot\", \"Name string to use for IRC\")"},{"line_number":34,"context_line":"\tircChannel   \u003d flag.String(\"irc_channel\", \"##tvl\", \"Channel to send messages to\")"},{"line_number":35,"context_line":"\tircPassword  \u003d flag.String(\"irc_pass\", \"\", \"Password to use for IRC\")"},{"line_number":36,"context_line":"\tircSendLimit \u003d flag.Duration(\"irc_send_limit\", 100*time.Millisecond, \"Delay between messages\")"},{"line_number":37,"context_line":"\tircSendBurst \u003d flag.Int(\"irc_send_burst\", 10, \"Number of messages which can be sent in a burst\")"},{"line_number":38,"context_line":")"}],"source_content_type":"text/x-go","patch_set":1,"id":"89ba7053_6e17c2b8","line":35,"in_reply_to":"150676f1_4f759657","updated":"2020-06-15 19:21:28.000000000","message":"Don\u0027t care. Use a bouncer with a server password.\n\n(I got half-way through implementing SASL then got bored and gave up)","commit_id":"419bb2b32867934d6aa13af2f5df7f4a6fcf4a70"},{"author":{"_account_id":1000008,"name":"eta","email":"tvl@eta.st","username":"eta"},"change_message_id":"2280df3c82610cd464176272bc157da04fa30b80","unresolved":true,"context_lines":[{"line_number":68,"context_line":"func runIRC(ctx context.Context, ircCfg irc.ClientConfig, sendMsg \u003c-chan string) {"},{"line_number":69,"context_line":"\tbo :\u003d backoffutil.NewDefaultBackOff()"},{"line_number":70,"context_line":"\tircCfg.Handler \u003d irc.HandlerFunc(func(c *irc.Client, m *irc.Message) {"},{"line_number":71,"context_line":"\t\tif m.Command \u003d\u003d \"NOTICE\" \u0026\u0026 m.Prefix.Name \u003d\u003d \"NickServ\" \u0026\u0026 strings.Contains(m.Trailing(), \"dentified\") {"},{"line_number":72,"context_line":"\t\t\t// We\u0027re probably identified now, go join the channel."},{"line_number":73,"context_line":"\t\t\tc.Writef(\"JOIN %s\", *ircChannel)"},{"line_number":74,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"43940eb8_34744765","line":71,"updated":"2020-06-15 09:02:53.000000000","message":"Could you not make this use RPL_LOGGEDIN (numeric 900) instead? cf. https://ircv3.net/specs/extensions/sasl-3.1#numerics-used-by-this-extension\n\nAlso, what happens if NickServ is down / we fail auth for some reason? Shouldn\u0027t there be a retry mechanism / way of detecting this within a timeout?","commit_id":"419bb2b32867934d6aa13af2f5df7f4a6fcf4a70"},{"author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"change_message_id":"41e6675401e98f2a9c6abca305aaec52576696c5","unresolved":true,"context_lines":[{"line_number":68,"context_line":"func runIRC(ctx context.Context, ircCfg irc.ClientConfig, sendMsg \u003c-chan string) {"},{"line_number":69,"context_line":"\tbo :\u003d backoffutil.NewDefaultBackOff()"},{"line_number":70,"context_line":"\tircCfg.Handler \u003d irc.HandlerFunc(func(c *irc.Client, m *irc.Message) {"},{"line_number":71,"context_line":"\t\tif m.Command \u003d\u003d \"NOTICE\" \u0026\u0026 m.Prefix.Name \u003d\u003d \"NickServ\" \u0026\u0026 strings.Contains(m.Trailing(), \"dentified\") {"},{"line_number":72,"context_line":"\t\t\t// We\u0027re probably identified now, go join the channel."},{"line_number":73,"context_line":"\t\t\tc.Writef(\"JOIN %s\", *ircChannel)"},{"line_number":74,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"bda13a20_afc85b7d","line":71,"range":{"start_line":71,"start_character":92,"end_line":71,"end_character":97},"updated":"2020-06-14 22:51:11.000000000","message":"is there a reason for no \u0027i\u0027?","commit_id":"419bb2b32867934d6aa13af2f5df7f4a6fcf4a70"},{"author":{"_account_id":1000000,"name":"lukegb","email":"lukegb@tvl.fyi","username":"lukegb","status":"zzz"},"change_message_id":"6a1e24e72ae99e562c521fbdbce674b01f1f646a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"func runIRC(ctx context.Context, ircCfg irc.ClientConfig, sendMsg \u003c-chan string) {"},{"line_number":69,"context_line":"\tbo :\u003d backoffutil.NewDefaultBackOff()"},{"line_number":70,"context_line":"\tircCfg.Handler \u003d irc.HandlerFunc(func(c *irc.Client, m *irc.Message) {"},{"line_number":71,"context_line":"\t\tif m.Command \u003d\u003d \"NOTICE\" \u0026\u0026 m.Prefix.Name \u003d\u003d \"NickServ\" \u0026\u0026 strings.Contains(m.Trailing(), \"dentified\") {"},{"line_number":72,"context_line":"\t\t\t// We\u0027re probably identified now, go join the channel."},{"line_number":73,"context_line":"\t\t\tc.Writef(\"JOIN %s\", *ircChannel)"},{"line_number":74,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"2587dbbe_a5d7e7ac","line":71,"in_reply_to":"43940eb8_34744765","updated":"2020-06-15 19:21:28.000000000","message":"Freenode didn\u0027t seem to send this when I checked (possibly because I\u0027m not requesting the SASL cap). For reliability, use a bouncer.","commit_id":"419bb2b32867934d6aa13af2f5df7f4a6fcf4a70"},{"author":{"_account_id":1000000,"name":"lukegb","email":"lukegb@tvl.fyi","username":"lukegb","status":"zzz"},"change_message_id":"6a1e24e72ae99e562c521fbdbce674b01f1f646a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"func runIRC(ctx context.Context, ircCfg irc.ClientConfig, sendMsg \u003c-chan string) {"},{"line_number":69,"context_line":"\tbo :\u003d backoffutil.NewDefaultBackOff()"},{"line_number":70,"context_line":"\tircCfg.Handler \u003d irc.HandlerFunc(func(c *irc.Client, m *irc.Message) {"},{"line_number":71,"context_line":"\t\tif m.Command \u003d\u003d \"NOTICE\" \u0026\u0026 m.Prefix.Name \u003d\u003d \"NickServ\" \u0026\u0026 strings.Contains(m.Trailing(), \"dentified\") {"},{"line_number":72,"context_line":"\t\t\t// We\u0027re probably identified now, go join the channel."},{"line_number":73,"context_line":"\t\t\tc.Writef(\"JOIN %s\", *ircChannel)"},{"line_number":74,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"6face7e5_8cb92909","line":71,"range":{"start_line":71,"start_character":92,"end_line":71,"end_character":97},"in_reply_to":"bda13a20_afc85b7d","updated":"2020-06-15 19:21:28.000000000","message":"NickServ is letting us know we\u0027ve got teeth now. We\u0027ve been dent-ified.","commit_id":"419bb2b32867934d6aa13af2f5df7f4a6fcf4a70"},{"author":{"_account_id":1000000,"name":"lukegb","email":"lukegb@tvl.fyi","username":"lukegb","status":"zzz"},"change_message_id":"6a1e24e72ae99e562c521fbdbce674b01f1f646a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"func runIRC(ctx context.Context, ircCfg irc.ClientConfig, sendMsg \u003c-chan string) {"},{"line_number":69,"context_line":"\tbo :\u003d backoffutil.NewDefaultBackOff()"},{"line_number":70,"context_line":"\tircCfg.Handler \u003d irc.HandlerFunc(func(c *irc.Client, m *irc.Message) {"},{"line_number":71,"context_line":"\t\tif m.Command \u003d\u003d \"NOTICE\" \u0026\u0026 m.Prefix.Name \u003d\u003d \"NickServ\" \u0026\u0026 strings.Contains(m.Trailing(), \"dentified\") {"},{"line_number":72,"context_line":"\t\t\t// We\u0027re probably identified now, go join the channel."},{"line_number":73,"context_line":"\t\t\tc.Writef(\"JOIN %s\", *ircChannel)"},{"line_number":74,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"e7f8a8bc_a6c8425c","line":71,"range":{"start_line":71,"start_character":92,"end_line":71,"end_character":97},"in_reply_to":"bda13a20_afc85b7d","updated":"2020-06-15 19:21:28.000000000","message":"Not really, other than trying to avoid cases where things say Identified vs identified.","commit_id":"419bb2b32867934d6aa13af2f5df7f4a6fcf4a70"},{"author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"change_message_id":"41e6675401e98f2a9c6abca305aaec52576696c5","unresolved":true,"context_lines":[{"line_number":129,"context_line":"\t\t\treturn opt"},{"line_number":130,"context_line":"\t\t}"},{"line_number":131,"context_line":"\t}"},{"line_number":132,"context_line":"\treturn \"UNKNOWN USER\""},{"line_number":133,"context_line":"}"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"func patchSetURL(c gerritevents.Change, p gerritevents.PatchSet) string {"}],"source_content_type":"text/x-go","patch_set":1,"id":"dcb39890_5162dd06","line":132,"range":{"start_line":132,"start_character":0,"end_line":132,"end_character":22},"updated":"2020-06-14 22:51:11.000000000","message":"Is this actually possible? I assume there\u0027s always at least an email address, since that comes from the commit? (I\u0027m thinking this is a QCHECK-type event)","commit_id":"419bb2b32867934d6aa13af2f5df7f4a6fcf4a70"},{"author":{"_account_id":1000000,"name":"lukegb","email":"lukegb@tvl.fyi","username":"lukegb","status":"zzz"},"change_message_id":"6a1e24e72ae99e562c521fbdbce674b01f1f646a","unresolved":false,"context_lines":[{"line_number":129,"context_line":"\t\t\treturn opt"},{"line_number":130,"context_line":"\t\t}"},{"line_number":131,"context_line":"\t}"},{"line_number":132,"context_line":"\treturn \"UNKNOWN USER\""},{"line_number":133,"context_line":"}"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"func patchSetURL(c gerritevents.Change, p gerritevents.PatchSet) string {"}],"source_content_type":"text/x-go","patch_set":1,"id":"5a54c557_4b7b1488","line":132,"range":{"start_line":132,"start_character":0,"end_line":132,"end_character":22},"in_reply_to":"dcb39890_5162dd06","updated":"2020-06-15 19:21:28.000000000","message":"This is mostly taken from gerritbot; in theory this should never happen since _someone_ has to have uploaded the commit.","commit_id":"419bb2b32867934d6aa13af2f5df7f4a6fcf4a70"},{"author":{"_account_id":1000000,"name":"lukegb","email":"lukegb@tvl.fyi","username":"lukegb","status":"zzz"},"change_message_id":"6a1e24e72ae99e562c521fbdbce674b01f1f646a","unresolved":false,"context_lines":[{"line_number":129,"context_line":"\t\t\treturn opt"},{"line_number":130,"context_line":"\t\t}"},{"line_number":131,"context_line":"\t}"},{"line_number":132,"context_line":"\treturn \"UNKNOWN USER\""},{"line_number":133,"context_line":"}"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"func patchSetURL(c gerritevents.Change, p gerritevents.PatchSet) string {"}],"source_content_type":"text/x-go","patch_set":1,"id":"05f6673f_e73cf804","line":132,"range":{"start_line":132,"start_character":0,"end_line":132,"end_character":22},"in_reply_to":"dcb39890_5162dd06","updated":"2020-06-15 19:21:28.000000000","message":"Yup, this should never get hit, especially since we try all of the other things first.","commit_id":"419bb2b32867934d6aa13af2f5df7f4a6fcf4a70"},{"author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"change_message_id":"41e6675401e98f2a9c6abca305aaec52576696c5","unresolved":true,"context_lines":[{"line_number":187,"context_line":"\t\t\tvar parsedMsg string"},{"line_number":188,"context_line":"\t\t\tswitch e :\u003d e.(type) {"},{"line_number":189,"context_line":"\t\t\tcase *gerritevents.PatchSetCreated:"},{"line_number":190,"context_line":"\t\t\t\tif e.Change.Project !\u003d \"depot\" || e.Change.Branch !\u003d \"master\" || e.PatchSet.Number !\u003d 1 {"},{"line_number":191,"context_line":"\t\t\t\t\tcontinue"},{"line_number":192,"context_line":"\t\t\t\t}"},{"line_number":193,"context_line":"\t\t\t\tparsedMsg \u003d fmt.Sprintf(\"CL/%d: %q proposed by %s - %s\", e.Change.Number, e.Change.Subject, username(e.PatchSet), patchSetURL(e.Change, e.PatchSet))"}],"source_content_type":"text/x-go","patch_set":1,"id":"cff53ef3_f5638bef","line":190,"range":{"start_line":190,"start_character":37,"end_line":190,"end_character":66},"updated":"2020-06-14 22:51:11.000000000","message":"I actually think we might care about config, too. The problematic thing is that changes created there from the web UI have useless names before being edited, but it\u0027s still good to notify about them.","commit_id":"419bb2b32867934d6aa13af2f5df7f4a6fcf4a70"},{"author":{"_account_id":1000000,"name":"lukegb","email":"lukegb@tvl.fyi","username":"lukegb","status":"zzz"},"change_message_id":"e8795910acf756042f795fa8f0100907d3e94216","unresolved":false,"context_lines":[{"line_number":187,"context_line":"\t\t\tvar parsedMsg string"},{"line_number":188,"context_line":"\t\t\tswitch e :\u003d e.(type) {"},{"line_number":189,"context_line":"\t\t\tcase *gerritevents.PatchSetCreated:"},{"line_number":190,"context_line":"\t\t\t\tif e.Change.Project !\u003d \"depot\" || e.Change.Branch !\u003d \"master\" || e.PatchSet.Number !\u003d 1 {"},{"line_number":191,"context_line":"\t\t\t\t\tcontinue"},{"line_number":192,"context_line":"\t\t\t\t}"},{"line_number":193,"context_line":"\t\t\t\tparsedMsg \u003d fmt.Sprintf(\"CL/%d: %q proposed by %s - %s\", e.Change.Number, e.Change.Subject, username(e.PatchSet), patchSetURL(e.Change, e.PatchSet))"}],"source_content_type":"text/x-go","patch_set":1,"id":"2c0d28a7_e00b6da1","line":190,"range":{"start_line":190,"start_character":37,"end_line":190,"end_character":66},"in_reply_to":"cff53ef3_f5638bef","updated":"2020-06-16 12:10:51.000000000","message":"I\u0027ll deal with that in a followup CL, I think, to avoid leaving this one hanging for too long.","commit_id":"419bb2b32867934d6aa13af2f5df7f4a6fcf4a70"}]}
