diff --git a/telegram/client.py b/telegram/client.py
index 75b538d..a32387e 100644
--- a/telegram/client.py
+++ b/telegram/client.py
@@ -345,6 +345,16 @@ class Telegram:
         for handler in self._update_handlers[update_type]:
             self._workers_queue.put((handler, update), timeout=self._queue_put_timeout)
 
+    def remove_update_handler(self, handler_type: str, func: Callable) -> None:
+        """
+        Remove a handler with the specified type
+        """
+        try:
+            self._update_handlers[handler_type].remove(func)
+        except (ValueError, KeyError):
+            # not in the list
+            pass
+
     def add_message_handler(self, func: Callable) -> None:
         self.add_update_handler(MESSAGE_HANDLER_TYPE, func)
 

[Feature Request] Function to remove handler
Shouldn't be that complicated but would be nice to have.
diff --git a/tests/requirements.txt b/tests/requirements.txt
index 6cd6df8..023005f 100644
--- a/tests/requirements.txt
+++ b/tests/requirements.txt
@@ -1,5 +1,5 @@
-pytest==5.3.5
+pytest==5.3.2
 flake8==3.7.9
 pylint==2.4.4
-ipdb==0.12.3
+ipdb==0.12.2
 mypy==0.761
diff --git a/tests/test_telegram_methods.py b/tests/test_telegram_methods.py
index add7068..b019003 100644
--- a/tests/test_telegram_methods.py
+++ b/tests/test_telegram_methods.py
@@ -99,6 +99,29 @@ class TestTelegram:
 
         assert telegram._update_handlers[MESSAGE_HANDLER_TYPE] == [my_handler]
 
+    def test_remove_update_handler(self, telegram):
+        # check remove_update_handler
+        assert telegram._update_handlers[MESSAGE_HANDLER_TYPE] == []
+
+        def my_handler():
+            pass
+
+        telegram.add_message_handler(my_handler)
+
+        telegram.remove_update_handler(MESSAGE_HANDLER_TYPE, my_handler)
+
+        assert telegram._update_handlers[MESSAGE_HANDLER_TYPE] == []
+
+    def test_remove_update_handler_empty_handlers_list(self, telegram):
+        telegram._update_handlers = {}
+
+        def my_handler():
+            pass
+
+        telegram.remove_update_handler(MESSAGE_HANDLER_TYPE, my_handler)
+
+        assert telegram._update_handlers == {}
+
     def test_add_update_handler(self, telegram):
         # check that add_update_handler function
         # appends passsed func to _update_handlers[type] list

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-mock setuptools
apt-get update apt-get install -y gcc openssl
3.9
tests/requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
astroid==2.3.3
asttokens==3.0.0
attrs==25.3.0
decorator==5.2.1
entrypoints==0.3
exceptiongroup==1.2.2
executing==2.2.0
flake8==3.7.9
iniconfig==2.1.0
ipdb==0.12.3
ipython==8.18.1
isort==4.3.21
jedi==0.19.2
lazy-object-proxy==1.4.3
matplotlib-inline==0.1.7
mccabe==0.6.1
more-itertools==10.6.0
mypy==0.761
mypy_extensions==0.4.4
packaging==24.2
parso==0.8.4
pexpect==4.9.0
pluggy==1.5.0
prompt_toolkit==3.0.50
ptyprocess==0.7.0
pure_eval==0.2.3
py==1.11.0
pycodestyle==2.5.0
pyflakes==2.1.1
Pygments==2.19.1
pylint==2.4.4
pytest==8.3.5
pytest-mock==3.14.0
-e git+https://github.com/alexander-akhmetov/python-telegram.git@c8d2621fcf195ca094732a8795087f5493530e1e#egg=python_telegram
six==1.17.0
stack-data==0.6.3
tomli==2.2.1
traitlets==5.14.3
typed-ast==1.4.3
typing_extensions==4.13.0
wcwidth==0.2.13
wrapt==1.11.2

name: python-telegram
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
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - 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=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - astroid==2.3.3
      - asttokens==3.0.0
      - attrs==25.3.0
      - decorator==5.2.1
      - entrypoints==0.3
      - exceptiongroup==1.2.2
      - executing==2.2.0
      - flake8==3.7.9
      - iniconfig==2.1.0
      - ipdb==0.12.3
      - ipython==8.18.1
      - isort==4.3.21
      - jedi==0.19.2
      - lazy-object-proxy==1.4.3
      - matplotlib-inline==0.1.7
      - mccabe==0.6.1
      - more-itertools==10.6.0
      - mypy==0.761
      - mypy-extensions==0.4.4
      - packaging==24.2
      - parso==0.8.4
      - pexpect==4.9.0
      - pluggy==1.5.0
      - prompt-toolkit==3.0.50
      - ptyprocess==0.7.0
      - pure-eval==0.2.3
      - py==1.11.0
      - pycodestyle==2.5.0
      - pyflakes==2.1.1
      - pygments==2.19.1
      - pylint==2.4.4
      - pytest==8.3.5
      - pytest-mock==3.14.0
      - python-telegram==0.10.0
      - six==1.17.0
      - stack-data==0.6.3
      - tomli==2.2.1
      - traitlets==5.14.3
      - typed-ast==1.4.3
      - typing-extensions==4.13.0
      - wcwidth==0.2.13
      - wrapt==1.11.2
prefix: /opt/conda/envs/python-telegram

tests/test_telegram_methods.py::TestTelegram::test_remove_update_handler tests/test_telegram_methods.py::TestTelegram::test_remove_update_handler_empty_handlers_list
tests/test_telegram_methods.py::TestTelegram::test_phone_bot_token_init tests/test_telegram_methods.py::TestTelegram::test_send_message tests/test_telegram_methods.py::TestTelegram::test_send_phone_number_or_bot_token tests/test_telegram_methods.py::TestTelegram::test_send_bot_token tests/test_telegram_methods.py::TestTelegram::test_add_message_handler tests/test_telegram_methods.py::TestTelegram::test_add_update_handler tests/test_telegram_methods.py::TestTelegram::test_run_handlers tests/test_telegram_methods.py::TestTelegram::test_run_handlers_should_not_be_called_for_another_update_type tests/test_telegram_methods.py::TestTelegram::test_call_method tests/test_telegram_methods.py::TestTelegram::test_get_web_page_instant_view tests/test_telegram_methods.py::TestTelegram::test_get_me tests/test_telegram_methods.py::TestTelegram::test_get_chat tests/test_telegram_methods.py::TestTelegram::test_get_chats tests/test_telegram_methods.py::TestTelegram::test_get_chat_history tests/test_telegram_methods.py::TestTelegram::test_set_initial_params tests/test_telegram_methods.py::TestTelegram__update_async_result::test_update_async_result_returns_async_result_with_same_id tests/test_telegram_methods.py::TestTelegram__update_async_result::test_result_id_should_be_replaced_if_it_is_auth_process tests/test_telegram_methods.py::TestTelegram__login::test_login_process_should_do_nothing_if_already_authorized tests/test_telegram_methods.py::TestTelegram__login::test_login_process_with_phone
telegram/client.py
telegram/client.py