Commit Graph

138 Commits

Author SHA1 Message Date
Duco van Amstel b79bf7d414 Forward only user-typing messages if supported by protocol ()
Fixes issue .

This is a somewhat hacky way of achieving the required goal but it seems
like this is the least problematic way of getting there.

We might want to redesign some bridge information later such that we
have a standardised way of specifying what is and what isn't supported
by each chat protocol / bridge.
2019-05-30 15:00:40 +02:00
Wim bd0e81f5a0 Add msg event to tengo 2019-04-24 22:47:37 +02:00
Wim 2d277a15f5
Add scripting (tengo) support for every outgoing message ()
Adds a new key OutMessage under [tengo] table, which specifies the location of the script that
will be invoked on each message being sent to a bridge and can be used to modify the Username
and the Text of that message.

The script will have the following global variables:
read-only:
inAccount, inProtocol, inChannel, inGateway
outAccount, outProtocol, outChannel, outGateway

read-write:
msgText, msgUsername

The script is reloaded on every message, so you can modify the script on the fly.

The default script in https://github.com/42wim/matterbridge/tree/master/internal/tengo/outmessage.tengo
is compiled in and will be executed if no script is specified.
2019-04-19 18:27:31 +02:00
Wim 7a24de15e4
Add tengo support to RemoteNickFormat ()
This commit add support for using the result of a tengo script in RemoteNickFormat using {TENGO}
Also adds a new toml table [tengo] with key RemoteNickFormat and value location of the script.
This also moves the TengoModifyMessage from [general] to Message in [tengo]

Documentation:

