get_chat_member
не выкинет исключение. Это справедливо для покинувших канал (были кикнуты или вышли сами). Так что нужно еще проверить статус на этот случай. По сути, нужных нам только два - left и kicked. Все статусы и типы описаны тут - https://core.telegram.org/bots/api#chatmemberdef is_subscribed(chat_id, user_id):
try:
user = bot.get_chat_member(chat_id, user_id)
if user.status in ('left', 'kicked'):
return False
return True
except ApiTelegramException as e:
if e.result_json['description'] == 'Bad Request: user not found':
return False
from multiprocessing import freeze_support
if __name__ == "__main__":
freeze_support()
try:
Process(target=start_tg_observer).start()
Process(target=start_fb_observer).start()
except Exception as e:
pass
bot = telebot.TeleBot(token, skip_pending=True, threaded=False)
secret = '' #набор символов какой нибудь
username = '' # имя пользователя
bot.remove_webhook()
time.sleep(1)
bot.set_webhook(url='https://{}.pythonanywhere.com/{}'.format(username, secret))
app = Flask(__name__)
@app.route('/{}'.format(secret), methods=["POST"])
def webhook():
bot.process_new_updates([telebot.types.Update.de_json(request.stream.read().decode("utf-8"))])
return 'ok', 200
bot.polling
, конечно же multipart/form-data
, как на втором скриншоте, то передавать нужно так:files = {'action': (None, 'steam_openid_login'), 'openid.more': (None, 'checkid_setup')} # ну и так далее
requests.post(url, files=files)
application/x-www-form-urlencoded
, тоdata = {'action': 'steam_openid_login', 'openid.more': 'checkid_setup'} # ну и так далее
requests.post(url, data=data)
switch_inline_query
.@dp.message_handler()
async def echo(msg: types.Message):
if msg.is_forward():
await msg.delete()
Хотя этот (//html/body/div[99]/span) xpath путь точно существует
html/body/div[99]/span
html/body
div
g-c-Hf
, есть элементы с таким классом.https://discord.com/api/users/@me/guilds
client = discord.Client()
# ...
client.run(token, bot=False)