FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python-telegram-bot/examples/errorhandlerbot.py at master · python-telegram-bot/python-telegram-bot · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
python-telegram-bot
/
python-telegram-bot
Public
Notifications
You must be signed in to change notification settings
Fork
6.1k
Star
29.4k
Code
Issues
24
Pull requests
15
Discussions
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Discussions
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
python-telegram-bot
/
examples
/
errorhandlerbot.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
88 lines (66 loc) · 3.34 KB
Breadcrumbs
python-telegram-bot
/
examples
/
errorhandlerbot.py
Copy path
File metadata and controls
88 lines (66 loc) · 3.34 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/env python
# pylint: disable=unused-argument
# This program is dedicated to the public domain under the CC0 license.
"""This is a very simple example on how one could implement a custom error handler."""
import
html
import
json
import
logging
import
traceback
from
telegram
import
Update
from
telegram
.
constants
import
ParseMode
from
telegram
.
ext
import
Application
,
CommandHandler
,
ContextTypes
# Enable logging
logging
.
basicConfig
(
format
=
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
,
level
=
logging
.
INFO
)
# set higher logging level for httpx to avoid all GET and POST requests being logged
logging
.
getLogger
(
"httpx"
).
setLevel
(
logging
.
WARNING
)
logger
=
logging
.
getLogger
(
__name__
)
# This can be your own ID, or one for a developer group/channel.
# You can use the /start command of this bot to see your chat id.
DEVELOPER_CHAT_ID
=
123456789
async
def
error_handler
(
update
:
object
,
context
:
ContextTypes
.
DEFAULT_TYPE
)
->
None
:
"""Log the error and send a telegram message to notify the developer."""
# Log the error before we do anything else, so we can see it even if something breaks.
logger
.
error
(
"Exception while handling an update:"
,
exc_info
=
context
.
error
)
# traceback.format_exception returns the usual python message about an exception, but as a
# list of strings rather than a single string, so we have to join them together.
tb_list
=
traceback
.
format_exception
(
None
,
context
.
error
,
context
.
error
.
__traceback__
)
tb_string
=
""
.
join
(
tb_list
)
# Build the message with some markup and additional information about what happened.
# You might need to add some logic to deal with messages longer than the 4096 character limit.
update_str
=
update
.
to_dict
()
if
isinstance
(
update
,
Update
)
else
str
(
update
)
message
=
(
"An exception was raised while handling an update
\n
"
f"<pre>update =
{
html
.
escape
(
json
.
dumps
(
update_str
,
indent
=
2
,
ensure_ascii
=
False
))
}
"
"</pre>
\n
\n
"
f"<pre>context.chat_data =
{
html
.
escape
(
str
(
context
.
chat_data
))
}
</pre>
\n
\n
"
f"<pre>context.user_data =
{
html
.
escape
(
str
(
context
.
user_data
))
}
</pre>
\n
\n
"
f"<pre>
{
html
.
escape
(
tb_string
)
}
</pre>"
)
# Finally, send the message
await
context
.
bot
.
send_message
(
chat_id
=
DEVELOPER_CHAT_ID
,
text
=
message
,
parse_mode
=
ParseMode
.
HTML
)
async
def
bad_command
(
update
:
Update
,
context
:
ContextTypes
.
DEFAULT_TYPE
)
->
None
:
"""Raise an error to trigger the error handler."""
await
context
.
bot
.
wrong_method_name
()
# type: ignore[attr-defined]
async
def
start
(
update
:
Update
,
context
:
ContextTypes
.
DEFAULT_TYPE
)
->
None
:
"""Displays info on how to trigger an error."""
await
update
.
effective_message
.
reply_html
(
"Use /bad_command to cause an error.
\n
"
f"Your chat id is <code>
{
update
.
effective_chat
.
id
}
</code>."
)
def
main
()
->
None
:
"""Run the bot."""
# Create the Application and pass it your bot's token.
application
=
Application
.
builder
().
token
(
"TOKEN"
).
build
()
# Register the commands...
application
.
add_handler
(
CommandHandler
(
"start"
,
start
))
application
.
add_handler
(
CommandHandler
(
"bad_command"
,
bad_command
))
# ...and the error handler
application
.
add_error_handler
(
error_handler
)
# Run the bot until the user presses Ctrl-C
application
.
run_polling
(
allowed_updates
=
Update
.
ALL_TYPES
)
if
__name__
==
"__main__"
:
main
()
Back
|
FazBrowse Home
|
New Git URL