sync-addons icon indicating copy to clipboard operation
sync-addons copied to clipboard

sync_telegram: error when the bot is blocked

Open trojikman opened this issue 3 years ago • 7 comments

Steps to reproduce the error:

  1. Start messaging with the bot via telegram and block it after that
  2. Try to send a message via Odoo with the user without Administration/Settings access rights Result: You'll see something like that: Screenshot from 2021-08-23 17-20-26

If we try to send the message via the user with Administration/Settings access rights we'll get this error:

Odoo Server Error
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
    result = request.dispatch()
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 683, in dispatch
    result = self._call_function(**self.params)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 359, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 94, in wrapper
    return f(dbname, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 347, in checked_call
    result = self.endpoint(*a, **kw)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 912, in __call__
    return self.method(*args, **kw)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 531, in response_wrap
    response = f(*args, **kw)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1377, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1369, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 396, in call_kw
    result = _call_kw_multi(method, model, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 383, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_channel.py", line 416, in message_post
    message = super(Channel, self.with_context(mail_create_nosubscribe=True)).message_post(message_type=message_type, moderation_status=moderation_status, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_thread.py", line 1888, in message_post
    self._notify_thread(new_message, values, **notif_kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_channel.py", line 542, in _notify_thread
    super(Channel, self)._notify_thread(message, msg_vals=msg_vals, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/sms/models/mail_thread.py", line 236, in _notify_thread
    recipients_data = super(MailThread, self)._notify_thread(message, msg_vals=msg_vals, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_thread.py", line 2135, in _notify_thread
    self._notify_record_by_inbox(message, rdata, msg_vals=msg_vals, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_thread.py", line 2153, in _notify_record_by_inbox
    message.write({'channel_ids': [(6, 0, channel_ids)]})
  File "/usr/lib/python3/dist-packages/odoo/addons/base_automation/models/base_automation.py", line 348, in write
    action._process(records, domain_post=domain_post)
  File "/usr/lib/python3/dist-packages/odoo/addons/base_automation/models/base_automation.py", line 273, in _process
    raise e
  File "/usr/lib/python3/dist-packages/odoo/addons/base_automation/models/base_automation.py", line 270, in _process
    self.action_server_id.sudo().with_context(**ctx).run()
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_actions.py", line 629, in run
    res = runner(run_self, eval_context=eval_context)
  File "/usr/lib/python3/dist-packages/odoo/addons/website/models/ir_actions.py", line 61, in _run_action_code_multi
    res = super(ServerAction, self)._run_action_code_multi(eval_context)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_actions.py", line 498, in _run_action_code_multi
    safe_eval(self.code.strip(), eval_context, mode="exec", nocopy=True)  # nocopy allows to return 'action'
  File "/usr/lib/python3/dist-packages/odoo/tools/safe_eval.py", line 346, in safe_eval
    raise ValueError('%s: "%s" while evaluating\n%r' % (ustr(type(e)), ustr(e), expr))
Exception

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 639, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 315, in _handle_exception
    raise exception.with_traceback(None) from new_cause
ValueError: <class 'ValueError'>: "<class 'telegram.error.Unauthorized'>: "Forbidden: bot was blocked by the user" while evaluating
'\ndef handle_db(records):\n    # records are instances of mail.message\n    for mail_message in records:\n        for channel in mail_message.channel_ids:\n            if channel.channel_type != \'telegram\':\n                continue\n            channel_link = channel.search_links(TG_CHAT_CHANNEL_REL)\n            if not channel_link:\n                continue\n\n            telegram_user_ref = channel_link.external\n            #channel_link = get_link(TG_CHAT_CHANNEL_REL, telegram_user_ref)\n\n            if not mail_message.author_id.search_links(TG_PARTNER_REL) and mail_message.author_id.id != odoobot_id:\n                log("MESSAGE from odoo: channel_id %s - author_id %s - attachment_ids: %s - message_text: %s" % (mail_message.res_id, mail_message.author_id.id, mail_message.attachment_ids, mail_message.body), LOG_DEBUG)\n\n                if mail_message.body:\n                    message_html = "%s\\n\\n<i>%s</i>" % (mail_message.body, mail_message.author_id.name)\n                    telegram.sendMessage(telegram_user_ref, message_html, parse_mode=\'HTML\')\n\n                if mail_message.attachment_ids:\n                    for attach in mail_message.attachment_ids:\n                        log("ATTACHMENT from odoo: attach.id %s - name %s" % (attach.name, attach.id), LOG_INFO)\n\n                        if attach.mimetype and "/" in attach.mimetype and attach.mimetype.split("/")[0] == "image":\n                            if  attach.file_size < telegram.MAX_SIZE_IMAGE:\n                                telegram.sendPhoto(telegram_user_ref, attach.datas)\n                            else:\n                                channel.message_post(body="You cannot send more than 10 MB for photos.",\n                                    author_id=odoobot_id, message_type="comment", subtype_xmlid="mail.mt_comment")\n                        else:\n                            if  attach.file_size < telegram.MAX_SIZE_DOCUMENT:\n                                telegram.sendDocument(telegram_user_ref, attach.name, attach.datas)\n                            else:\n                                channel.message_post(body="You cannot send more than 50 MB for documents.",\n                                    author_id=odoobot_id, message_type="comment", subtype_xmlid="mail.mt_comment")\n\n\n\n        \nEXECUTION_RESULT_ = handle_db(*EXECUTION_ARGS_, **EXECUTION_KWARGS_)\n        '" while evaluating
'env["sync.trigger.automation"].browse(4).sudo().start(records)'

Expected behavior: in cases when the user blocks the Bot in Odoo we need to understand what's happened without any errors

trojikman avatar Jun 28 '21 11:06 trojikman

via Hubstaff User: Denis Mudarisov

Project: sync-addons - https://app.hubstaff.com/projects/1618283 Date Range: 08/19/21 - 08/19/21 Work session total: 0:39:30 Billable: Yes

Grand total: 0:39:30

trojikman avatar Aug 20 '21 04:08 trojikman

via Hubstaff User: Denis Mudarisov

Project: sync-addons - https://app.hubstaff.com/projects/1618283 Date Range: 08/09/21 - 08/20/21 Work session total: 2:35:03 Billable: Yes

Grand total: 3:14:33

trojikman avatar Aug 21 '21 04:08 trojikman

More detailed error:

Odoo Server Error
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
    result = request.dispatch()
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 683, in dispatch
    result = self._call_function(**self.params)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 359, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 94, in wrapper
    return f(dbname, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 347, in checked_call
    result = self.endpoint(*a, **kw)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 912, in __call__
    return self.method(*args, **kw)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 531, in response_wrap
    response = f(*args, **kw)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1389, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1381, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 396, in call_kw
    result = _call_kw_multi(method, model, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 383, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_channel.py", line 426, in message_post
    message = super(Channel, self.with_context(mail_create_nosubscribe=True, mail_post_autofollow=False)).message_post(message_type=message_type, moderation_status=moderation_status, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_thread.py", line 1896, in message_post
    self._notify_thread(new_message, values, **notif_kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_channel.py", line 552, in _notify_thread
    super(Channel, self)._notify_thread(message, msg_vals=msg_vals, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/sms/models/mail_thread.py", line 238, in _notify_thread
    recipients_data = super(MailThread, self)._notify_thread(message, msg_vals=msg_vals, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_thread.py", line 2143, in _notify_thread
    self._notify_record_by_inbox(message, rdata, msg_vals=msg_vals, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/mail/models/mail_thread.py", line 2161, in _notify_record_by_inbox
    message.write({'channel_ids': [(6, 0, channel_ids)]})
  File "/usr/lib/python3/dist-packages/odoo/addons/base_automation/models/base_automation.py", line 348, in write
    action._process(records, domain_post=domain_post)
  File "/usr/lib/python3/dist-packages/odoo/addons/base_automation/models/base_automation.py", line 273, in _process
    raise e
  File "/usr/lib/python3/dist-packages/odoo/addons/base_automation/models/base_automation.py", line 270, in _process
    self.action_server_id.sudo().with_context(**ctx).run()
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_actions.py", line 632, in run
    res = runner(run_self, eval_context=eval_context)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_actions.py", line 501, in _run_action_code_multi
    safe_eval(self.code.strip(), eval_context, mode="exec", nocopy=True)  # nocopy allows to return 'action'
  File "/usr/lib/python3/dist-packages/odoo/tools/safe_eval.py", line 346, in safe_eval
    raise ValueError('%s: "%s" while evaluating\n%r' % (ustr(type(e)), ustr(e), expr))
Exception

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 639, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 315, in _handle_exception
    raise exception.with_traceback(None) from new_cause
ValueError: <class 'ValueError'>: "<class 'telegram.error.Unauthorized'>: "Forbidden: bot was blocked by the user" while evaluating
'\ndef handle_db(records):\n    # records are instances of mail.message\n    for mail_message in records:\n        for channel in mail_message.channel_ids:\n            if channel.channel_type != \'multi_livechat_telegram\':\n                continue\n            channel_link = channel.search_links(TG_CHAT_CHANNEL_REL)\n            if not channel_link:\n                continue\n\n            telegram_user_ref = channel_link.external\n            #channel_link = get_link(TG_CHAT_CHANNEL_REL, telegram_user_ref)\n\n            if not mail_message.author_id.search_links(TG_PARTNER_REL) and mail_message.author_id.id != odoobot_id:\n                log("MESSAGE from odoo: channel_id %s - author_id %s - attachment_ids: %s - message_text: %s" % (mail_message.res_id, mail_message.author_id.id, mail_message.attachment_ids, mail_message.body), LOG_DEBUG)\n\n                if mail_message.body:\n                    message_html = "%s\\n\\n<i>%s</i>" % (mail_message.body, mail_message.author_id.name)\n                    telegram.sendMessage(telegram_user_ref, message_html, parse_mode=\'HTML\')\n\n                if mail_message.attachment_ids:\n                    for attach in mail_message.attachment_ids:\n                        log("ATTACHMENT from odoo: attach.id %s - name %s" % (attach.name, attach.id), LOG_INFO)\n\n                        if attach.mimetype and "/" in attach.mimetype and attach.mimetype.split("/")[0] == "image":\n                            if  attach.file_size < telegram.MAX_SIZE_IMAGE:\n                                telegram.sendPhoto(telegram_user_ref, attach.datas)\n                            else:\n                                channel.message_post(body="You cannot send more than 10 MB for photos.",\n                                    author_id=odoobot_id, message_type="comment", subtype_xmlid="mail.mt_comment")\n                        else:\n                            if  attach.file_size < telegram.MAX_SIZE_DOCUMENT:\n                                telegram.sendDocument(telegram_user_ref, attach.name, attach.datas)\n                            else:\n                                channel.message_post(body="You cannot send more than 50 MB for documents.",\n                                    author_id=odoobot_id, message_type="comment", subtype_xmlid="mail.mt_comment")\n\n\n\n        \nEXECUTION_RESULT_ = handle_db(*EXECUTION_ARGS_, **EXECUTION_KWARGS_)\n        '" while evaluating
'env["sync.trigger.automation"].browse(4).sudo().start(records)'

trojikman avatar Aug 23 '21 08:08 trojikman

via Hubstaff User: Denis Mudarisov

Project: sync-addons - https://app.hubstaff.com/projects/1618283 Date Range: 08/20/21 - 08/23/21 Work session total: 1:01:24 Billable: Yes

Grand total: 4:15:57

trojikman avatar Aug 24 '21 04:08 trojikman

via Hubstaff User: Denis Mudarisov

Project: sync-addons - https://app.hubstaff.com/projects/1618283 Date Range: 08/24/21 - 08/24/21 Work session total: 0:40:47 Billable: Yes

Grand total: 4:56:44

trojikman avatar Aug 25 '21 04:08 trojikman

via Hubstaff User: Denis Mudarisov

Project: sync-addons - https://app.hubstaff.com/projects/1618283 Date Range: 08/24/21 - 08/24/21 Work session total: 0:00:52 Billable: Yes

Grand total: 4:57:36

trojikman avatar Aug 26 '21 04:08 trojikman

via Hubstaff User: Denis Mudarisov

Project: sync-addons - https://app.hubstaff.com/projects/1618283 Date Range: 08/26/21 - 08/26/21 Work session total: 0:19:16 Billable: Yes

Grand total: 5:16:52

trojikman avatar Aug 27 '21 04:08 trojikman