programatically controlling MUCs

I have ejabberd 1.1.8 installed with the ejabberd_xmlrpc, mod_admin_extra, and mod_muc_admin modules installed.

I'd like to be able to create several MUCs and allow all users, and only those users (and maybe the admin, if possible), in a shared roster group participate in their respective MUC. So, every shared roster would have ~8 users in it, they should all have access to the one MUC created specifically for them, and the existence of the MUC should not be public (so that they aren't displayed for all users in some clients when doing a service discovery type of thing).

Can anyone provide some guidance on how to do this using ejabberdctl commands (which I'll ultimately be using ejabberd_xmlrpc to do)?

I know I can create/destroy rooms with "ejabberdctl create_room" and ejabberdctl destroy_room", but I'm not clear on how to add the members of the room (I don't want to have to have the members of the room join themselves, if possible), nor how to hide the existence of the room from all other users.

I see that there's an "change_room_option", but I'm not clear on how to get the list of options that can be changed.

I see in the documentation that there is a members_only option, but how do I assign who the members are?

I also see "persistent" and "public" options in the docs, and I'm assuming that I would want to set these to true/false respectively. I'll probably use the "title" option as well to set the name of the room to the game name (which may contain spaces and other UTF8 characters)

Are the "default_room_options" listed in the docs the options used for "change_room_option"? Are there other options that are available?

I'm assuming that I would use change_room_option to set the room options I've listed above. How about designating members of the room?

Thanks for all the support so far, I'm getting really close to finishing up what is needed!

Your questions are all mixed,

Your questions are all mixed, repeated, and it took me several reads to organize your post into something that can be replied. Please be more organized next time.

barhorn wrote:

I have ejabberd 1.1.8 installed with the ejabberd_xmlrpc, mod_admin_extra, and mod_muc_admin modules installed.

I guess you mean 2.1.8.

barhorn wrote:

I'd like to be able to create several MUCs and allow all users, and only those users (and maybe the admin, if possible), in a shared roster group participate in their respective MUC. So, every shared roster would have ~8 users in it, they should all have access to the one MUC created specifically for them, and the existence of the MUC should not be public (so that they aren't displayed for all users in some clients when doing a service discovery type of thing).

Ok, that's the description of your requirements.

barhorn wrote:

I see that there's an "change_room_option", but I'm not clear on how to get the list of options that can be changed.
Are the "default_room_options" listed in the docs the options used for "change_room_option"? Are there other options that are available?

Right, those are the room options that can be changed.

barhorn wrote:

I'm assuming that I would use change_room_option to set the room options I've listed above.

Yes, you can change any option of any room anytime by running ejabberd commands. Another solution is to edit ejabberd.cfg and describe in default_room_options what configuration do you want the new rooms to have.

barhorn wrote:

how to hide the existence of the room from all other users.
I also see "persistent" and "public" options in the docs, and I'm assuming that I would want to set these to true/false respectively. I'll probably use the "title" option as well to set the name of the room to the game name (which may contain spaces and other UTF8 characters)

For you requirements, I think you want to set: persistent true, public false, members_only true.

barhorn wrote:

I'm not clear on how to add the members of the room (I don't want to have to have the members of the room join themselves, if possible),
I see in the documentation that there is a members_only option, but how do I assign who the members are?
How about designating members of the room?

"member" is a type of affiliation, so try this:
ejabberdctl set_room_affiliation testroom conference.localhost user123@example.org member

Sorry for the difficulty

Sorry for the difficulty reading the post. I think I was just excited to get close to the last few phases of my project. I've implemented everything you've suggested, and for the most part it is working great!

One last thing: set_room_affiliation allows me to make someone a member, how do I remove the affiliation? I didn't see a "remove" or "delete" _room_affiliation. I suppose I can change the affiliation type to "none" or something similar, but is there a better way?

Thanks for all the support!

barhorn

barhorn wrote:

set_room_affiliation allows me to make someone a member, how do I remove the affiliation? I didn't see a "remove" or "delete" _room_affiliation. I suppose I can change the affiliation type to "none" or something similar, but is there a better way?

You already found the best way:

%% If the affiliation is 'none', the action is to remove,
%% In any other case the action will be to create the affiliation.
Syndicate content