RemoteNickFormat allows you to specify the location of a tengo (https://github.com/d5/tengo/) script.
The script will have the following global variables:
to modify: result
to read: channel, bridge, gateway, protocol, nick

The result will be set in {TENGO} in the RemoteNickFormat key of every bridge where {TENGO} is specified
The script is reloaded on every message, so you can modify the script on the fly.
Example script can be found in https://github.com/42wim/matterbridge/tree/master/contrib/remotenickformat.tengo

[tengo]
RemoteNickFormat="remotenickformat.tengo"
2019-04-08 20:58:21 +02:00
Wim 8a875f292e Revert fix for . Closes
Revert "Fix typo"

This reverts commit dffd67eb31.

Revert "Handle quit message relay better on gateways with one channel on the irc bridge #722"

This reverts commit 240559581a.

Revert "Support quits from irc correctly. Fixes  ()"

This reverts commit d76a04bd0a.
2019-04-06 23:12:48 +02:00
Wim 115d20373c
Update tengo vendor and load the stdlib. Fixes () 2019-04-06 22:18:25 +02:00
Wim c557d51b6f
Need to specify /topic:mytopic for channel configuration (zulip). ()
Breaking change for zulip channel configuration.

For zulip the channel configuration will now need to specify also
the topic with /topic:yourtopic.

Example:
[[gateway.inout]]
account="zulip.streamchat"
channel="general/topic:mytopic"

This fixes the incorrect PR  which didn't work with multiple
gateways.
2019-03-02 20:31:38 +01:00
Wim 120bf39f55
Handle file upload/download only once for each message () 2019-02-27 20:52:05 +01:00
Wim 7f1d86b338
Fail gracefully on incorrect human input. Fixes () 2019-02-26 18:03:50 +01:00
Wim bf21604d42
Make all loggers derive from non-default instance () 2019-02-23 22:51:27 +01:00
Wim 1bb39eba87
Add scripting (tengo) support for every incoming message ()
TengoModifyMessage allows you to specify the location of a tengo (https://github.com/d5/tengo/) script.
This script will receive every incoming message and can be used to modify the Username and the Text of that message.
The script will have the following global variables:
to modify: msgUsername and msgText
to read: msgChannel and msgAccount

The script is reloaded on every message, so you can modify the script on the fly.

Example script can be found in https://github.com/42wim/matterbridge/tree/master/gateway/bench.tengo
and https://github.com/42wim/matterbridge/tree/master/contrib/example.tengo

The example below will check if the text contains blah and if so, it'll replace the text and the username of that message.
text := import("text")
if text.re_match("blah",msgText) {
    msgText="replaced by this"
    msgUsername="fakeuser"
}

More information about tengo on: https://github.com/d5/tengo/blob/master/docs/tutorial.md and
https://github.com/d5/tengo/blob/master/docs/stdlib.md
2019-02-23 16:39:44 +01:00
Wim 3190703dc8
Support rewriting messages from relaybots using ExtractNicks. Fixes ()
some examples:
this replaces a message like "Relaybot: <relayeduser> something interesting" to "relayeduser: something interesting"
ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ] ]
you can use multiple entries for multiplebots
this also replaces a message like "otherbot: (relayeduser) something else" to "relayeduser: something else"
ExtractNicks=[ [ "Relaybot", "<(.*?)>\\s+" ],[ "otherbot","\\((.*?)\\)\\s+" ]
OPTIONAL (default empty)
ExtractNicks=[ ["otherbot","<(.*?)>\\s+" ] ]
2019-02-23 16:35:54 +01:00
Wim 42276ea7d0 Disable updateChannelMembers for now 2019-02-21 21:26:12 +01:00
Wim dffd67eb31 Fix typo 2019-02-21 20:33:49 +01:00
Krzysiek Madejski 55e79063d6 Add initial WhatsApp support () 2019-02-21 20:28:13 +01:00
Wim 240559581a Handle quit message relay better on gateways with one channel on the irc bridge 2019-02-21 17:55:04 +01:00
Wim eef654de98 Fix bug in 2019-02-17 22:45:23 +01:00
Wim d76a04bd0a
Support quits from irc correctly. Fixes () 2019-02-17 22:43:04 +01:00
Wim 0bcb0b882f
Support join/leaves from discord. Closes () 2019-02-17 21:49:45 +01:00
Wim 4525fa31aa
Allow regexs in ignoreNicks. Closes () 2019-02-17 21:49:28 +01:00
Wim 57f156be83
Hint at thread replies when messages are unthreaded (slack) () 2019-02-10 17:23:50 +01:00
Wim 707db950c8 Send GetChannelMembers event only to slack for now 2019-01-24 22:46:05 +01:00
Wim fb713ed91b
Add initial support for getting ChannelMember info of all bridges ()
* Add initial support for getting ChannelMember info of all bridges.

Adds an EventGetChannelMembers event, which gets send every x time to
all bridges. Bridges should respond on this event with a Message
containing ChannelMembers in the EventGetChannelMembers key in the
Extra field.

handleEventGetChannelMembers will handle this Message and sets the
contained ChannelMembers to the Bridge struct.

* Add ChannelMembers support to the slack bridge
2019-01-18 18:35:31 +01:00
Wim 56749dfb20 Fail if channel starts with hashtag (mattermost). Closes 2019-01-07 00:26:11 +01:00
Duco van Amstel da8e415ae1 Use logrus imports instead of log () 2018-12-26 15:16:09 +01:00
Wim ccd55d2a28
Refactor gateway ()
* Decrease complexity of handleMessage, handleReceive, handleFiles
* Move handlers to handlers.go
* Split ignoreMessage up in ignoreTextEmpty, ignoreNicks and IgnoreTexts
* Add ignoreEvent
* Add testcase for ignoreTextEmpty, ignoreNicks, ignoreTexts and ignoreEvent
2018-12-12 23:57:17 +01:00
Duco van Amstel af7a00d030 Enable gosec linter () 2018-12-06 00:40:55 +01:00
Patrick Connolly 47d29ecf63 Tidy up fetching of config values. () 2018-12-01 00:24:07 +01:00
Patrick Connolly f2088a687e Extract bridgeMap into own package to improve testability () 2018-11-30 23:53:00 +01:00
Patrick Connolly f5659d455d Sync channel topics between Slack bridges ()
Added logic to allow for configurable synchronisation of topics and purposes of channels between Slack bridges.
2018-11-26 09:47:04 +00:00
Wim f4d4dc91b1
Add option to ignore failing bridge on start. Fixes () 2018-11-25 10:35:35 +01:00
Wim ae32bae791
Add protocol to msg.ID in cache () 2018-11-19 21:28:23 +01:00
Duco van Amstel ce21ba1545 Fix golint linter issues and enable it in CI () 2018-11-15 20:43:43 +01:00
Duco van Amstel 16d5aeac7c Make config.Config more unit-test friendly () 2018-11-13 23:30:56 +01:00
Duco van Amstel e19ba5a06a Add new Slack connection and forked legacy Slack bridge () 2018-11-13 20:51:19 +01:00
Wim 730ccdd456 Add support for mattermost matterbridge plugin 2018-11-11 21:56:12 +01:00
Wim 9be0f8f000 Make gochecknoinits linter happy 2018-11-08 22:33:03 +01:00
Wim 78401214b0 Make scopelint happy 2018-11-08 22:29:34 +01:00
Wim b2a07aba3a Make goconst linter happy 2018-11-08 22:20:03 +01:00
Patrick Connolly 3d281b3316 Add ability to show when user is typing across Slack bridges () 2018-11-08 20:45:40 +01:00
Wim 399789811e Make gocritic linter happy 2018-11-08 00:46:34 +01:00
Wim 1794922263 Make unparam linter happy 2018-11-08 00:29:30 +01:00
David Hill 0e2522279e Clean up various stuff ()
* various cleanups
2018-11-07 20:36:50 +01:00
Patrick Connolly a20b7895a9 Preserve threading between Slack instances ()
* Opportunistically preserve Slack threading when parent thread in cache. []

* Removed slack-specific processing from gateway.

* Added docs.

* Add option to enable threading, with default to off.

* Did cleanup on @42wim's comments.

* Update gateway/gateway.go

Co-Authored-By: patcon <patrick.c.connolly@gmail.com>

* Suggestion from @42wim :)

