Есть Telegram бот со своим функционалом, который работает только в личных сообщениях с ботом. В бота перед запуском его основного функционала добавлено действие, которое проверяет подписку на определенную группу. В личных сообщениях подписка проверяется отлично, но в группах..
Хочу расширить возможности бота и сделать возможность его доступным в частных группах тоже. В частных группах он работает корректно, но не получается добавить проверку подписки на определенную группу.
Необходимо проверять статус подписки владельца частной группы. Владелец группы имеет статус creator в своей, и должен являться участником моей группы.
Код для личных сообщений с ботом (с возможностью проверки подписки):
import cryptoo_parser
from keyboards import sub_verification_menu
from aiogram import Bot, Dispatcher, types
from aiogram.utils import executor
API_TOKEN = 'токен'
bot = Bot(token=API_TOKEN, parse_mode='HTML')
dp = Dispatcher(bot)
def sub_verification(chat_member):
if chat_member["status"] != "left":
return True
else:
return False
@dp.message_handler(commands=["start"])
async def send_welcome(message: types.Message):
if sub_verification(await bot.get_chat_member(chat_id="-1001111111", user_id=message.from_user.id)):
await message.reply(" Hi! I’m here and ready to work! Send me any token address\n")
else:
await message.answer("Чтобы получить доступ к боту, подпишись на канал", reply_markup=sub_verification_menu)
@dp.callback_query_handler(text="sub_check")
async def sub_check(message: types.Message):
await bot.delete_message(message.from_user.id, message.message.message_id)
if sub_verification(await bot.get_chat_member(chat_id="-1001111111", user_id=message.from_user.id)):
await bot.send_message(message.from_user.id, " Hi! I’m here and ready to work! Send me any token address\n")
else:
await bot.send_message(message.from_user.id, "Чтобы получить доступ к боту, подпишись на канал", reply_markup=sub_verification_menu)
@dp.message_handler()
async def echo_message(msg: types.Message):
if sub_verification(await bot.get_chat_member(chat_id="-1002255513223", user_id=msg.from_user.id)):
local_parser = cryptoo_parser.Parser()
coin_address = msg.text
wait_message = await msg.reply(" Looking for matches...", parse_mode='HTML')
coin_info = local_parser.parse_coin(coin_address)
print(coin_info)
if coin_info == "BAD_ADDRESS":
await bot.edit_message_text("♂️ Oops! It seems you entered the wrong token address...\nCheck and try again!",
msg.from_user.id, message_id=wait_message.message_id, parse_mode='HTML',
disable_web_page_preview=True)
elif coin_info == "BAD_PASR":
await bot.edit_message_text("☹️ Oops! Looks like something went wrong...\nTry again!",
msg.from_user.id, message_id=wait_message.message_id, parse_mode='HTML',
disable_web_page_preview=True)
else:
target_coin_cap_round = f'{round(coin_info["target_coin_info"]["target_coin_cap"], 2):,}'
target_length = len(target_coin_cap_round)
post_head = f"""✍<b>Token name</b> – {coin_info["target_coin_info"]["target_coin_name"]} ({coin_info["target_coin_info"]["target_coin_symbol"]})
<b>Market Cap</b> – ${target_coin_cap_round}
<b>Holders</b> – {coin_info["target_coin_info"]["target_coin_holders"]}\n\n"""
all_post = post_head
for holder in coin_info["holders_info"]:
all_post += f"""<b><a href="{coin_info["holders_info"][holder]["holder_link"]}">{holder}</a> | {coin_info["holders_info"][holder]["holder_cap_percent"]}%</b>\n"""
all_post += f"""{coin_info["target_coin_info"]["target_coin_name"]} (${round(coin_info["holders_info"][holder]["target_coin"]["target_coin_value"], 2)}k)"""
# all_post += f"""{coin_info["target_coin_info"]["target_coin_name"]} (${"{:.{}f}".format(coin_info["holders_info"][holder]["target_coin"]["target_coin_value"], target_length - len(str(int(coin_info["holders_info"][holder]["target_coin"]["target_coin_value"]))) - 1)}k)"""
if coin_info["holders_info"][holder]["else_coins"]:
all_post += ";"
for else_coin in coin_info["holders_info"][holder]["else_coins"]:
all_post += f""" {else_coin} (${round(coin_info["holders_info"][holder]["else_coins"][else_coin], 2)}k);"""
# all_post += f""" {else_coin} (${"{:.{}f}".format(coin_info["holders_info"][holder]["else_coins"][else_coin], target_length - len(str(int(coin_info["holders_info"][holder]["else_coins"][else_coin]))) - 1)}k);"""
if all_post[-1] == ";":
all_post = all_post[:-1]
all_post += ".\n\n"
print(all_post)
await bot.edit_message_text(all_post, msg.from_user.id, message_id=wait_message.message_id, parse_mode='HTML',
disable_web_page_preview=True)
def round_coin_values(data):
target_value = round(data['holders_info']['Holder 1']['target_coin']['target_coin_value'], 2)
data['holders_info']['Holder 1']['target_coin']['target_coin_value'] = target_value
target_length = len(str(target_value))
for coin_name, coin_value in data['holders_info']['Holder 1']['else_coins'].items():
formatted_value = "{:.{}f}".format(coin_value, target_length - len(str(int(coin_value))) - 1)
data['holders_info']['Holder 1']['else_coins'][coin_name] = float(formatted_value)
return data
else:
await msg.answer("Чтобы получить доступ к боту, подпишись на канал", reply_markup=sub_verification_menu)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Код для групп такой же, только без проверки подписки и работает по команде /ghg