FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python-telegram-bot/examples/timerbot.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
/
timerbot.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
108 lines (81 loc) · 3.74 KB
Breadcrumbs
python-telegram-bot
/
examples
/
timerbot.py
Copy path
File metadata and controls
108 lines (81 loc) · 3.74 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env python
# pylint: disable=unused-argument
# This program is dedicated to the public domain under the CC0 license.
"""
Simple Bot to send timed Telegram messages.
This Bot uses the Application class to handle the bot and the JobQueue to send
timed messages.
First, a few handler functions are defined. Then, those functions are passed to
the Application and registered at their respective places.
Then, the bot is started and runs until we press Ctrl-C on the command line.
Usage:
Basic Alarm Bot example, sends a message after a set time.
Press Ctrl-C on the command line or send a signal to the process to stop the
bot.
Note:
To use the JobQueue, you must install PTB via
`pip install "python-telegram-bot[job-queue]"`
"""
import
logging
from
telegram
import
Update
from
telegram
.
ext
import
Application
,
CommandHandler
,
ContextTypes
# Enable logging
logging
.
basicConfig
(
format
=
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
,
level
=
logging
.
INFO
)
# Define a few command handlers. These usually take the two arguments update and
# context.
# Best practice would be to replace context with an underscore,
# since context is an unused local variable.
# This being an example and not having context present confusing beginners,
# we decided to have it present as context.
async
def
start
(
update
:
Update
,
context
:
ContextTypes
.
DEFAULT_TYPE
)
->
None
:
"""Sends explanation on how to use the bot."""
await
update
.
message
.
reply_text
(
"Hi! Use /set <seconds> to set a timer"
)
async
def
alarm
(
context
:
ContextTypes
.
DEFAULT_TYPE
)
->
None
:
"""Send the alarm message."""
job
=
context
.
job
await
context
.
bot
.
send_message
(
job
.
chat_id
,
text
=
f"Beep!
{
job
.
data
}
seconds are over!"
)
def
remove_job_if_exists
(
name
:
str
,
context
:
ContextTypes
.
DEFAULT_TYPE
)
->
bool
:
"""Remove job with given name. Returns whether job was removed."""
current_jobs
=
context
.
job_queue
.
get_jobs_by_name
(
name
)
if
not
current_jobs
:
return
False
for
job
in
current_jobs
:
job
.
schedule_removal
()
return
True
async
def
set_timer
(
update
:
Update
,
context
:
ContextTypes
.
DEFAULT_TYPE
)
->
None
:
"""Add a job to the queue."""
chat_id
=
update
.
effective_message
.
chat_id
try
:
# args[0] should contain the time for the timer in seconds
due
=
float
(
context
.
args
[
0
])
if
due
<
0
:
await
update
.
effective_message
.
reply_text
(
"Sorry we can not go back to future!"
)
return
job_removed
=
remove_job_if_exists
(
str
(
chat_id
),
context
)
context
.
job_queue
.
run_once
(
alarm
,
due
,
chat_id
=
chat_id
,
name
=
str
(
chat_id
),
data
=
due
)
text
=
"Timer successfully set!"
if
job_removed
:
text
+=
" Old one was removed."
await
update
.
effective_message
.
reply_text
(
text
)
except
(
IndexError
,
ValueError
):
await
update
.
effective_message
.
reply_text
(
"Usage: /set <seconds>"
)
async
def
unset
(
update
:
Update
,
context
:
ContextTypes
.
DEFAULT_TYPE
)
->
None
:
"""Remove the job if the user changed their mind."""
chat_id
=
update
.
message
.
chat_id
job_removed
=
remove_job_if_exists
(
str
(
chat_id
),
context
)
text
=
"Timer successfully cancelled!"
if
job_removed
else
"You have no active timer."
await
update
.
message
.
reply_text
(
text
)
def
main
()
->
None
:
"""Run bot."""
# Create the Application and pass it your bot's token.
application
=
Application
.
builder
().
token
(
"TOKEN"
).
build
()
# on different commands - answer in Telegram
application
.
add_handler
(
CommandHandler
([
"start"
,
"help"
],
start
))
application
.
add_handler
(
CommandHandler
(
"set"
,
set_timer
))
application
.
add_handler
(
CommandHandler
(
"unset"
,
unset
))
# 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