* Suggestions from @42wim.

* More suggestions.
2018-11-07 09:14:31 +01:00
Patrick Connolly 291594b99c Allow origin CHANNEL to be used in RemoteNickFormat ()
* Added origin CHANNEL to RemoteNickFormat. Updated config docs. [Fixes ]

* Update matterbridge.toml.sample

Co-Authored-By: patcon <patrick.c.connolly@gmail.com>
2018-10-23 21:53:11 +02:00
Duco van Amstel 3dd4ec57ff Fix race in gateway test. () 2018-10-13 00:47:18 +02:00
Duco van Amstel 69646a160d Add Gateway's name to RemoteNickFormat ()
In order to support extra use cases we should add the `{GATEWAY}` tag to the `RemoteNickFormat` string which would be replaced by the value of the `name=` field from a gateway's configuration.

This is _very_ useful when you are forwarding, for example, multiple channels from one chat to a single channel on another one (one-way). It will help you identify the source channel of a message on the target chat.
2018-10-07 15:22:15 +02:00
Liam Stanley 51327a4056 Reconnect on quit. (irc) See ()
* potential fixes for 
* go: fix formatting/gofmt/goreturns
2018-06-09 12:47:40 +02:00
Remi Reuvekamp 33bd60528b Add config option MediaDownloadPath ()
* Add config option MediaUploadPath

MediaDownloadPath can be used instead of MediaServerUpload, for when your
webserver is on the same system as matterbridge and matterbridge has
write access to the serve dir.

* Limit length of hash in MediaServer urls to 8chars

Full SHA256 is unnecessary for uniqueness.
Also; if a file has the same first 8 charachters of the SHA256 hash,
it's still not a problem, as long as the filename is not the same.
2018-06-08 22:30:35 +02:00
Wim 45296100df Add initial zulip support 2018-05-07 21:35:48 +02:00