如何使用电报机器人获取作者的用户名?
how to get username of author using telegram bot?
我正在 python 中使用 python-telegram-bot
制作一个电报机器人,其中我有两个文件,一个是 main.py
,另一个是 responses.py
.in responses.py
我想发送用户名,但由于 main
函数,我无法发送。它在我的代码中总是 运行 所以我不能在 main
函数上传递像 update
这样的参数。所以我不能使用这个
chat_id = update.message.chat_id
first_name = update.message.chat.first_name
last_name = update.message.chat.last_name
username = update.message.chat.username
print("chat_id : {} and firstname : {} lastname : {} username {}". format(chat_id, first_name, last_name , username))
我的main.py代码:-
from telegram import *
from telegram.ext import *
from dotenv import load_dotenv
import responses as R
load_dotenv()
def main():
updater=Updater(os.getenv("BOT_TOKEN"), use_context=True)
dp=updater.dispatcher
dp.add_handler(MessageHandler(Filters.text,handle_message))
dp.add_error_handler(error)
updater.start_polling()
updater.idle()
main()
我的responses.py代码:-
def sample_responses(message):
message=message.lower()
if message in ("hello", "hi"):
return "Hey! How's it going?"
elif message in ("who are you", "who are you?"):
return "Hi! I am Buddy Bot. Developed by Soham."
我想在 responses.py 上打印用户名,在输入 hello 时它会回复“嘿!@user How it going?
请帮我解决这个问题。
将函数添加到 main.py
中的处理程序。您可以在那里定义触发函数的过滤器:
from telegram import *
from telegram.ext import *
from dotenv import load_dotenv
from responses import *
load_dotenv()
def main():
updater=Updater(os.getenv("BOT_TOKEN"), use_context=True)
dp=updater.dispatcher
dp.add_handler(MessageHandler(Filters.regex('^(hello|hi)$'), hello))
dp.add_handler(MessageHandler(Filters.regex('^(who are you)$'), whoareyou))
dp.add_error_handler(error)
updater.start_polling()
updater.idle()
main()
并在responses.py
中定义函数:
def hello(update: Update, context: CallbackContext) -> None:
try:
username = update.message.chat.username
except:
username = update.message.chat.first_name
update.message.reply_text(f'Hey! @{username} How it going?')
def whoareyou(update: Update, context: CallbackContext) -> None:
update.message.reply_text('Hi! I am Buddy Bot. Developed by Soham.')
请注意,并非所有用户都设置了用户名,因此我包含了一个 try-except,如果没有设置用户名,它会使用名字。
我正在 python 中使用 python-telegram-bot
制作一个电报机器人,其中我有两个文件,一个是 main.py
,另一个是 responses.py
.in responses.py
我想发送用户名,但由于 main
函数,我无法发送。它在我的代码中总是 运行 所以我不能在 main
函数上传递像 update
这样的参数。所以我不能使用这个
chat_id = update.message.chat_id
first_name = update.message.chat.first_name
last_name = update.message.chat.last_name
username = update.message.chat.username
print("chat_id : {} and firstname : {} lastname : {} username {}". format(chat_id, first_name, last_name , username))
我的main.py代码:-
from telegram import *
from telegram.ext import *
from dotenv import load_dotenv
import responses as R
load_dotenv()
def main():
updater=Updater(os.getenv("BOT_TOKEN"), use_context=True)
dp=updater.dispatcher
dp.add_handler(MessageHandler(Filters.text,handle_message))
dp.add_error_handler(error)
updater.start_polling()
updater.idle()
main()
我的responses.py代码:-
def sample_responses(message):
message=message.lower()
if message in ("hello", "hi"):
return "Hey! How's it going?"
elif message in ("who are you", "who are you?"):
return "Hi! I am Buddy Bot. Developed by Soham."
我想在 responses.py 上打印用户名,在输入 hello 时它会回复“嘿!@user How it going?
请帮我解决这个问题。
将函数添加到 main.py
中的处理程序。您可以在那里定义触发函数的过滤器:
from telegram import *
from telegram.ext import *
from dotenv import load_dotenv
from responses import *
load_dotenv()
def main():
updater=Updater(os.getenv("BOT_TOKEN"), use_context=True)
dp=updater.dispatcher
dp.add_handler(MessageHandler(Filters.regex('^(hello|hi)$'), hello))
dp.add_handler(MessageHandler(Filters.regex('^(who are you)$'), whoareyou))
dp.add_error_handler(error)
updater.start_polling()
updater.idle()
main()
并在responses.py
中定义函数:
def hello(update: Update, context: CallbackContext) -> None:
try:
username = update.message.chat.username
except:
username = update.message.chat.first_name
update.message.reply_text(f'Hey! @{username} How it going?')
def whoareyou(update: Update, context: CallbackContext) -> None:
update.message.reply_text('Hi! I am Buddy Bot. Developed by Soham.')
请注意,并非所有用户都设置了用户名,因此我包含了一个 try-except,如果没有设置用户名,它会使用名字。