Эта страница содержит информацию о том, как делать модули для Daemon RE. Это очень просто, но вам необходимо следовать следующим правилам:
Давайте начнем.
Давайте напишем простейший модуль, который будет выводить текст Lorem Ipsum в ответ на команду /lipsum.
# daemon_re/modules/lipsum.py
# Locals
lorem_ipsum_text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
@bot.on.message(command='lipsum')
async def lorem_ipsum(message: Message):
await message.reply(lorem_ipsum_text)
Давайте запустим нашего Daemon RE.
██████ █████ ███████ ███ ███ █████ ███ ██
██ ██ ██ ██ ██ ████ ████ ██ ██ ████ ██
██ ██ ███████ █████ ██ ████ ██ ██ ██ ██ ██ ██
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████
██████ ██ ██ ███████ ██ ██ █████ ██ ███ 100.0.2.1 Alberto OFFICIAL STABLE by nekondrashov (thanks to others)
17:32:53.835 | INFO | __main__::30 - Initialization...
2022-07-11 17:32:53.835 | INFO | __main__::36 - Loading files and directories...
2022-07-11 17:32:53.837 | INFO | __main__::59 - Starting module "lipsum.py"...
17:32:53.837 | INFO | __main__::62 - One moment...
2022-07-11 17:32:53.844 | SUCCESS | __main__::71 - Ready!
Updates were skipped successfully.
await addtobd(message.peer_id) # добавить пользователя в дб (рекомендуется использовать этот метод в каждой команде в которой есть взаимодействие с SQL)await check_bl_wl(message) # разрешить использование бота, если пользователь находится в белом списке или если пользователь не находится в черном списке.await update_stats(message) # обновить статистику пользователя и чата.await check(message, id=message.from_id): # проверить разрешение на изменение информации о чате.await check_admin_list(message) # проверить, есть ли пользователь в списке администраторов бота.
Итак, мы хотим, чтобы бот проверял, есть ли пользователь в белом или черном списке, и обновлял его статистику. Давайте добавим код в модуль.
# daemon_re/modules/lipsum.py
# Locals
lorem_ipsum_text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
@bot.on.message(command='lipsum')
async def lorem_ipsum(message: Message):
if await check_bl_wl(message) != False:
await message.reply(lorem_ipsum_text)
await update_stats(message)
Опять запускаем бота.
Теперь давайте напишем модуль для удаления базы чата в боте.
# daemon_re/modules/reset.py
# Locals
yes_text = 'Да'
no_text = 'Нет'
successfully_wipe = '🧹 Вы успешно вайпнули беседу.'
wipe_check_msg = 'Вы уверены что хотите выполнить сброс всей бд этого чата? Это действие НЕЛЬЗЯ отменить'
cancel_msg = 'Успешно отменено'
# Config
wipe_buttons = Keyboard(inline=True)
wipe_buttons.add(Text(no_text, {"cmd": "no"}), color=KeyboardButtonColor.POSITIVE)
wipe_buttons.add(Text(yes_text, {"cmd": "yes"}), color=KeyboardButtonColor.NEGATIVE)
wipe_buttons = wipe_buttons.get_json()
@bot.on.chat_message(command='wipe')
async def wipe(message: Message):
await addtobd(message.peer_id)
if await check_bl_wl(message) != False:
if not await check(message, id=message.from_id):
await message.reply(noadmin)
else:
await message.reply(wipe_check_msg, keyboard=wipe_buttons)
await update_stats(message)
@bot.on.message(payload={"cmd": "no"})
async def no_reply(message: Message):
if await check(message, id=message.from_id):
await message.reply(cancel_msg)
await update_stats(message)
else:
await message.reply(noadmin)
@bot.on.message(payload={"cmd": "yes"})
async def yes_action(message: Message):
if await check(message, id=message.from_id):
q.execute(f"SELECT * FROM players WHERE id = {message.peer_id}")
result = q.fetchall()
kolvo = result[0][2]
q.execute(f"UPDATE players SET kolvo = '0' WHERE id = '{message.peer_id}'")
connection.commit()
f = open(f'{dir_to_txt}{message.peer_id}.txt', 'w', encoding='utf8')
f.write('')
f.close()
f = open(f'{dir_to_pic}{message.peer_id}.txt', 'w', encoding='utf8')
f.write('')
f.close()
await message.reply(successfully_wipe)
await update_stats(message)
else:
await message.reply(noadmin)
Теперь разберемся с функцией проверки пользователя на админку бота. Напишем модуль для остановки бота командой /stop.
# daemon_re/modules/stop.py
@bot.on.message(command='stop')
async def stop_bot(message: Message):
if await check_admin_list(message):
await message.reply('Остановка бота...')
exit('Бот остановлен админом')
SystemExit: Bot stopped by admin.
Теперь вы знайте как написать свой модуль для Daemon RE