diff --git a/libcockatrice_protocol/libcockatrice/protocol/pb/CMakeLists.txt b/libcockatrice_protocol/libcockatrice/protocol/pb/CMakeLists.txt index 4e4f0e190..bd0b5bda2 100644 --- a/libcockatrice_protocol/libcockatrice/protocol/pb/CMakeLists.txt +++ b/libcockatrice_protocol/libcockatrice/protocol/pb/CMakeLists.txt @@ -117,6 +117,7 @@ set(PROTO_FILES event_reveal_cards.proto event_reverse_turn.proto event_roll_die.proto + event_room_channel_say.proto event_room_say.proto event_server_complete_list.proto event_server_identification.proto @@ -201,6 +202,7 @@ set(PROTO_FILES serverinfo_replay_match.proto serverinfo_report.proto serverinfo_room.proto + serverinfo_room_channel.proto serverinfo_user.proto serverinfo_user_alt.proto serverinfo_user_session.proto diff --git a/libcockatrice_protocol/libcockatrice/protocol/pb/event_room_channel_say.proto b/libcockatrice_protocol/libcockatrice/protocol/pb/event_room_channel_say.proto new file mode 100644 index 000000000..c8de1a799 --- /dev/null +++ b/libcockatrice_protocol/libcockatrice/protocol/pb/event_room_channel_say.proto @@ -0,0 +1,12 @@ +syntax = "proto2"; +import "room_event.proto"; + +message Event_RoomChannelSay { + extend RoomEvent { + optional Event_RoomChannelSay ext = 1005; // next free RoomEvent extension + } + optional string channel_id = 1; + optional string name = 2; + optional string message = 3; + optional uint64 time_of = 4; +} diff --git a/libcockatrice_protocol/libcockatrice/protocol/pb/room_event.proto b/libcockatrice_protocol/libcockatrice/protocol/pb/room_event.proto index 9fa70e7e1..ec6c4f636 100644 --- a/libcockatrice_protocol/libcockatrice/protocol/pb/room_event.proto +++ b/libcockatrice_protocol/libcockatrice/protocol/pb/room_event.proto @@ -6,6 +6,7 @@ message RoomEvent { ROOM_SAY = 1002; LIST_GAMES = 1003; REMOVE_MESSAGES = 1004; + ROOM_CHANNEL_SAY = 1005; } optional sint32 room_id = 1; extensions 100 to max; diff --git a/libcockatrice_protocol/libcockatrice/protocol/pb/serverinfo_chat_message.proto b/libcockatrice_protocol/libcockatrice/protocol/pb/serverinfo_chat_message.proto index d47ec4fc7..b6d35a32d 100644 --- a/libcockatrice_protocol/libcockatrice/protocol/pb/serverinfo_chat_message.proto +++ b/libcockatrice_protocol/libcockatrice/protocol/pb/serverinfo_chat_message.proto @@ -13,4 +13,5 @@ message ServerInfo_ChatMessage { optional string target_type = 6; // target type (room,game,chat) optional string target_id = 7; // id of target optional string target_name = 8; // name of target + optional string channel = 9; // channel id, for room_channel targets } diff --git a/libcockatrice_protocol/libcockatrice/protocol/pb/serverinfo_room.proto b/libcockatrice_protocol/libcockatrice/protocol/pb/serverinfo_room.proto index c1c2e363b..8e99de48f 100644 --- a/libcockatrice_protocol/libcockatrice/protocol/pb/serverinfo_room.proto +++ b/libcockatrice_protocol/libcockatrice/protocol/pb/serverinfo_room.proto @@ -2,6 +2,7 @@ syntax = "proto2"; import "serverinfo_game.proto"; import "serverinfo_user.proto"; import "serverinfo_gametype.proto"; +import "serverinfo_room_channel.proto"; message ServerInfo_Room { optional sint32 room_id = 1; @@ -15,4 +16,5 @@ message ServerInfo_Room { repeated ServerInfo_GameType gametype_list = 9; optional string permissionlevel = 10; optional string privilegelevel = 11; + repeated ServerInfo_RoomChannel channel_list = 12; } diff --git a/libcockatrice_protocol/libcockatrice/protocol/pb/serverinfo_room_channel.proto b/libcockatrice_protocol/libcockatrice/protocol/pb/serverinfo_room_channel.proto new file mode 100644 index 000000000..d38b1f651 --- /dev/null +++ b/libcockatrice_protocol/libcockatrice/protocol/pb/serverinfo_room_channel.proto @@ -0,0 +1,23 @@ +syntax = "proto2"; + +message ServerInfo_RoomChannel { + enum AccessLevel { + // Minimum privilege level, evaluated against the privilege ladder + // Public < Registered < Judge < Moderator < Admin < Developer. + Public = 0; + Registered = 1; + Judge = 2; + Moderator = 3; + Admin = 4; + Developer = 5; + } + optional string id = 1; // stable ASCII id, e.g. "deck-discussion" + optional string display_name = 2; // server-provided, localizable only server-side + optional AccessLevel access_level = 3 [default = Public]; // minimum privilege level required to read the channel + // Minimum privilege level required to write to the channel. When unset, writing requires the same level as + // reading. This allows read-mostly channels such as a developer news feed: readable by everyone, writable + // only by developers. + optional AccessLevel write_access_level = 4; + // Static banner shown at the top of the channel, analogous to the room join message on Main. Empty = none. + optional string banner_message = 5; +}