coveralls: 
[![Coverage Status](https://coveralls.io/builds/8894977/badge)](https://coveralls.io/builds/8894977)

Coverage decreased (-2.07%) to 88.406% when pulling **2e9fbd4168e097d8122029b9d206fbb814f18b7b on jacobtomlinson:default-connectors** into **717138af2143ac10eb2232582987ca8fa9e04e00 on opsdroid:dev**.

coveralls: 
[![Coverage Status](https://coveralls.io/builds/9341671/badge)](https://coveralls.io/builds/9341671)

Coverage decreased (-1.9%) to 90.537% when pulling **0ee3aa909cca4b0b9c75c6a71c142a3b94f2ec14 on jacobtomlinson:default-connectors** into **bef3ccfae2b581b0e01fa001334a6beef7a7df57 on opsdroid:dev**.

coveralls: 
[![Coverage Status](https://coveralls.io/builds/9342108/badge)](https://coveralls.io/builds/9342108)

Coverage increased (+0.2%) to 92.602% when pulling **a285e010c0ce6ff857827b9b5ca28827da44b560 on jacobtomlinson:default-connectors** into **bef3ccfae2b581b0e01fa001334a6beef7a7df57 on opsdroid:dev**.

diff --git a/docs/extending/connectors.md b/docs/extending/connectors.md
index 620723f..1d45b7d 100644
--- a/docs/extending/connectors.md
+++ b/docs/extending/connectors.md
@@ -1,6 +1,6 @@
 # Creating a connector
 
-Connectors are a class which extends the base opsdroid Connector. The class has three mandatory methods, `connect`, `listen` and `respond`.
+Connectors are a class which extends the base opsdroid Connector. The class has three mandatory methods, `connect`, `listen` and `respond`. There are also some default values you can override with the `__init__` function, just be sure you are setting everything that the default init sets.
 
 #### connect
 *connect* is a method which connects to a specific chat service
@@ -26,6 +26,12 @@ from opsdroid.message import Message
 
 class MyConnector(Connector):
 
+  def __init__(self, config):
+    # Init the config for the connector
+    self.name = "MyConnector" # The name of your connector
+    self.config = config # The config dictionary to be accessed later
+    self.default_room = "MyDefaultRoom" # The default room for messages to go
+
   async def connect(self, opsdroid):
     # Create connection object with chat library
     self.connection = await chatlibrary.connect()
diff --git a/opsdroid/connector.py b/opsdroid/connector.py
index c1f0381..e446c97 100644
--- a/opsdroid/connector.py
+++ b/opsdroid/connector.py
@@ -24,6 +24,7 @@ class Connector():
         """
         self.name = ""
         self.config = config
+        self.default_room = None
 
     async def connect(self, opsdroid):
         """Connect to chat service.
diff --git a/opsdroid/core.py b/opsdroid/core.py
index dc9bd4b..3141d57 100644
--- a/opsdroid/core.py
+++ b/opsdroid/core.py
@@ -46,6 +46,18 @@ class OpsDroid():
         """Remove self from existing instances."""
         self.__class__.instances = []
 
+    @property
+    def default_connector(self):
+        """Return the default connector."""
+        default_connector = None
+        for connector in self.connectors:
+            if "default" in connector.config and connector.config["default"]:
+                default_connector = connector
+                break
+        if default_connector is None:
+            default_connector = self.connectors[0]
+        return default_connector
+
     def exit(self):
         """Exit application."""
         logging.info("Exiting application with return code " +

Default connector and default room
When writing a skill which originates from something other than a message (e.g cron #26) the response may need to know which room to post into. 

Most chat clients have a default room, like `#general` in Slack. This could be available as a property in the connector so that skills can easily access it. 

e.g

``` python
@non_message_decorator()
def myskill(opsdroid):
    for connector in opsdroid.connectors:
        message = Message("Message text", connector.default_room, None, connector)
        connector.respond(message)
```

It should also be possible to override the default room in the connector config.

``` yaml
connectors:
  slack:
    default-room: "#random"
```

diff --git a/tests/test_connector.py b/tests/test_connector.py
index 5e53ddd..ac6cd22 100644
--- a/tests/test_connector.py
+++ b/tests/test_connector.py
@@ -14,6 +14,7 @@ class TestConnectorBaseClass(unittest.TestCase):
     def test_init(self):
         config = {"example_item": "test"}
         connector = Connector(config)
+        self.assertEqual(None, connector.default_room)
         self.assertEqual("", connector.name)
         self.assertEqual("test", connector.config["example_item"])
 
diff --git a/tests/test_core.py b/tests/test_core.py
index 3199dce..daaa79d 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -104,6 +104,21 @@ class TestCore(unittest.TestCase):
             opsdroid.setup_skills(example_modules)
             self.assertEqual(len(example_modules[0]["module"].mock_calls), 1)
 
+    def test_default_connector(self):
+        with OpsDroid() as opsdroid:
+            mock_connector = Connector({})
+            opsdroid.connectors.append(mock_connector)
+            self.assertEqual(opsdroid.default_connector, mock_connector)
+
+            mock_default_connector = Connector({"default": True})
+            opsdroid.connectors.append(mock_default_connector)
+            self.assertEqual(opsdroid.default_connector,
+                             mock_default_connector)
+
+    def test_default_room(self):
+        mock_connector = Connector({})
+        self.assertEqual(None, mock_connector.default_room)
+
 
 class TestCoreAsync(asynctest.TestCase):
     """Test the async methods of the opsdroid core class."""

pip3 install -e .
parse_log_pytest
requirements.txt
pytest pytest-cov
apt-get update apt-get install -y git
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
aiohttp==3.8.6
aiosignal==1.2.0
async-timeout==4.0.2
asynctest==0.13.0
attrs==22.2.0
certifi==2021.5.30
charset-normalizer==3.0.1
coverage==6.2
frozenlist==1.2.0
idna==3.10
idna-ssl==1.1.0
importlib-metadata==4.8.3
iniconfig==1.1.1
multidict==5.2.0
-e git+https://github.com/opsdroid/opsdroid.git@bef3ccfae2b581b0e01fa001334a6beef7a7df57#egg=opsdroid
packaging==21.3
pluggy==1.0.0
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
pytest-cov==4.0.0
PyYAML==3.13
tomli==1.2.3
typing_extensions==4.1.1
yarl==1.7.2
zipp==3.6.0

name: opsdroid
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - aiohttp==3.8.6
      - aiosignal==1.2.0
      - async-timeout==4.0.2
      - asynctest==0.13.0
      - attrs==22.2.0
      - charset-normalizer==3.0.1
      - coverage==6.2
      - frozenlist==1.2.0
      - idna==3.10
      - idna-ssl==1.1.0
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - multidict==5.2.0
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - pyyaml==3.13
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - yarl==1.7.2
      - zipp==3.6.0
prefix: /opt/conda/envs/opsdroid

tests/test_connector.py::TestConnectorBaseClass::test_init tests/test_core.py::TestCore::test_default_connector tests/test_core.py::TestCore::test_default_room
tests/test_connector.py::TestConnectorBaseClass::test_connect tests/test_connector.py::TestConnectorBaseClass::test_listen tests/test_connector.py::TestConnectorBaseClass::test_respond tests/test_core.py::TestCore::test_core tests/test_core.py::TestCore::test_critical tests/test_core.py::TestCore::test_exit tests/test_core.py::TestCore::test_load_config tests/test_core.py::TestCore::test_load_regex_skill tests/test_core.py::TestCore::test_multiple_opsdroids tests/test_core.py::TestCore::test_setup_modules tests/test_core.py::TestCore::test_start_connectors tests/test_core.py::TestCore::test_start_databases tests/test_core.py::TestCore::test_start_loop tests/test_core.py::TestCoreAsync::test_parse
opsdroid/core.py opsdroid/connector.py docs/extending/connectors.md
opsdroid/core.py opsdroid/connector.py docs/extending/connectors.md