39
40# get user info and send it to message
41@app.on_message(filters.command("info", prefix) & filters.me)
42async def getUserInfo(app, msg):43 if msg.reply_to_message:
44 await msg.edit(f"**User info**\n\n**First name:** `{msg.reply_to_message.from_user.first_name}`\n**Last name:** `{msg.reply_to_message.from_user.last_name}`\n**Username:** `{msg.reply_to_message.from_user.username}`\n**User id:** `{msg.reply_to_message.from_user.id}`")
45 else:
28 await msg.edit("Reply to message")
29# get all id and send it to message
30@app.on_message(filters.command("allid", prefix) & filters.me)
31async def getAllId(app, msg):32 if msg.chat.type == "private":
33 await msg.edit("This is private chat")
34 return
21 await msg.edit(f"Chat id: `{msg.chat.id}`\nUser forward message id: `{msg.reply_to_message.forward_from_message_id}`")
22# get user id and send it to message
23@app.on_message(filters.command("uid", prefix) & filters.me)
24async def getUserId(app, msg):25 if msg.reply_to_message:
26 await msg.edit(f"User id: `{msg.reply_to_message.from_user.id}`")
27 else:
4
5# get group id and send it to message
6@app.on_message(filters.command("id", prefix) & filters.me)
7async def getGroupId(app, msg): 8 if msg.chat.type == "private":
9 await msg.edit("This is private chat")
10 return
5
6# exec os command and send output to message
7@app.on_message(filters.command(["exec",">"], prefix) & filters.me)
8async def execCommand(app, msg): 9 if len(msg.command) < 2:
10 await msg.edit("Usage: `exec [command]`")
11 return
The local variable name hides the variable defined in the outer scope, making it inaccessible and might confuse.
filename = 'myfile.txt'
def read_file(filename): # This shadows the global `filename`
with open(filename) as file:
return file.readlines()
FILENAME = 'myfile.txt' # renamed global to UPPER_CASE as convention
def read_file(filename):
with open(filename) as file:
return file.readlines()
Another usual suspect of this is when you use the same parameter name inside a function as the global variable you are using. For example:
def run_app(app):
# This `app` shadows the global app...
app.run()
if __name__ == '__main__':
app = MyApp() # This is a global variable!
run_app(app)
To avoid this re-defining of a global, consider not defining app
as a global, but inside a main()
function instead:
def run_app(app):
# There is no longer a global `app` variable.
app.run()
def main():
app = MyApp()
run_app(app)
if __name__ == '__main__':
main()