__version__ = (1, 6, 0)
# module by:
# █▀ █▄▀ █ █░░ █░░ ▀█
# ▄█ █░█ █ █▄▄ █▄▄ █▄
# /\_/\
# ( o.o )
# > ^ <
# █▀▄▀█ █▀▀ █▀█ █░█░█
# █░▀░█ ██▄ █▄█ ▀▄▀▄▀
#
# and
#
# @@@@@@ @@@@@@ @@@@@@@ @@@@@@@ @@@@@@ @@@@@@@@@@ @@@@@@ @@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@
# @@@@@@@@ @@@@@@@ @@@@@@@ @@@@@@@@ @@@@@@@@ @@@@@@@@@@@ @@@@@@@@ @@@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@@
# @@! @@@ !@@ @@! @@! @@@ @@! @@@ @@! @@! @@! @@! @@@ @@! @@@ @@! @@@ @@! @@! !@@
# !@! @!@ !@! !@! !@! @!@ !@! @!@ !@! !@! !@! !@! @!@ !@! @!@ !@! @!@ !@! !@! !@!
# @!@!@!@! !!@@!! @!! @!@!!@! @!@ !@! @!! !!@ @!@ @!@ !@! @!@ !@! @!@ !@! @!! @!!!:! !!@@!!
# !!!@!!!! !!@!!! !!! !!@!@! !@! !!! !@! ! !@! !@! !!! !@! !!! !@! !!! !!! !!!!!: !!@!!!
# !!: !!! !:! !!: !!: :!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!! !!: !!: !:!
# :!: !:! !:! :!: :!: !:! :!: !:! :!: :!: :!: !:! :!: !:! :!: !:! :!: :!: !:!
# :: ::: :::: :: :: :: ::: ::::: :: ::: :: ::::: :: :::: :: ::::: :: :: :::: :: :::: :::: ::
# : : : :: : : : : : : : : : : : : : : :: : : : : : : :: : : : :: :: :: : :
#
# © Copyright 2024
#
# https://t.me/Den4ikSuperOstryyPer4ik
# and
# https://t.me/ToXicUse
#
# 🔒 Licensed under the GNU AGPLv3
# https://www.gnu.org/licenses/agpl-3.0.html
#
# meta developer: @AstroModules
# meta banner: https://raw.githubusercontent.com/Den4ikSuperOstryyPer4ik/Astro-modules/main/Banners/RandomUser.jpg
import logging
import random as r
import grapheme
from telethon.errors import (
BotGroupsBlockedError,
ChannelPrivateError,
ChatAdminRequiredError,
ChatWriteForbiddenError,
InputUserDeactivatedError,
UserAdminInvalidError,
UserAlreadyParticipantError,
UserBlockedError,
UserKickedError,
UserNotMutualContactError,
UserPrivacyRestrictedError,
YouBlockedUserError,
)
from telethon.tl.functions.channels import (
EditAdminRequest,
EditBannedRequest,
InviteToChannelRequest,
)
from telethon.tl.functions.messages import AddChatUserRequest
from telethon.tl.types import ChatAdminRights, ChatBannedRights, Message
from .. import loader
from ..inline.types import InlineCall
logger = logging.getLogger(__name__)
UNMUTE_RIGHTS = ChatBannedRights(
until_date=None,
view_messages=None,
send_messages=False,
send_media=False,
send_stickers=False,
send_gifs=False,
send_games=False,
send_inline=False,
embed_links=False,
)
class RandomUserMod(loader.Module):
'''choose a random user in chat\nAutors: @AstroModules & @smeowcodes'''
emoji_list = list(grapheme.graphemes("🤩🥳🤪😜😝😋😘🤯🤠😈🎃😺👀🙊🙈🙉🐵🐸🐣🌝🌚🌜🌛🌙✨⚡️🌟⭐️💫💥☄️❄️☀️🌪🔥☃️☁️💨💧💦🌊🍓🍉🍋🍊🍐🍎🍌🍇🫐🍈🍒🍑🥭🍍🥝"))
strings = {
"name": "RandomUser",
"astro-modules-btn": "🌌 𝑨𝒔𝒕𝒓𝒐 𝑴𝒐𝒅𝒖𝒍𝒆𝒔 ✨",
"meow-modules-btn": "Meow Modules😽",
"inline-text": "👥 Click on the button to select a random user in the chat!",
"rand-user-btn": "🤩 Choose",
"rand-user-2-btn": "🤯 Choose again",
"user": "{} The choice fell on {}!\n{}",
"user-...": "{} The choice fell on {}!\n{}\n\n{}",
"id": "🆔 ID: {}",
"id+username": "{} Username: @{}\n🆔 ID: {}",
"give-adm-btn": "🎩 Give Admin",
"text-adm": "🎩 Was assigned to the administrator\n👨🏻💻 Prefix(rank): «{}»",
"mute-btn": "🤫 Mute",
"unmute-btn": "😊 UnMute",
"ban-btn": "👔 Ban",
"unban-btn": "😊 UnBan",
"kick-btn": "👞 Kick",
"invite-btn": "➕ Add back",
"prefix-1": "Cool person :)",
"prefix-2": "Lucky",
"prefix-3": " ",
"prefix-4": "King of Random",
"prefix-5": "GAY",
"not_admin": "I`m not an admin here.",
"no_rights": "I don`t have rights.",
"user-invited": "🚹 The user has been invited successfully!",
"user-kicked": "👞 Was kicked out",
"user-unmuted": "😊 The user unmuted",
"user-muted": "🤫 Muted",
"user-banned": "👔 Banned",
"user-unbanned": "😊 The user unbanned.",
"invite-error-1": "The user's privacy settings do not allow you to invite him.",
"invite-error-2": "I don't have a permission.",
"invite-error-3": "The user is kicked out of the chat, contact the administrators.",
"invite-error-4": "The bot is blocked in the chat, contact the administrators.",
"invite-error-5": "The user is blocked in the chat, contact the administrators.",
"invite-error-6": "The user's account has been deleted.",
"invite-error-7": "The user is already in the group.",
"invite-error-8": "You have blocked this user.",
}
strings_ru = {
"_cls_doc": "Выбрать случайного пользователя в чате\nАвторы: @AstroModules & @smeowcodes",
"inline-text": "👥 Нажмите на кнопку, чтобы выбрать случайного пользователя в чате:",
"rand-user-btn": "🤩 Выбрать",
"rand-user-2-btn": "🤯 Выбрать ещё раз",
"user": "{} Выбор упал на {}!\n{}",
"user-...": "{} Выбор упал на {}!\n{}\n\n{}",
"id+username": "{} Имя пользователя: @{}\n🆔 ID: {}",
"give-adm-btn": "🎩 Назначить на администратора",
"text-adm": "🎩 Был назначен на администратора\n👨🏻💻 Префикс: «{}»",
"prefix-1": "Крутой :)",
"prefix-2": "Везучий",
"prefix-3": "Удачливый",
"prefix-4": "Король рандома",
"prefix-5": "Лютейший чел",
"mute-btn": "🤫 Заткнуть",
"unmute-btn": "😊 Снять мут",
"ban-btn": "🚫 Забанить",
"unban-btn": "💥 Разбанить",
"kick-btn": "👞 Выгнать",
"invite-btn": "➕ Добавить обратно",
"not_admin": "Я здесь не администратор.",
"no_rights": "🚫 У Вас нет нужных прав",
"user-invited": "🚹 Пользователь был добавлен обратно!",
"user-kicked": "👞 Был выгнан",
"user-unmuted": "🔔 С пользователя был снят мут",
"user-muted": "🤫 Был заткнут",
"user-banned": "👔 Был забанен",
"user-unbanned": "😊 С пользователя был снят бан.",
"invite-error-1": "Настройки приватности пользователя не позволяют пригласить его.",
"invite-error-2": "🚫 У Вас нет нужных прав",
"invite-error-3": "Пользователь кикнут из чата, обратитесь к администраторам.",
"invite-error-4": "Бот заблокирован в чате, обратитесь к администраторам.",
"invite-error-5": "Пользователь заблокирован в чате, обратитесь к администраторам.",
"invite-error-6": "Аккаунт пользователя удалён.",
"invite-error-7": "Пользователь уже в группе.",
"invite-error-8": "Вы заблокировали этого пользователя.",
}
@loader.command(ru_doc="--> выбрать случайного пользователя в чате | inline-меню с призовыми кнопками")
async def irandusercmd(self, message: Message):
"choose a random user in chat | inline menu with prize buttons"
self.users = [p.id async for p in self.client.iter_participants(message.peer_id)]
self.chat = await message.get_chat()
self.chat_id = message.chat_id
self.message = message
await self.inline.form(
text=self.strings("inline-text"),
reply_markup=[
[
{
"text": self.strings("rand-user-btn"),
"callback": self.rand_user_inline
}
]
],
message=message
)
async def rand_user_inline(self, call: InlineCall):
rand_user = r.choice(self.users)
self.user = await self.client.get_entity(rand_user)
emoji_list = list(grapheme.graphemes("🤩🥳🤪😜😝😋😘🤯🤠😈🎃😺👀🙊🙈🙉🐵🐸🐣🌝🌚🌜🌛🌙✨⚡️🌟⭐️💫💥☄️❄️☀️🌪🔥☃️☁️💨💧💦🌊🍓🍉🍋🍊🍐🍎🍌🍇🫐🍈🍒🍑🥭🍍🥝"))
emoji = r.choice(emoji_list)
if not self.user.username:
self.link = self.user.first_name
self.id_or_username = self.strings("id").format(self.user.id)
else:
self.link = f"{self.user.first_name}"
emoji_list2 = list(grapheme.graphemes("👤👶👧🧒👦👩🧑👨👩🦱🧑🦱👨🦱👩🦰🧑🦰👨🦰👱♀👱👱♂👩🦳🧑🦳👨🦳👵🧓👴"))
emoji2 = r.choice(emoji_list2)
self.id_or_username = self.strings("id+username").format(emoji2, self.user.username, self.user.id)
await call.edit(
text=self.strings("user").format(emoji, self.link, self.id_or_username),
reply_markup=[
[
{
"text": self.strings("rand-user-2-btn"),
"callback": self.rand_user_inline
}
],
[
{
"text": self.strings("give-adm-btn"),
"callback": self.add_to_admins_user
}
],
[
{
"text": self.strings("ban-btn"),
"callback": self.ban_user
},
{
"text": self.strings("kick-btn"),
"callback": self.kick_user
},
{
"text": self.strings("mute-btn"),
"callback": self.mute_user
}
],
[
{
"text": self.strings("astro-modules-btn"),
"url": "https://t.me/AstroModules"
},
{
"text": self.strings("meow-modules-btn"),
"url": "https://t.me/smeowcodes"
}
]
]
)
async def add_to_admins_user(self, call: InlineCall):
pref1 = self.strings("prefix-1")
pref2 = self.strings("prefix-2")
pref3 = self.strings("prefix-3")
pref4 = self.strings("prefix-4")
pref5 = self.strings("prefix-5")
prefs = [pref1, pref2, pref3, pref4, pref5]
prefix = r.choice(prefs)
text = self.strings("text-adm").format(prefix)
emoji = r.choice(self.emoji_list)
if not self.chat.admin_rights and not self.chat.creator:
return await call.answer(self.strings("not_admin"), show_alert=True)
try:
await self.client(
EditAdminRequest(
self.chat_id,
self.user.id,
ChatAdminRights(
add_admins=False,
change_info=False,
invite_users=self.chat.admin_rights.invite_users,
ban_users=False,
delete_messages=self.chat.admin_rights.delete_messages,
pin_messages=False,
),
prefix,
)
)
except ChatAdminRequiredError:
return await call.answer(self.strings("no_rights"), show_alert=True)
else:
await call.answer(text, show_alert=True)
return await call.edit(
text=self.strings("user-...").format(emoji, self.link, self.id_or_username, text),
reply_markup=[
[
{
"text": self.strings("rand-user-2-btn"),
"callback": self.rand_user_inline
}
]
]
)
async def mute_user(self, call: InlineCall):
text = self.strings("user-muted")
emoji = r.choice(self.emoji_list)
if not self.chat.admin_rights and not self.chat.creator:
return await call.answer(self.strings("not_admin"), show_alert=True)
if not self.chat.admin_rights.ban_users:
return await call.answer(self.strings("no_rights"), show_alert=True)
try:
tm = ChatBannedRights(until_date=True, send_messages=True)
await self.client(EditBannedRequest(
self.chat_id,
self.user.id,
tm
))
await call.answer(text, show_alert=True)
return await call.edit(
text=self.strings("user-...").format(emoji, self.link, self.id_or_username, text),
reply_markup=[
[
{
"text": self.strings("unmute-btn"),
"callback": self.unmute_user
}
],
[
{
"text": self.strings("rand-user-2-btn"),
"callback": self.rand_user_inline
}
]
]
)
except UserAdminInvalidError:
return await call.answer(self.strings("no_rights"), show_alert=True)
async def unmute_user(self, call: InlineCall):
text = self.strings("user-unmuted")
emoji = r.choice(self.emoji_list)
if not self.chat.admin_rights and not self.chat.creator:
return await call.answer(self.strings("no_rights"), show_alert=True)
if not self.chat.admin_rights.ban_users:
return await call.answer(self.strings("no_rights"), show_alert=True)
await self.client(
EditBannedRequest(self.chat_id, self.user.id, UNMUTE_RIGHTS)
)
await call.answer(text, show_alert=True)
await call.edit(
self.strings("user-...").format(emoji, self.link, self.id_or_username, text),
reply_markup=[
[
{
"text": self.strings("rand-user-2-btn"),
"callback": self.rand_user_inline
}
]
]
)
async def ban_user(self, call: InlineCall):
if not self.chat.admin_rights and not self.chat.creator:
return await call.answer(self.strings("not_admin"), show_alert=True)
if not self.chat.admin_rights.ban_users:
return await call.answer(self.strings("no_rights"), show_alert=True)
try:
await self.client(EditBannedRequest(
self.chat_id,
self.user.id,
ChatBannedRights(until_date=None, view_messages=True)
))
text = self.strings("user-banned")
emoji = r.choice(self.emoji_list)
await call.answer(text, show_alert=True)
await call.edit(
self.strings("user-...").format(emoji, self.link, self.id_or_username, text),
reply_markup=[
[
{
"text": self.strings("unban-btn"),
"callback": self.unban_user
}
],
[
{
"text": self.strings("rand-user-2-btn"),
"callback": self.rand_user_inline
}
]
]
)
except UserAdminInvalidError:
return await call.answer(self.strings("no_rights"), show_alert=True)
async def unban_user(self, call: InlineCall):
text = self.strings("user-unbanned")
emoji = r.choice(self.emoji_list)
if not self.chat.admin_rights and not self.chat.creator:
return await call.answer(self.strings("no_rights"), show_alert=True)
if not self.chat.admin_rights.ban_users:
return await call.answer(self.strings("no_rights"), show_alert=True)
await self.client(
EditBannedRequest(
self.chat_id,
self.user.id,
ChatBannedRights(until_date=None, view_messages=False),
)
)
await call.answer(text, show_alert=True)
await call.edit(
self.strings("user-...").format(emoji, self.link, self.id_or_username, text),
reply_markup=[
[
{
"text": self.strings("rand-user-2-btn"),
"callback": self.rand_user_inline
}
]
]
)
async def kick_user(self, call: InlineCall):
text = self.strings("user-kicked")
emoji = r.choice(self.emoji_list)
if not self.chat.admin_rights and not self.chat.creator:
return await call.answer(self.strings("no_rights"), show_alert=True)
if not self.chat.admin_rights.ban_users:
return await call.answer(self.strings("no_rights"), show_alert=True)
try:
await self.client.kick_participant(self.chat_id, self.user.id)
except UserAdminInvalidError:
return await call.answer(self.strings("no_rights"), show_alert=True)
await call.answer(text, show_alert=True)
return await call.edit(
self.strings("user-...").format(emoji, self.link, self.id_or_username, text),
reply_markup=[
[
{
"text": self.strings("invite-btn"),
"callback": self.invite_user
}
],
[
{
"text": self.strings("rand-user-2-btn"),
"callback": self.rand_user_inline
}
]
]
)
async def invite_user(self, call: InlineCall):
emoji = r.choice(self.emoji_list)
try:
if not self.message.is_channel and self.message.is_group:
await self.client(
AddChatUserRequest(
chat_id=self.chat_id, user_id=self.user.id, fwd_limit=1000000
)
)
else:
await self.client(
InviteToChannelRequest(channel=self.chat_id, users=[self.user.id])
)
await call.answer(self.strings("user-invited"), show_alert=True)
text = self.strings("user-invited")
return await call.edit(
text=self.strings("user-...").format(emoji, self.link, self.id_or_username, text),
reply_markup=[
[
{
"text": self.strings("rand-user-2-btn"),
"callback": self.rand_user_inline
}
]
]
)
except UserPrivacyRestrictedError:
m = self.strings("invite-error-1")
except UserNotMutualContactError:
m = self.strings("invite-error-1")
except ChatAdminRequiredError:
m = self.strings("invite-error-2")
except ChatWriteForbiddenError:
m = self.strings("invite-error-2")
except ChannelPrivateError:
m = self.strings("invite-error-2")
except UserKickedError:
m = self.strings("invite-error-3")
except BotGroupsBlockedError:
m = self.strings("invite-error-4")
except UserBlockedError:
m = self.strings("invite-error-5")
except InputUserDeactivatedError:
m = self.strings("invite-error-6")
except UserAlreadyParticipantError:
m = self.strings("invite-error-7")
except YouBlockedUserError:
m = "Вы заблокировали этого пользователя."
await call.answer(m, show_alert=True)