in reply to Re^2: find all modules that "do" a role
in thread find all modules that "do" a role

Module::Pluggable is core, so the only burden would be (again) upon the plugin author. Personally, I wouldn't check whether a class/package uses Moose but rather just do

my $metaclass = eval { $class->meta }; if ($metaclass) { };

that way non-Moose things have an option to work as plugins as well, as long as they have:

sub meta { ... }

which returns something "good enough". For example the following should work for your use case as a minimal class:

package My::Plugin; sub meta { __PACKAGE }; sub does_role { my ($class,$role) = @_; $role eq 'chatbot' }; 1