¡Hola a todos! Seguro que has visto en varios bots un enlace de referencia como https://t.me/ <username_bot>? Start = <number>. Por lo general, el ID de Telegram del remitente se indica como un número. En este artículo, explicaré cómo manejar dichos enlaces en mi bot.
Para desarrollar bots, utilizo la biblioteca Python pytelegrambotapi.
Omitiré el proceso de creación de un bot a través de @BotFather , procederé directamente al código. Hay un archivo config.py
con la variable TOKEN, que almacena el token del bot. bot.py
"Químicaremos" el archivo . Escribamos un controlador para el comando / start y visualicemos todo lo que está almacenado en el objeto de mensaje.
import telebot
import config
bot = telebot.TeleBot(config.TOKEN)
@bot.message_handler(commands=["start"])
def start_command_handler(msg):
print(msg)
if __name__ == '__main__':
bot.polling(none_stop=True)
'text': '/start'.
https://t.me/<_>?start=test 10- print(msg.text)
/start test
. , msg.text
, .
. , /start , /start
. ( /start test
). ID .
@bot.message_handler(commands=["start"])
def start_command_handler(msg):
user_id = msg.from_user.id
referrer = None
if " " in msg.text:
referrer_candidate = msg.text.split()[1]
#
https://t.me/<_>?start=test test2, test2 msg.text, , , test2 . msg.text
. , . (msg.text.split()
), ( , , ?).
, . , , . - "" , ID - . .
@bot.message_handler(commands=["start"])
def start_command_handler(msg):
user_id = msg.from_user.id
referrer = None
# -
if " " in msg.text:
referrer_candidate = msg.text.split()[1]
#
try:
referrer_candidate = int(referrer_candidate)
#
except ValueError:
pass
, try... except
int()
. referer
, int()
ValueError
referer . : int()
"-101" -101. referer . , .
TG ID. , . . ID , user_id = msg.from_user.id
@bot.message_handler(commands=["start"])
def start_command_handler(msg):
user_id = msg.from_user.id
referrer = None
# -
if " " in msg.text:
referrer_candidate = msg.text.split()[1]
#
try:
referrer_candidate = int(referrer_candidate)
# TG ID TG ID
if user_id != referrer_candidate:
#
pass
except ValueError:
pass
, get_all_users(), . , , .
@bot.message_handler(commands=["start"])
def start_command_handler(msg):
user_id = msg.from_user.id
referrer = None
# -
if " " in msg.text:
referrer_candidate = msg.text.split()[1]
#
try:
referrer_candidate = int(referrer_candidate)
# TG ID TG ID
# ,
if user_id != referrer_candidate and referrer_candidate in get_all_users():
referer = referrer_candidate
except ValueError:
pass
¿Qué se debe hacer si el usuario ya tiene un referente? Después de todo, no daremos una bonificación por la referencia referida cada vez que use un enlace de referencia, simplemente nos arruinará. Por lo tanto, es necesario emitir un cheque. Escribamos una función has_referrer()
que devolverá True si el usuario tiene una referencia y False si no la tiene. Es lógico escribirlo al principio para optimizarlo.
@bot.message_handler(commands=["start"])
def start_command_handler(msg):
user_id = msg.from_user.id
#
if not has_referrer():
referrer = None
# -
if " " in msg.text:
referrer_candidate = msg.text.split()[1]
#
try:
referrer_candidate = int(referrer_candidate)
# TG ID TG ID
# ,
if user_id != referrer_candidate and referrer_candidate in get_all_users():
referer = referrer_candidate
except ValueError:
pass
¡Espero que este artículo le resulte útil!