diff --git a/freqtrade/rpc/webhook.py b/freqtrade/rpc/webhook.py index 14b881126..80690ec0c 100644 --- a/freqtrade/rpc/webhook.py +++ b/freqtrade/rpc/webhook.py @@ -44,8 +44,11 @@ class Webhook(RPCHandler): def _get_value_dict(self, msg: RPCSendMsg) -> Optional[Dict[str, Any]]: whconfig = self._config['webhook'] + if msg['type'].value in whconfig: + # Explicit types should have priority + valuedict = whconfig.get(msg['type'].value) # Deprecated 2022.10 - only keep generic method. - if msg['type'] in [RPCMessageType.ENTRY]: + elif msg['type'] in [RPCMessageType.ENTRY]: valuedict = whconfig.get('webhookentry') elif msg['type'] in [RPCMessageType.ENTRY_CANCEL]: valuedict = whconfig.get('webhookentrycancel') @@ -62,9 +65,6 @@ class Webhook(RPCHandler): RPCMessageType.EXCEPTION, RPCMessageType.WARNING): valuedict = whconfig.get('webhookstatus') - elif msg['type'].value in whconfig: - # Allow all types ... - valuedict = whconfig.get(msg['type'].value) elif msg['type'] in ( RPCMessageType.PROTECTION_TRIGGER, RPCMessageType.PROTECTION_TRIGGER_GLOBAL, diff --git a/tests/rpc/test_rpc_webhook.py b/tests/rpc/test_rpc_webhook.py index f55582107..d0a0f5b1e 100644 --- a/tests/rpc/test_rpc_webhook.py +++ b/tests/rpc/test_rpc_webhook.py @@ -17,6 +17,10 @@ def get_webhook_dict() -> dict: "enabled": True, "url": "https://maker.ifttt.com/trigger/freqtrade_test/with/key/c764udvJ5jfSlswVRukZZ2/", "webhookentry": { + # Intentionally broken, as "entry" should have priority. + "value1": "Buying {pair55555}", + }, + "entry": { "value1": "Buying {pair}", "value2": "limit {limit:8f}", "value3": "{stake_amount:8f} {stake_currency}", @@ -89,15 +93,15 @@ def test_send_msg_webhook(default_conf, mocker): webhook.send_msg(msg=msg) assert msg_mock.call_count == 1 assert (msg_mock.call_args[0][0]["value1"] == - default_conf["webhook"]["webhookentry"]["value1"].format(**msg)) + default_conf["webhook"]["entry"]["value1"].format(**msg)) assert (msg_mock.call_args[0][0]["value2"] == - default_conf["webhook"]["webhookentry"]["value2"].format(**msg)) + default_conf["webhook"]["entry"]["value2"].format(**msg)) assert (msg_mock.call_args[0][0]["value3"] == - default_conf["webhook"]["webhookentry"]["value3"].format(**msg)) + default_conf["webhook"]["entry"]["value3"].format(**msg)) assert (msg_mock.call_args[0][0]["value4"] == - default_conf["webhook"]["webhookentry"]["value4"].format(**msg)) + default_conf["webhook"]["entry"]["value4"].format(**msg)) assert (msg_mock.call_args[0][0]["value5"] == - default_conf["webhook"]["webhookentry"]["value5"].format(**msg)) + default_conf["webhook"]["entry"]["value5"].format(**msg)) # Test short msg_mock.reset_mock() @@ -116,15 +120,15 @@ def test_send_msg_webhook(default_conf, mocker): webhook.send_msg(msg=msg) assert msg_mock.call_count == 1 assert (msg_mock.call_args[0][0]["value1"] == - default_conf["webhook"]["webhookentry"]["value1"].format(**msg)) + default_conf["webhook"]["entry"]["value1"].format(**msg)) assert (msg_mock.call_args[0][0]["value2"] == - default_conf["webhook"]["webhookentry"]["value2"].format(**msg)) + default_conf["webhook"]["entry"]["value2"].format(**msg)) assert (msg_mock.call_args[0][0]["value3"] == - default_conf["webhook"]["webhookentry"]["value3"].format(**msg)) + default_conf["webhook"]["entry"]["value3"].format(**msg)) assert (msg_mock.call_args[0][0]["value4"] == - default_conf["webhook"]["webhookentry"]["value4"].format(**msg)) + default_conf["webhook"]["entry"]["value4"].format(**msg)) assert (msg_mock.call_args[0][0]["value5"] == - default_conf["webhook"]["webhookentry"]["value5"].format(**msg)) + default_conf["webhook"]["entry"]["value5"].format(**msg)) # Test buy cancel msg_mock.reset_mock() @@ -328,6 +332,7 @@ def test_send_msg_webhook(default_conf, mocker): def test_exception_send_msg(default_conf, mocker, caplog): default_conf["webhook"] = get_webhook_dict() + del default_conf["webhook"]["entry"] del default_conf["webhook"]["webhookentry"] webhook = Webhook(RPC(get_patched_freqtradebot(mocker, default_conf)), default_conf)