diff --git a/README.md b/README.md
index 4198fa9d..abde57b8 100644
--- a/README.md
+++ b/README.md
@@ -22,6 +22,7 @@ Letting people be where they want to be.
[Zulip][mb-zulip] |
[Telegram][mb-telegram] |
[Keybase][mb-keybase] |
+[MSTeams][mb-msteams] |
And more...
@@ -95,6 +96,7 @@ And more...
- [Telegram](https://telegram.org)
- [Rocket.chat](https://rocket.chat)
- [Matrix](https://matrix.org)
+- [Microsoft Teams](https://teams.microsoft.com)
- [Steam](https://store.steampowered.com/)
- [Twitch](https://twitch.tv)
- [Ssh-chat](https://github.com/shazow/ssh-chat)
@@ -333,6 +335,7 @@ Matterbridge wouldn't exist without these libraries:
- zulip - https://github.com/ifo/gozulipbot
- tengo - https://github.com/d5/tengo
- keybase - https://github.com/keybase/go-keybase-chat-bot
+- msgraph.go - https://github.com/yaegashi/msgraph.go
@@ -349,3 +352,4 @@ Matterbridge wouldn't exist without these libraries:
[mb-keybase]: https://keybase.io/team/matterbridge
[mb-zulip]: https://matterbridge.zulipchat.com/register/
[mb-telegram]: https://t.me/Matterbridge
+[mb-msteams]: https://teams.microsoft.com/join/hj92x75gd3y7
diff --git a/matterbridge.toml.sample b/matterbridge.toml.sample
index bd609857..af050700 100644
--- a/matterbridge.toml.sample
+++ b/matterbridge.toml.sample
@@ -545,6 +545,96 @@ Label=""
# REQUIRED
Team="myteam"
+###################################################################
+# Microsoft teams section
+# See https://github.com/42wim/matterbridge/wiki/MS-Teams-setup
+###################################################################
+
+[msteams.myteam]
+
+# TenantID
+# See https://github.com/42wim/matterbridge/wiki/MS-Teams-setup#get-necessary-ids-for-matterbridge
+TenantID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
+
+# ClientID
+# See https://github.com/42wim/matterbridge/wiki/MS-Teams-setup#get-necessary-ids-for-matterbridge
+ClientID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
+
+# TeamID
+# See https://github.com/42wim/matterbridge/wiki/MS-Teams-setup#get-necessary-ids-for-matterbridge
+TeamID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
+
+## RELOADABLE SETTINGS
+## Settings below can be reloaded by editing the file
+
+#Nicks you want to ignore.
+#Regular expressions supported
+#Messages from those users will not be sent to other bridges.
+#OPTIONAL
+IgnoreNicks="ircspammer1 ircspammer2"
+
+#Messages you want to ignore.
+#Messages matching these regexp will be ignored and not sent to other bridges
+#See https://regex-golang.appspot.com/assets/html/index.html for more regex info
+#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword
+IgnoreMessages="^~~ badword"
+
+#messages you want to replace.
+#it replaces outgoing messages from the bridge.
+#so you need to place it by the sending bridge definition.
+#regular expressions supported
+#some examples:
+#this replaces cat => dog and sleep => awake
+#replacemessages=[ ["cat","dog"], ["sleep","awake"] ]
+#this replaces every number with number. 123 => numbernumbernumber
+#replacemessages=[ ["[0-9]","number"] ]
+#optional (default empty)
+ReplaceMessages=[ ["cat","dog"] ]
+
+#nicks you want to replace.
+#see replacemessages for syntaxa
+#optional (default empty)
+ReplaceNicks=[ ["user--","user"] ]
+
+#Extractnicks is used to for example rewrite messages from other relaybots
+#See https://github.com/42wim/matterbridge/issues/713 and https://github.com/42wim/matterbridge/issues/466
+#some examples:
+#this replaces a message like "Relaybot: 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+" ] ]
+
+#extra label that can be used in the RemoteNickFormat
+#optional (default empty)
+Label=""
+
+#RemoteNickFormat defines how remote users appear on this bridge
+#See [general] config section for default options
+RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
+
+#Enable to show users joins/parts from other bridges
+#Currently works for messages from the following bridges: irc, mattermost, slack, discord
+#OPTIONAL (default false)
+ShowJoinPart=false
+
+#StripNick only allows alphanumerical nicks. See https://github.com/42wim/matterbridge/issues/285
+#It will strip other characters from the nick
+#OPTIONAL (default false)
+StripNick=false
+
+#Enable to show topic changes from other bridges
+#Only works hiding/show topic changes from slack bridge for now
+#OPTIONAL (default false)
+ShowTopicChange=false
+
+#Opportunistically preserve threaded replies between bridges
+#that support threading
+#OPTIONAL (default false)
+PreserveThreading=false
+
###################################################################
#slack section
###################################################################
@@ -1608,6 +1698,8 @@ enable=true
# rocketchat - #channel (# is required (also needed for private channels!)
# matrix - #channel:server (eg #yourchannel:matrix.org)
# - encrypted rooms are not supported in matrix
+ # msteams - 19:xxxxxxxxxxxxxxxxxxxxxxxxxx@thread.skype
+ # - You'll find the channel ID in the URL in the threadId=19:82abcxxxxxxxxx@thread.skype
# steam - chatid (a large number).
# The number in the URL when you click "enter chat room" in the browser
# whatsapp - 48111222333-123455678999@g.us A unique group JID;