Allow webhook message setting directly
This commit is contained in:
parent
8fcb80df69
commit
fb2f2d9a39
@ -5,7 +5,7 @@ bot constants
|
|||||||
"""
|
"""
|
||||||
from typing import Any, Dict, List, Literal, Tuple
|
from typing import Any, Dict, List, Literal, Tuple
|
||||||
|
|
||||||
from freqtrade.enums import CandleType
|
from freqtrade.enums import CandleType, RPCMessageType
|
||||||
|
|
||||||
|
|
||||||
DEFAULT_CONFIG = 'config.json'
|
DEFAULT_CONFIG = 'config.json'
|
||||||
@ -282,6 +282,7 @@ CONF_SCHEMA = {
|
|||||||
'enabled': {'type': 'boolean'},
|
'enabled': {'type': 'boolean'},
|
||||||
'token': {'type': 'string'},
|
'token': {'type': 'string'},
|
||||||
'chat_id': {'type': 'string'},
|
'chat_id': {'type': 'string'},
|
||||||
|
'allow_custom_messages': {'type': 'boolean', 'default': True},
|
||||||
'balance_dust_level': {'type': 'number', 'minimum': 0.0},
|
'balance_dust_level': {'type': 'number', 'minimum': 0.0},
|
||||||
'notification_settings': {
|
'notification_settings': {
|
||||||
'type': 'object',
|
'type': 'object',
|
||||||
@ -344,6 +345,8 @@ CONF_SCHEMA = {
|
|||||||
'format': {'type': 'string', 'enum': WEBHOOK_FORMAT_OPTIONS, 'default': 'form'},
|
'format': {'type': 'string', 'enum': WEBHOOK_FORMAT_OPTIONS, 'default': 'form'},
|
||||||
'retries': {'type': 'integer', 'minimum': 0},
|
'retries': {'type': 'integer', 'minimum': 0},
|
||||||
'retry_delay': {'type': 'number', 'minimum': 0},
|
'retry_delay': {'type': 'number', 'minimum': 0},
|
||||||
|
**dict([(x, {'type': 'object'}) for x in RPCMessageType]),
|
||||||
|
# Below -> Deprecated
|
||||||
'webhookentry': {'type': 'object'},
|
'webhookentry': {'type': 'object'},
|
||||||
'webhookentrycancel': {'type': 'object'},
|
'webhookentrycancel': {'type': 'object'},
|
||||||
'webhookentryfill': {'type': 'object'},
|
'webhookentryfill': {'type': 'object'},
|
||||||
|
@ -88,7 +88,7 @@ class RPCManager:
|
|||||||
"""
|
"""
|
||||||
while queue:
|
while queue:
|
||||||
msg = queue.popleft()
|
msg = queue.popleft()
|
||||||
|
logger.info('Sending rpc strategy_msg: %s', msg)
|
||||||
for mod in self.registered_modules:
|
for mod in self.registered_modules:
|
||||||
if mod._config.get(mod.name, {}).get('allow_custom_messages', False):
|
if mod._config.get(mod.name, {}).get('allow_custom_messages', False):
|
||||||
mod.send_msg({
|
mod.send_msg({
|
||||||
|
@ -45,6 +45,7 @@ class Webhook(RPCHandler):
|
|||||||
""" Send a message to telegram channel """
|
""" Send a message to telegram channel """
|
||||||
try:
|
try:
|
||||||
whconfig = self._config['webhook']
|
whconfig = self._config['webhook']
|
||||||
|
# Deprecated 2022.10 - only keep generic method.
|
||||||
if msg['type'] in [RPCMessageType.ENTRY]:
|
if msg['type'] in [RPCMessageType.ENTRY]:
|
||||||
valuedict = whconfig.get('webhookentry')
|
valuedict = whconfig.get('webhookentry')
|
||||||
elif msg['type'] in [RPCMessageType.ENTRY_CANCEL]:
|
elif msg['type'] in [RPCMessageType.ENTRY_CANCEL]:
|
||||||
@ -61,6 +62,9 @@ class Webhook(RPCHandler):
|
|||||||
RPCMessageType.STARTUP,
|
RPCMessageType.STARTUP,
|
||||||
RPCMessageType.WARNING):
|
RPCMessageType.WARNING):
|
||||||
valuedict = whconfig.get('webhookstatus')
|
valuedict = whconfig.get('webhookstatus')
|
||||||
|
elif msg['type'].value in whconfig:
|
||||||
|
# Allow all types ...
|
||||||
|
valuedict = whconfig.get(msg['type'].value)
|
||||||
elif msg['type'] in (
|
elif msg['type'] in (
|
||||||
RPCMessageType.PROTECTION_TRIGGER,
|
RPCMessageType.PROTECTION_TRIGGER,
|
||||||
RPCMessageType.PROTECTION_TRIGGER_GLOBAL,
|
RPCMessageType.PROTECTION_TRIGGER_GLOBAL,
|
||||||
@ -69,8 +73,7 @@ class Webhook(RPCHandler):
|
|||||||
RPCMessageType.STRATEGY_MSG):
|
RPCMessageType.STRATEGY_MSG):
|
||||||
# Don't fail for non-implemented types
|
# Don't fail for non-implemented types
|
||||||
return
|
return
|
||||||
else:
|
|
||||||
raise NotImplementedError('Unknown message type: {}'.format(msg['type']))
|
|
||||||
if not valuedict:
|
if not valuedict:
|
||||||
logger.info("Message type '%s' not configured for webhooks", msg['type'])
|
logger.info("Message type '%s' not configured for webhooks", msg['type'])
|
||||||
return
|
return
|
||||||
|
@ -99,6 +99,7 @@ def test_send_msg_telegram_error(mocker, default_conf, caplog) -> None:
|
|||||||
|
|
||||||
def test_process_msg_queue(mocker, default_conf, caplog) -> None:
|
def test_process_msg_queue(mocker, default_conf, caplog) -> None:
|
||||||
telegram_mock = mocker.patch('freqtrade.rpc.telegram.Telegram.send_msg')
|
telegram_mock = mocker.patch('freqtrade.rpc.telegram.Telegram.send_msg')
|
||||||
|
default_conf['telegram']['allow_custom_messages'] = True
|
||||||
mocker.patch('freqtrade.rpc.telegram.Telegram._init')
|
mocker.patch('freqtrade.rpc.telegram.Telegram._init')
|
||||||
|
|
||||||
freqtradebot = get_patched_freqtradebot(mocker, default_conf)
|
freqtradebot = get_patched_freqtradebot(mocker, default_conf)
|
||||||
@ -108,8 +109,8 @@ def test_process_msg_queue(mocker, default_conf, caplog) -> None:
|
|||||||
queue.append('Test message 2')
|
queue.append('Test message 2')
|
||||||
rpc_manager.process_msg_queue(queue)
|
rpc_manager.process_msg_queue(queue)
|
||||||
|
|
||||||
assert log_has("Sending rpc message: {'type': strategy_msg, 'msg': 'Test message'}", caplog)
|
assert log_has("Sending rpc strategy_msg: Test message", caplog)
|
||||||
assert log_has("Sending rpc message: {'type': strategy_msg, 'msg': 'Test message 2'}", caplog)
|
assert log_has("Sending rpc strategy_msg: Test message 2", caplog)
|
||||||
assert telegram_mock.call_count == 2
|
assert telegram_mock.call_count == 2
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user