fix bugs
parent
6d73157bb5
commit
3a9ee2c593
File diff suppressed because one or more lines are too long
|
@ -41,8 +41,12 @@ class BotConfig:
|
|||
self.channelList.append(MumbleChannel(row['path'], row['message']))
|
||||
_logger.info("Файл с настройками каналов загружен")
|
||||
|
||||
|
||||
|
||||
def load_welcome_message(self) -> str:
|
||||
_logger.info("Загрузка файла с приветствием ...")
|
||||
f = open('welcome.csv', 'r', encoding='utf-8')
|
||||
message = f.read()
|
||||
f.close()
|
||||
return message
|
||||
|
||||
|
||||
# bot = BotConfig()
|
||||
|
|
|
@ -7,6 +7,7 @@ from pymumble_py3 import Mumble
|
|||
from src.config.BotConfig import BotConfig
|
||||
from pymumble_py3.callbacks import PYMUMBLE_CLBK_TEXTMESSAGERECEIVED as PCTMR
|
||||
from pymumble_py3.callbacks import PYMUMBLE_CLBK_USERUPDATED as PCUU
|
||||
from pymumble_py3.callbacks import PYMUMBLE_CLBK_USERCREATED as PCUC
|
||||
|
||||
from src.service.ChannelService import ChannelService
|
||||
from src.service.MumbleBotService import MumbleBotService
|
||||
|
@ -32,16 +33,17 @@ class MumbleBot:
|
|||
port=int(config['Server']['port']), password=config['Server']['password'],
|
||||
certfile=config['Bot']['certfile'], reconnect=True, tokens=config['Server']['tokens'])
|
||||
|
||||
self.bot.callbacks.set_callback(PCTMR, self.message_received)
|
||||
self.bot.callbacks.set_callback(PCUU, self.user_change_channel)
|
||||
# self.bot.callbacks.set_callback(PCUC, self.user_connect_server)
|
||||
|
||||
self.mumbleBotService = MumbleBotService(self)
|
||||
self.channelService = ChannelService(self)
|
||||
|
||||
self.bot.start() # start the mumble thread
|
||||
self.bot.is_ready() # wait for the connection
|
||||
self.channelService.init_channels()
|
||||
|
||||
self.bot.callbacks.set_callback(PCTMR, self.message_received)
|
||||
self.bot.callbacks.set_callback(PCUU, self.user_change_channel)
|
||||
self.bot.callbacks.set_callback(PCUC, self.user_connect_server)
|
||||
|
||||
if self.bot.connected >= pymumble_py3.constants.PYMUMBLE_CONN_STATE_FAILED:
|
||||
exit()
|
||||
|
||||
|
@ -51,6 +53,9 @@ class MumbleBot:
|
|||
def user_change_channel(self, user, action):
|
||||
self.mumbleBotService.user_change_channel(user, action)
|
||||
|
||||
def user_connect_server(self, action):
|
||||
self.mumbleBotService.user_connect_server(action)
|
||||
|
||||
def loop(self):
|
||||
while not self.exit and self.bot.is_alive():
|
||||
while self.thread and self.bot.sound_output.get_buffer_size() > 0.5 and not self.exit:
|
||||
|
|
|
@ -48,3 +48,9 @@ class ChannelService:
|
|||
if channel.name == name:
|
||||
return channel.message
|
||||
return ''
|
||||
|
||||
def get_welcome_message(self) -> str:
|
||||
try:
|
||||
return self.bot_data.config.load_welcome_message()
|
||||
except IndexError:
|
||||
return ""
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
import logging
|
||||
from concurrent.futures import ThreadPoolExecutor, TimeoutError as FutureTimeoutError
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from typing import Optional
|
||||
|
||||
from pymumble_py3.users import User, Users
|
||||
|
@ -21,8 +23,8 @@ class MumbleBotService:
|
|||
actor_id = message_info.actor
|
||||
if actor_id == 0:
|
||||
return
|
||||
user_id = self.get_user_id_by_actor_id(actor_id)
|
||||
username = self.get_username_by_id(user_id)
|
||||
session = self.get_session_by_actor_id(actor_id)
|
||||
username = self.get_username_by_session(session)
|
||||
is_admin = self.is_admin(username)
|
||||
message = message_info.message.strip()
|
||||
|
||||
|
@ -36,35 +38,48 @@ class MumbleBotService:
|
|||
if is_admin:
|
||||
for x in self.bot_data.config.config['Command admin']:
|
||||
message = message + '<p>' + self.bot_data.config.config['Command admin'][x] + '</p>'
|
||||
self.get_user_by_id(user_id).send_text_message(message)
|
||||
self.get_user_by_session(session).send_text_message(message)
|
||||
case '!users':
|
||||
if is_admin:
|
||||
message = '<p>Список пользователей:</p>'
|
||||
users = self.bot_data.get_userlist()
|
||||
for user in users:
|
||||
message = message + '<p>' + user['name'] + '</p>'
|
||||
self.get_user_by_id(user_id).send_text_message(message)
|
||||
self.get_user_by_session(session).send_text_message(message)
|
||||
case '!initchannels':
|
||||
self.channel_service.init_channels()
|
||||
message = 'Каналы обновлены'
|
||||
self.get_user_by_id(user_id).send_text_message(message)
|
||||
if is_admin:
|
||||
self.channel_service.init_channels()
|
||||
message = 'Каналы обновлены'
|
||||
self.get_user_by_session(session).send_text_message(message)
|
||||
case 'test':
|
||||
self.test(self.bot_data.bot, message_info)
|
||||
self.test()
|
||||
case _:
|
||||
self.get_user_by_id(user_id).send_text_message(message)
|
||||
self.get_user_by_session(session).send_text_message(message)
|
||||
|
||||
# TODO: одинаковые каналы (коллизия сообщений)
|
||||
def user_change_channel(self, user: User, action):
|
||||
_logger.info(f"{user['name']} перешёл в канал: {self.bot_data.bot.channels[action['channel_id']]['name']}")
|
||||
|
||||
message = self.channel_service.get_message_by_channel_id(action['channel_id'])
|
||||
if len(message) > 0:
|
||||
self.get_user_by_id(user['user_id']).send_text_message(message)
|
||||
self.get_user_by_session(user['session']).send_text_message(message)
|
||||
|
||||
def get_user_id_by_actor_id(self, actor_id: int) -> Optional[int]:
|
||||
def user_connect_server(self, action):
|
||||
user = self.get_user_by_session(action['session'])
|
||||
|
||||
if user['name'] == self.bot_data.bot.user:
|
||||
return
|
||||
|
||||
_logger.info(f"{user['name']} зашёл на сервер")
|
||||
|
||||
message = self.channel_service.get_welcome_message()
|
||||
if len(message) > 0:
|
||||
self.get_user_by_session(action['session']).send_text_message(message)
|
||||
_logger.debug(f"{user['name']} ")
|
||||
|
||||
def get_session_by_actor_id(self, actor_id: int) -> Optional[int]:
|
||||
user = self.get_user_by_actor_id(actor_id)
|
||||
if user is not None:
|
||||
return user['user_id']
|
||||
return user['session']
|
||||
else:
|
||||
return None
|
||||
|
||||
|
@ -78,24 +93,34 @@ class MumbleBotService:
|
|||
_logger.warning(f"Не удалось найти пользователя с actorId: {actor_id}")
|
||||
return None
|
||||
|
||||
def get_username_by_id(self, user_id: int) -> Optional[str]:
|
||||
def get_username_by_session(self, session: int) -> Optional[str]:
|
||||
try:
|
||||
return self.get_user_by_id(user_id)['name']
|
||||
return self.get_user_by_session(session)['name']
|
||||
except KeyError:
|
||||
_logger.warning(f"Не удалось найти пользователя с id: {user_id}")
|
||||
_logger.warning(f"Не удалось найти пользователя с session: {session}")
|
||||
return None
|
||||
|
||||
def get_user_by_id(self, user_id: int) -> Optional[User]:
|
||||
try:
|
||||
users = self.bot_data.bot.users
|
||||
for user in users.values():
|
||||
users = self.bot_data.bot.users
|
||||
for user in users.values():
|
||||
try:
|
||||
if user['user_id'] == user_id:
|
||||
return user
|
||||
_logger.warning(f"Не удалось найти пользователя с id: {user_id}")
|
||||
return None
|
||||
except KeyError:
|
||||
_logger.warning(f"Не удалось найти пользователя с id: {user_id}")
|
||||
return None
|
||||
except KeyError:
|
||||
continue
|
||||
_logger.warning(f"Не удалось найти пользователя с id: {user_id}")
|
||||
return None
|
||||
|
||||
def get_user_by_session(self, session: int) -> Optional[User]:
|
||||
users = self.bot_data.bot.users
|
||||
for user in users.values():
|
||||
try:
|
||||
if user['session'] == session:
|
||||
return user
|
||||
except KeyError:
|
||||
continue
|
||||
_logger.warning(f"Не удалось найти пользователя с session: {session}")
|
||||
return None
|
||||
|
||||
def get_user_by_name(self, user_name: str) -> Optional[User]:
|
||||
users = self.bot_data.bot.users
|
||||
|
@ -133,3 +158,4 @@ class MumbleBotService:
|
|||
|
||||
def test(self):
|
||||
self.channel_service.get_tree()
|
||||
|
||||
|
|
10
src/start.py
10
src/start.py
|
@ -23,11 +23,11 @@ coloredlogs.install(level='DEBUG', level_styles=level_styles, field_styles=field
|
|||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
_logger.debug("Это сообщение DEBUG уровня")
|
||||
_logger.info("Это сообщение INFO уровня")
|
||||
_logger.warning("Это сообщение WARNING уровня")
|
||||
_logger.error("Это сообщение ERROR уровня")
|
||||
_logger.critical("Это сообщение CRITICAL уровня")
|
||||
# _logger.debug("Это сообщение DEBUG уровня")
|
||||
# _logger.info("Это сообщение INFO уровня")
|
||||
# _logger.warning("Это сообщение WARNING уровня")
|
||||
# _logger.error("Это сообщение ERROR уровня")
|
||||
# _logger.critical("Это сообщение CRITICAL уровня")
|
||||
|
||||
bot = MumbleBot()
|
||||
bot.loop()
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue